Bagaimana untuk Menstrim Fail Zip Besar pada LAMP Stack untuk Muat Turun Lebih Pantas?

Barbara Streisand
Lepaskan: 2024-11-08 02:42:02
asal
565 orang telah melayarinya

How to Stream Large Zip Files on LAMP Stack for Faster Downloads?

Mencipta Fail Zip On-the-Fly untuk Fail Besar pada Tindanan LAMP

Masalah:

Apabila mencipta fail zip berbilang fail besar untuk muat turun pengguna, kaedah konvensional mengakibatkan isu prestasi yang ketara semasa fasa awal disebabkan penggunaan CPU dan cakera yang berat.

Penyelesaian Menggunakan Penstriman:

Untuk menangani masalah ini, kami boleh memanfaatkan keupayaan penstriman zip dengan menggunakan popen() atau proc_open() untuk melaksanakan saluran paip arahan zip dan mendapatkan semula stdout sebagai aliran PHP. Dengan menggabungkan ini dengan proses pelayan web, kami boleh menstrim fail zip kepada pengguna semasa ia dibuat dengan cepat.

Pelaksanaan Menggunakan popen():

<?php
// Set necessary headers
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename="file.zip"');

// Execute zip command and retrieve stdout as a stream
$fp = popen('zip -r - file1 file2 file3', 'r');

// Read and echo data in chunks
$bufsize = 65535;
$buff = '';
while (!feof($fp)) {
    $buff = fread($fp, $bufsize);
    echo $buff;
}
pclose($fp);
?>
Salin selepas log masuk

Petua untuk Pengoptimuman:

  • Gunakan saiz penimbal yang sesuai (cth., 8192 seperti yang dicadangkan oleh Benji dalam ulasan).
  • Matikan petikan ajaib jika perlu.
  • Tetapkan mb_http_output('pass') untuk prestasi optimum.
  • Gunakan pengepala berkaitan kandungan yang sesuai:

    • Jenis Kandungan: aplikasi/zip
    • Pelupusan kandungan: lampiran; filename="file.zip"

Malangnya, tidak mudah untuk menetapkan pengepala untuk menunjukkan penstriman atau panjang kandungan yang tidak diketahui dalam konteks ini.

Nota tentang flush():

Adalah penting untuk ambil perhatian bahawa memanggil flush() dalam gelung baca/gema boleh menyebabkan masalah dengan fail besar dan rangkaian perlahan disebabkan penimbal output dalaman Apache semakin ditakluki. Oleh itu, adalah lebih baik untuk meninggalkan panggilan flush() dalam kod.

Atas ialah kandungan terperinci Bagaimana untuk Menstrim Fail Zip Besar pada LAMP Stack untuk Muat Turun Lebih Pantas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!