首頁 >後端開發 >php教程 >如何在 x86 系統上的 PHP 中確定超過 2 GB 的檔案大小?

如何在 x86 系統上的 PHP 中確定超過 2 GB 的檔案大小?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-21 16:35:30756瀏覽

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