Rumah > pembangunan bahagian belakang > tutorial php > Peningkatan kecekapan: Perkongsian kemahiran pembangunan untuk muat turun HTTP tak segerak PHP bagi berbilang fail

Peningkatan kecekapan: Perkongsian kemahiran pembangunan untuk muat turun HTTP tak segerak PHP bagi berbilang fail

WBOY
Lepaskan: 2023-09-12 12:38:01
asal
1037 orang telah melayarinya

效率提升:PHP 异步 HTTP 下载多个文件的开发技巧分享

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.

  1. Prinsip muat turun HTTP tak segerak
    Kaedah muat turun segerak tradisional ialah memuat turun fail satu demi satu dan tunggu fail sebelumnya dimuat turun sebelum memuat turun fail seterusnya. Muat turun HTTP tak segerak boleh memulakan berbilang permintaan pada masa yang sama, menggunakan sepenuhnya lebar jalur rangkaian dan meningkatkan kelajuan muat turun dengan pesat. Pustaka sambungan cURL boleh digunakan dalam PHP untuk melaksanakan permintaan HTTP tak segerak.
  2. Menggunakan cURL untuk melaksanakan muat turun HTTP tak segerak
    Pertama, pastikan pelayan anda memasang pustaka sambungan cURL. Dalam PHP, permintaan HTTP tak segerak boleh dilaksanakan melalui kod berikut:
$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);
Salin selepas log masuk

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 句柄和多处理句柄。

  1. 处理下载结果
    在上述的异步 HTTP 下载代码中,无论是成功还是失败,下载的结果都会被忽略。为了更好地处理下载结果,可以通过 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));
Salin selepas log masuk

以上代码中,在每次执行异步 HTTP 请求后,使用 curl_multi_info_read() 函数检查是否有请求已经完成。如果有完成的请求,可以从返回的信息中获取相关的下载结果信息,并进行相应处理。通过记录已完成的请求数量,可以判断是否所有请求都已经完成。

  1. 添加错误处理
    在实际使用中,可能会出现网络连接错误或服务器响应错误等异常情况。为了处理这些异常,可以在每个请求的设置中添加相应的错误处理代码,以保证下载的稳定性和可靠性。
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;
}
Salin selepas log masuk

在上述代码中,通过设置 CURLOPT_FAILONERROR 选项为 true,可以在请求出错时抛出异常。同时,通过设置合理的 CURLOPT_CONNECTTIMEOUTCURLOPT_TIMEOUT

    Memproses hasil muat turun

    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:

    rrreee#🎜🎜#Dalam kod di atas, selepas setiap permintaan HTTP tak segerak dilaksanakan, fungsi 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. #🎜🎜#
      #🎜🎜#Tambah pengendalian ralat #🎜🎜#Dalam penggunaan sebenar, situasi tidak normal seperti ralat sambungan rangkaian atau ralat tindak balas pelayan mungkin berlaku. Untuk mengendalikan pengecualian ini, anda boleh menambah kod pengendalian ralat yang sepadan dalam tetapan setiap permintaan untuk memastikan kestabilan dan kebolehpercayaan muat turun. #🎜🎜##🎜🎜#rrreee#🎜🎜#Dalam kod di atas, dengan menetapkan pilihan 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!

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan