日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

[译]php和curl_multi_exec

發布時間:2025/5/22 php 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [译]php和curl_multi_exec 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文是PHP and curl_multi_exec的翻譯

這篇文章闡述了如何從curl_multi句柄獲取數據。不久前,我將這段代碼片段貼到了一個更大的示例代碼中:

<?php$active = NULL;do {$ret = curl_multi_exec($multi, $active);} while ($ret == CURLM_CALL_MULTI_PERFORM);while ($active && $ret == CURLM_OK) {if (curl_multi_select($multi) != -1) {do {$mrc = curl_multi_exec($multi, $active);} while ($mrc == CURLM_CALL_MULTI_PERFORM);}} ?>

我之前沒有真的去查過文檔試圖理解過它。所以這段代碼讓我感到困惑。現在我來解釋下它都做了什么。
首先,這里有兩個外層的循環。第一個負責清除curl緩存。第二個負責等待更多的數據,并且獲取到這些數據。這就是一個典型的阻塞I/O例子。我們阻塞住剩下程序的執行直到網絡I/O的結束。盡管這不是處理網絡I/O最合適的方法,但對于單進程、同步的PHP,這實際上是我們僅有的選擇。

讓我們先來看下第一層循環:

<?php$active = NULL;do {$ret = curl_multi_exec($multi, $active);} while ($ret == CURLM_CALL_MULTI_PERFORM); ?>

curl_multi_exec嘗試從multi句柄中獲取寫數據。$multi是之前調用curl_multi_init()方法產生的句柄,$active和$ret都是整型的值。
curl_multi_exec()把$active設為正在處理的句柄個數。換句話說,如果你正在用這個句柄請求5個URL,那么curl_multi_exec將返回5當它正在處理所有的5個URL(應該是指curl_multi_exec設$active為5),然后當每個請求結束時,這個數字將會逐漸減少直到0。

$ret是如下值的一種:

  • CURLM_CALL_MULTI_PERFORM (-1):這意味著你需要再次調用curl_multi_exec(),因為仍有數據可供處理。
  • CURLM_OK(0):如文檔中所說:“都好了”。這意味著可能有更多的數據,但還沒有到呢。
  • 錯誤碼中的一個:CURLM_BAD_HANDLE ,CURLM_OUT_OF_MEMORY ,CURLM_INTERNAL_ERROR ,CURLM_BAD_SOCKET 。所有這些表明我們需要停止處理。

所以當我們正在執行第一層循環,唯一需要我們繼續迭代的情況就是CURLM_CALL_MULTI_PERFORM。

現在,對于一些相當小的情況,第一層循環就是你所需要的。然而通常的情況是,第一層循環會返回CURL_OK來表明還會有更多的數據,但是這些數據還沒有在網絡上傳輸過來呢。

我們需要wait。

這時候我們就需要第二層循環:

<?phpwhile ($active && $ret == CURLM_OK) {if (curl_multi_select($multi) != -1) {do {$mrc = curl_multi_exec($multi, $active);} while ($mrc == CURLM_CALL_MULTI_PERFORM);}} ?>

這層循環是說...

(while): 只要有活躍的連接,一切還看著都OK…(if) 如果網絡socket還有些數據…(do/while) 只要系統告訴我們要一直去獲取數據,我們就處理吧

所以第二層循環負責檢查套接字直到一切就緒。
PHP手冊對這些東西的細節有稍微的介紹,但是libcurl C的文檔更加的完整。

總結

以上是生活随笔為你收集整理的[译]php和curl_multi_exec的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。