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

PHP 下載遠端大檔案的三種方案效能比較

     編輯:PHP 綜合知識

三種 PHP 下載遠端檔案寫法的記憶體與效能分析

在導出 Excel、同步遠端資源等場景中,下載大檔案時的記憶體佔用至關重要。本文比較三種常見寫法。

方案一:fopen() / file_get_contents() 直接讀取

$url = 'https://example.com/large.xls';
$fp = fopen($url, 'r');
file_put_contents('./test.xls', $fp);

缺點:整個檔案會先載入記憶體,大檔案易導致 memory_limit 耗盡。

方案二:cURL CURLOPT_RETURNTRANSFER

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
file_put_contents('./test.xls', curl_exec($ch));
curl_close($ch);

同樣會將回應內容完整存入記憶體再寫入磁碟,記憶體壓力大。

方案三:cURL 串流直寫磁碟(推薦)

$fp = fopen('./test.xls', 'w');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);  // 直接輸出至檔案指標
curl_exec($ch);
curl_close($ch);
fclose($fp);

優點:資料以流方式直接寫入檔案,不佔用 PHP 記憶體,支援任意大小檔案。

效能對比總結

方案記憶體佔用適用場景
file_get_contents / fopen高(整檔載入)小檔案(<10MB)
cURL + RETURNTRANSFER高(整檔載入)中小檔案,需處理回應標頭
cURL + CURLOPT_FILE極低(流式)大檔案、長時間下載、生產環境

實務上,針對大檔案下載強烈建議使用方案三,並搭配 set_time_limit(0) 避免逾時。

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