Phe*_*Dev 6 php curl libcurl curl-multi
$data_struct = array();
$data_struct[]['opts'] = array( CURLOPT_URL => 'http://www.yahoo.com/', CURLOPT_RETURNTRANSFER => true);
$data_struct[]['opts'] = array( CURLOPT_URL => 'http://www.google.com/', CURLOPT_RETURNTRANSFER => true);
$data_struct[]['opts'] = array( CURLOPT_URL => 'http://404.php.net/', CURLOPT_RETURNTRANSFER => true);
//create the multiple cURL handle
$mh = curl_multi_init();
// create and add handles to data structure
foreach ($data_struct as $i => $data){
$data_struct[$i]['handle'] = curl_init();
curl_setopt_array($data_struct[$i]['handle'], $data_struct[$i]['opts']);
curl_multi_add_handle($mh, $data_struct[$i]['handle']);
}
$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);
}
}
foreach ($data_struct as $i => $data){
$row = array();
$row['httpcode'] = curl_getinfo($data_struct[$i]['handle'] , CURLINFO_HTTP_CODE);
$row['url'] = $data['opts'][CURLOPT_URL];
$row['error'] = curl_error($data_struct[$i]['handle']);
$row['errorno'] = curl_errno($data_struct[$i]['handle']);
print_r($row);
echo "\n";
curl_multi_remove_handle($mh, $data_struct[$i]['handle']);
curl_close($data_struct[$i]['handle']);
}
Run Code Online (Sandbox Code Playgroud)
产量
Array
(
[httpcode] => 302
[url] => http://www.yahoo.com/
[error] =>
[errorno] => 0
)
Array
(
[httpcode] => 302
[url] => http://www.google.com/
[error] =>
[errorno] => 0
)
Array
(
[httpcode] => 0
[url] => http://404.php.net/
[error] => Couldn't resolve host '404.php.net'
[errorno] => 0
)
Run Code Online (Sandbox Code Playgroud)
在相同的情况下,尽管curl_error返回错误消息,但多个curl返回0并使用curl_errno函数.
如果您有PHP 5.2.x 或更高版本(此处更新更好),我建议curl_multi_info_read()在这种情况下使用 , 。(参见:curl_multi_info_read() 文档。)
curl_multi_info_read()您可以通过将其放在代码末尾附近(在您的行之后)来查看输出,echo "\n";如下所示:
var_dump(curl_multi_info_read($mh));
Run Code Online (Sandbox Code Playgroud)
这似乎给出了正确的 errno (特别是"result" => 6):
Array
(
[httpcode] => 0
[url] => http://404.php.net/
[error] => Couldn't resolve host '404.php.net'
[errorno] => 0
)
array(3) {
["msg"]=>
int(1)
["result"]=>
int(6)
["handle"]=>
resource(7) of type (curl)
}
Run Code Online (Sandbox Code Playgroud)
注意:在 PHP 5.2.8 安装上进行了测试。