Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Menstrim Fail Zip Besar dalam PHP Tanpa Masalah Sumber?
Dalam perkhidmatan web, mencipta zip fail yang luas untuk dimuat turun boleh memerlukan sumber yang intensif. Pendekatan konvensional melibatkan mencipta fail zip sementara dan menggemakannya kepada pengguna atau menyimpannya ke cakera. Walau bagaimanapun, kaedah ini membawa kepada isu seperti:
Pendekatan alternatif ialah memanfaatkan keupayaan penstriman alat baris arahan Linux, zip. Dengan menggunakan arahan saluran paip seperti ls -1 | zip -@ - | kucing > file.zip, zip boleh beroperasi dalam mod penstriman, menghasilkan jejak memori yang minimum. Paip dalam konteks ini berfungsi sebagai penampan; apabila penimbal diisi, sistem pengendalian menghentikan sementara program penulisan. Ini memastikan zip beroperasi pada rentak yang sejajar dengan kelajuan penulisan program yang disertakan.
Untuk mencapai mekanisme penstriman yang sama pada tindanan LAMP menggunakan PHP, anda boleh menggunakan fungsi popen() atau proc_open() untuk melaksanakan arahan zip. Stdout daripada arahan itu kemudiannya boleh diambil semula sebagai aliran PHP. Dengan menggabungkan teknik ini, coretan kod berikut menunjukkan cara menstrim fail zip kepada pengguna semasa ia dibuat:
header('Content-Type: application/octet-stream'); header('Content-disposition: attachment; filename="file.zip"'); $fp = popen('zip -r - file1 file2 file3', 'r'); $bufsize = 8192; $buff = ''; while(!feof($fp)) { $buff = fread($fp, $bufsize); echo $buff; } pclose($fp);
Kod ini menstrim fail zip terus kepada klien tanpa memerlukan storan sementara atau penggunaan memori yang berlebihan. Ia secara berkesan meniru kefungsian perintah kucing dalam coretan bash.
Atas ialah kandungan terperinci Bagaimana untuk Menstrim Fail Zip Besar dalam PHP Tanpa Masalah Sumber?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!