2013-03-21 47 views
20

我想了解curl_multi_exec。我在這裏複製了一個手動示例。所以我想知道,它是如何工作的?我猜第一個循環發送了http請求?但是,那麼就接着用功能看似無證標誌一個循環內循環..理解PHP curl_multi_exec

我想下載+ = 70名+的url =平行。

http://www.php.net/manual/en/function.curl-multi-exec.php

<?php 
... 
$active = null; 
//execute the handles 
do { 
    $mrc = curl_multi_exec($mh, $active); 
} while ($mrc == CURLM_CALL_MULTI_PERFORM); 

while ($active && $mrc == CURLM_OK) { 
    if (curl_multi_select($mh) != -1) { 
     do { 
      $mrc = curl_multi_exec($mh, $active); 
     } while ($mrc == CURLM_CALL_MULTI_PERFORM); 
    } 
} 
... 
?> 

回答

20

您可以探索兩篇文章描述這個例子。

PHP and curl_multi_exec

首先,這裏的較高水平。有兩個外部循環。第一個負責清除curl緩衝區。第二個負責等待更多的信息,然後獲取這些信息。這是所謂阻塞I/O的一個例子。我們阻止程序其餘部分的執行,直到網絡I/O完成。儘管這不是處理網絡I/O的最佳方式,但它實際上是我們在單線程同步PHP中的唯一選擇。

Doing curl_multi_exec the right way

首先$ MRC變量,從我們瞭解到的響應是捲曲預定義常量定義的捲曲代碼手冊。在esssence中,它是一個常規響應,與其他任何PHP函數一樣,curl_multi_exec也不例外,只有在完成後才返回響應。這意味着應該只有一個響應。在完美的世界中,這個單一響應是0(零)或等於預定義的常數CURLM_OK。