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
Libérer: 2024-10-21 16:35:30
original
807 Les gens l'ont consulté

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>
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal