Peningkatan kecekapan: Perkongsian kemahiran pembangunan untuk muat turun HTTP tak segerak PHP berbilang fail
Dalam aplikasi Internet moden, muat turun fail adalah perkara biasa keperluan. Walau bagaimanapun, apabila sejumlah besar fail perlu dimuat turun, kaedah muat turun segerak tradisional selalunya tidak cekap, menyebabkan pengguna menunggu lama dan mengurangkan pengalaman pengguna. Artikel ini akan memperkenalkan teknik pembangunan untuk menggunakan HTTP tak segerak PHP untuk memuat turun berbilang fail untuk meningkatkan kecekapan muat turun dan pengalaman pengguna.
$urls = array( 'http://example.com/file1.zip', 'http://example.com/file2.zip', 'http://example.com/file3.zip', // 添加更多文件链接 ); $mh = curl_multi_init(); $handles = array(); foreach ($urls as $url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_multi_add_handle($mh, $ch); $handles[] = $ch; } $running = null; do { curl_multi_exec($mh, $running); } while ($running > 0); foreach ($handles as $ch) { curl_multi_remove_handle($mh, $ch); curl_close($ch); } curl_multi_close($mh);
Kod di atas mula-mula mentakrifkan pautan fail yang perlu dimuat turun, dan kemudian memulakan pemegang berbilang pemprosesan cURL. Gelung melalui pautan fail, buat pemegang cURL untuk setiap pautan dan tambahkannya pada pemegang berbilang pemprosesan. Selepas itu, semua permintaan dilaksanakan dengan memanggil fungsi curl_multi_exec()
sehingga tiada permintaan berjalan. Akhir sekali, sumber dibersihkan dan pemegang cURL dan pemegang berbilang pemprosesan ditutup. curl_multi_exec()
函数来执行所有请求,直到没有请求在运行为止。最后,清理资源,关闭 cURL 句柄和多处理句柄。
curl_multi_info_read()
函数来获取每个请求的信息。下面是一个示例代码:$completed = 0; do { $mh = curl_multi_init(); $handles = array(); foreach ($urls as $url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_multi_add_handle($mh, $ch); $handles[] = $ch; } $running = null; do { curl_multi_exec($mh, $running); $info = curl_multi_info_read($mh); if ($info !== false) { // 处理下载结果 $completed++; $handle = $info['handle']; // ... } } while ($running > 0); foreach ($handles as $ch) { curl_multi_remove_handle($mh, $ch); curl_close($ch); } curl_multi_close($mh); } while ($completed < count($urls));
以上代码中,在每次执行异步 HTTP 请求后,使用 curl_multi_info_read()
函数检查是否有请求已经完成。如果有完成的请求,可以从返回的信息中获取相关的下载结果信息,并进行相应处理。通过记录已完成的请求数量,可以判断是否所有请求都已经完成。
foreach ($urls as $url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 添加错误处理 curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_multi_add_handle($mh, $ch); $handles[] = $ch; }
在上述代码中,通过设置 CURLOPT_FAILONERROR
选项为 true,可以在请求出错时抛出异常。同时,通过设置合理的 CURLOPT_CONNECTTIMEOUT
和 CURLOPT_TIMEOUT
Dalam kod muat turun HTTP tak segerak di atas, sama ada ia berjaya atau gagal, hasil muat turun akan diabaikan. Untuk mengendalikan hasil muat turun dengan lebih baik, anda boleh mendapatkan maklumat setiap permintaan melalui fungsi curl_multi_info_read()
. Berikut ialah contoh kod:
curl_multi_info_read()
digunakan untuk menyemak sama ada sebarang permintaan telah diselesaikan. Jika terdapat permintaan yang lengkap, maklumat hasil muat turun yang berkaitan boleh diperoleh daripada maklumat yang dikembalikan dan diproses dengan sewajarnya. Dengan merekodkan bilangan permintaan yang lengkap, anda boleh menentukan sama ada semua permintaan telah dilengkapkan. #🎜🎜#CURLOPT_FAILONERROR
kepada benar, anda boleh membuang pengecualian apabila permintaan gagal. Pada masa yang sama, dengan menetapkan pilihan CURLOPT_CONNECTTIMEOUT
dan CURLOPT_TIMEOUT
yang munasabah, anda boleh menetapkan sambungan dan meminta tamat masa untuk mengelakkan kegagalan muat turun yang disebabkan oleh tamat masa. #🎜🎜##🎜🎜#Ringkasan#🎜🎜#Teknik menggunakan HTTP tak segerak PHP untuk memuat turun berbilang fail boleh meningkatkan kecekapan muat turun dan pengalaman pengguna dengan ketara. Dengan menggunakan perpustakaan sambungan cURL dengan betul, berbilang permintaan HTTP boleh dimulakan serentak untuk memaksimumkan penggunaan lebar jalur rangkaian. Pada masa yang sama, situasi tidak normal dikendalikan dengan munasabah untuk memastikan kestabilan dan kebolehpercayaan muat turun. Melalui kemahiran pembangunan ini, kami boleh mengendalikan keperluan muat turun sejumlah besar fail dengan lebih cekap dalam projek sebenar. #🎜🎜#Atas ialah kandungan terperinci Peningkatan kecekapan: Perkongsian kemahiran pembangunan untuk muat turun HTTP tak segerak PHP bagi berbilang fail. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!