首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 不使用 copy() 以檔案讀寫方式複製檔案

     編輯:PHP 綜合知識

手動 fopen/fread/fwrite 實作檔案複製,理解底層運作,或需在複製過程中處理資料 (加密、壓縮、過濾)。

基本實作

function copyFiles($file1, $file2): bool {
    $content = @file_get_contents($file1);
    if ($content === false) return false;
    $fp = fopen($file2, 'wb');
    if (!$fp) return false;
    $written = fwrite($fp, $content);
    fclose($fp);
    return $written !== false;
}

分塊複製 (大檔案適用)

function copyFilesChunked($src, $dest, int $chunkSize = 8192): bool {
    $fsrc = fopen($src, 'rb');
    $fdest = fopen($dest, 'wb');
    if (!$fsrc || !$fdest) return false;
    while (!feof($fsrc)) {
        $buffer = fread($fsrc, $chunkSize);
        if (fwrite($fdest, $buffer) === false) {
            fclose($fsrc); fclose($fdest);
            return false;
        }
    }
    fclose($fsrc); fclose($fdest);
    return true;
}

邊複製邊處理範例

function copyAndEncrypt($src, $dest, string $key): bool {
    $fsrc = fopen($src, 'rb');
    $fdest = fopen($dest, 'wb');
    if (!$fsrc || !$fdest) return false;
    while (!feof($fsrc)) {
        $chunk = fread($fsrc, 8192);
        $encrypted = openssl_encrypt($chunk, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
        fwrite($fdest, $encrypted);
    }
    fclose($fsrc); fclose($fdest);
    return true;
}

效能比較

方法速度記憶體彈性
copy()最快 (C 實作)低無
stream_copy_to_stream()極快 (核心)極低低
file_get_contents + fwrite中高 (全檔載入)中
分塊 fread/fwrite中極低 (固定緩衝)高 (可插入處理)

一般複製用 copy() 或 stream_copy_to_stream(),需邊複製邊處理才用分塊讀寫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved