取得檔案大小>沒有外部程式的PHP 中的2 GB 檔案
確定檔案大小的預設方法,例如filesize()、 stat() 和fseek(),無法準確捕捉超過2 的檔案大小GB。然而,PHP 32 位元平台中存在一個利用開源專案大檔案工具的可行解決方案。
大檔案工具:綜合解決方案
大檔案工具包含一系列專門設計用於操作大於 2 GB 的檔案的技術。這個獨立於平台的程式庫提供了一種強大的方法,最初嘗試利用特定於系統的 shell 命令。在 shell 指令不可用的情況下,它使用 Windows COM 或訴諸於 filesize()。
實作解決方案
以下PHP 程式碼顯示如何實作Big檔案工具解決方案:
<code class="php">/* * This software may be modified and distributed under the terms * of the MIT license. */ function filesize64($file) { static $iswin; if (!isset($iswin)) { $iswin = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN'); } static $exec_works; if (!isset($exec_works)) { $exec_works = (function_exists('exec') && !ini_get('safe_mode') && @exec('echo EXEC') == 'EXEC'); } // try a shell command if ($exec_works) { $cmd = ($iswin) ? "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 the Windows COM interface if ($iswin && class_exists("COM")) { try { $fsobj = new COM('Scripting.FileSystemObject'); $f = $fsobj->GetFile( realpath($file) ); $size = $f->Size; } catch (Exception $e) { $size = null; } if (ctype_digit($size)) { return $size; } } // if all else fails return filesize($file); }</code>
此實作可確保準確確定超過2 GB 的檔案大小,而無需外部程式。
以上是如何在 PHP 中不使用外部工具確定大於 2 GB 的檔案大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!