PHP x86 : Détermination de la taille des fichiers dépassant 2 Go sans programmes externes
En PHP, récupérer la taille des fichiers de plus de 2 Go Go sur les plates-formes 32 bits pose un défi. Les fonctions PHP standard telles que filesize(), stat() et fseek() ne sont pas à la hauteur.
Pour résoudre ce problème, un projet open source complet appelé Big File Tools a vu le jour. Il englobe des techniques ingénieuses pour gérer des fichiers de plus de 2 Go en PHP, même sur des systèmes 32 bits.
Une méthode employée par Big File Tools tente d'exploiter les commandes shell spécifiques à la plate-forme. Pour Windows, il utilise des modificateurs de substitution de shell. Pour * nix et macOS, il utilise la commande stat. Si ceux-ci échouent, il passe à COM (en particulier pour Windows). En dernier recours, il revient à filesize().
Voici un extrait de code montrant comment vous pouvez déterminer la taille d'un fichier volumineux en utilisant cette approche :
<code class="php">function filesize64($file) { $size = null; // Try shell command if (function_exists('exec') && !ini_get('safe_mode')) { $cmd = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') ? "for %F in (\"$file\") do @echo %~zF" : "stat -c%s \"$file\""; @exec($cmd, $output); if (is_array($output) && ctype_digit($size = trim(implode("\n", $output)))) { return $size; } } // Try Windows COM interface if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' && class_exists("COM")) { try { $fsobj = new COM('Scripting.FileSystemObject'); $f = $fsobj->GetFile(realpath($file)); $size = $f->Size; } catch (Exception $e) {} if (ctype_digit($size)) { return $size; } } // Fall back to filesize() return filesize($file); }</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!