在 Web 服務中,建立大量檔案的 zip 進行下載可能會佔用大量資源。傳統方法涉及建立臨時 zip 檔案並將其回顯給使用者或將其儲存到磁碟。但是,此方法會導致以下問題:
另一種方法是利用 Linux 命令列工具的流功能,拉鍊。透過使用像 ls -1 | 這樣的管道命令zip -@ - |貓> file.zip、zip 可以在流模式下運行,從而最大限度地減少記憶體佔用。在這種情況下,管道的作用相當於緩衝區;當緩衝區被填滿時,作業系統暫時停止寫入程式。這可確保 zip 的運作速度與隨附程式的寫入速度一致。
要使用PHP 在LAMP 堆疊上實現相同的串流傳輸機制,您需要可以利用popen() 或proc_open() 函數來執行zip 指令。然後可以將命令的標準輸出作為 PHP 流檢索。透過結合這些技術,以下程式碼片段示範如何在建立zip 檔案時將其串流傳輸給使用者:
此程式碼將zip 檔案直接串流到用戶端,而無需暫時儲存或內存消耗過多。它有效地模擬了 bash 程式碼片段中 cat 指令的功能。
以上是如何在 PHP 中傳輸大型 Zip 檔案而不造成資源過載?的詳細內容。更多資訊請關注PHP中文網其他相關文章!