首页  >  文章  >  后端开发  >  如何在 x86 系统上的 PHP 中确定超过 2 GB 的文件大小?

如何在 x86 系统上的 PHP 中确定超过 2 GB 的文件大小?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-21 16:35:30653浏览

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

PHP x86:在没有外部程序的情况下确定超过 2 GB 的文件大小

在 PHP 中,检索大于 2 的文件的文件大小32 位平台上的 GB 提出了挑战。像 filesize()、stat() 和 fseek() 这样的标准 PHP 函数都达不到要求。

为了解决这个问题,出现了一个名为 大文件工具 的综合开源项目。它包含在 PHP 中管理超过 2 GB 的文件的巧妙技术,甚至在 32 位系统上也是如此。

大文件工具采用的一种方法尝试利用特定于平台的 shell 命令。对于 Windows,它使用 shell 替换修饰符。对于 *nix 和 macOS,它使用 stat 命令。如果这些失败,它将转向 COM(特别适用于 Windows)。作为最后的手段,它会恢复为 filesize()。

以下代码片段展示了如何使用此方法确定大文件的文件大小:

<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>

以上是如何在 x86 系统上的 PHP 中确定超过 2 GB 的文件大小?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn