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中文網其他相關文章!