|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2016-04-23 23:04 UTC] pierrick@php.net
-Status: Open
+Status: Wont fix
[2016-04-23 23:04 UTC] pierrick@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Nov 12 12:00:01 2025 UTC |
Description: ------------ php version 5.5.32 curl 7.37.0 (x86_64-apple-darwin13.0.2) libcurl/7.37.0 OpenSSL/0.9.8} zlib/1.2.5 I found use curl_multi_* methods, if some curl handle connect fail or execute timeout, use curl_errno function to get the error code, but alway return zero. curl_error function return data is right; Test script: --------------- <?php //example 1 $mh = curl_multi_init(); $ch1 = curl_init('http://www.some_not_exist_host.com'); curl_setopt($ch1, CURLOPT_TIMEOUT, 3); curl_setopt($ch1, CURLOPT_CONNECTTIMEOUT_MS, 400); curl_setopt($ch1, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch1, CURLOPT_NOSIGNAL, true); curl_multi_add_handle($mh, $ch1); $ch2 = curl_init('http://127.0.0.1'); curl_setopt($ch2, CURLOPT_TIMEOUT, 3); curl_setopt($ch2, CURLOPT_CONNECTTIMEOUT_MS, 400); curl_setopt($ch2, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch2, CURLOPT_NOSIGNAL, true); curl_multi_add_handle($mh, $ch2); $active = null; do{ do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); if ($mrc != CURLM_OK){ break; } $info = curl_multi_info_read($mh, $msgs_in_queue); if ($info !== false){ $ch = $info['handle']; var_dump(curl_error($ch)); var_dump(curl_errno($ch)); //bug? alway return 0 curl_multi_remove_handle($mh, $ch); } if ($active > 0) { curl_multi_select($mh, 0.5); } }while ($active); curl_multi_remove_handle($mh, $ch1); curl_multi_close($mh); //example 2 echo "----------------", PHP_EOL; $ch = curl_init('http://www.some_not_exist_host.com'); curl_setopt($ch, CURLOPT_TIMEOUT, 3); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 400); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_NOSIGNAL, true); curl_exec($ch); var_dump(curl_error($ch)); var_dump(curl_errno($ch)); Expected result: ---------------- string(0) "" int(0) string(51) "Could not resolve host: www.some_not_exist_host.com" int(6) ---------------- string(51) "Could not resolve host: www.some_not_exist_host.com" int(6) Actual result: -------------- string(0) "" int(0) string(51) "Could not resolve host: www.some_not_exist_host.com" int(0) ---------------- string(51) "Could not resolve host: www.some_not_exist_host.com" int(6)