ファイル サイズの取得 >外部プログラムを使用しない PHP の 2 GB ファイル
filesize()、stat()、fseek() などのファイル サイズを決定するデフォルトの方法では、2 GB を超えるファイルのサイズを正確にキャプチャできません。 GB。ただし、PHP 32 ビット プラットフォームには、オープンソース プロジェクトである Big File Tools を利用した実行可能なソリューションが存在します。
Big File Tools: 包括的なソリューション
Big Fileツールには、2 GB を超えるファイルを操作するために特別に設計されたさまざまなテクニックが含まれています。このプラットフォームに依存しないライブラリは堅牢なアプローチを提供し、最初はシステム固有のシェル コマンドを活用しようとします。シェル コマンドが使用できないシナリオでは、Windows COM を使用するか、filesize() を使用します。
ソリューションの実装
次の PHP コードは、大きなサイズを実装する方法を示しています。ファイル ツール ソリューション:
<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 中国語 Web サイトの他の関連記事を参照してください。