PHP x86: 外部プログラムなしで 2 GB を超えるファイル サイズを決定する
PHP で 2 GB を超えるファイル サイズを取得する32 ビット プラットフォームでの GB には課題があります。 filesize()、stat()、fseek() などの標準的な PHP 関数では不十分です。
これに対処するために、Big File Tools と呼ばれる包括的なオープンソース プロジェクトが登場しました。これには、32 ビット システム上であっても、PHP で 2 GB を超えるファイルを管理するための独創的なテクニックが含まれています。
ビッグ ファイル ツールで採用されている方法の 1 つは、プラットフォーム固有のシェル コマンドを活用しようとしています。 Windows の場合、シェル置換修飾子を利用します。 *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 中国語 Web サイトの他の関連記事を参照してください。