首頁  >  文章  >  後端開發  >  如何在 PHP 中不使用外部工具確定大於 2 GB 的檔案大小?

如何在 PHP 中不使用外部工具確定大於 2 GB 的檔案大小?

Patricia Arquette
Patricia Arquette原創
2024-10-21 16:49:02743瀏覽

How to Determine File Size of Files Larger Than 2 GB in PHP Without Using External Tools?

取得檔案大小>沒有外部程式的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') &amp;&amp; !ini_get('safe_mode') &amp;&amp; @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) &amp;&amp; ctype_digit($size = trim(implode("\n", $output)))) {
            return $size;
        }
    }

    // try the Windows COM interface
    if ($iswin &amp;&amp; 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn