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); ?>
Petua untuk Pengoptimuman:
Gunakan pengepala berkaitan kandungan yang sesuai:
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!