Maison >développement back-end >tutoriel php >Comment déterminer la taille des fichiers de plus de 2 Go en PHP sur les systèmes x86 ?

Comment déterminer la taille des fichiers de plus de 2 Go en PHP sur les systèmes x86 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-21 16:35:30756parcourir

How to Determine File Size of Files Over 2 GB in PHP on x86 Systems?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn