curl_errno返回0而不是6

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函数.

sum*_*mea 4

如果您有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 安装上进行了测试。