curl_errno()
не возвращает результирующий код, если он используется внутри curl_multi
.
Кажется, что он недокументирован, но если ошибка возникает внутри curl_multi()
, то resources
не приведет к код ошибки до curl_multi_info_read()
вызывается. Существует ссылка на ошибку / запрос документации: https://bugs.php.net/bug.php?id=79318&thanks=4
Оригинальный ответ
Обычно, когда я вмешиваюсь в 0
в качестве кода ответа, у меня возникает локальная проблема (DNS, сеть, SSL, URL ..).
Чтобы копать дальше, вы можете проверить, была ли в curl ошибка при выполнении. Это можно проверить с помощью curl_errno () , который возвращает номер ошибки скручивания, и curl_error () , который вернет описательную строку ошибки.
Код ошибки и ошибка -Message, возможно, будет одним из тех, которые вы можете найти здесь: https://curl.haxx.se/libcurl/c/libcurl-errors.html
EDIT # 2
Если вы работаете с curl_multi, вам нужно позвонить curl_multi_info_read()
один раз, чтобы получить результирующие коды. Ниже приведен пример того, как вы можете получить соответствующую запись результата.
// your code...
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);
while ($result = curl_multi_info_read($mh)) {
if ($result['result'] == CURLM_OK) {
echo 'Success: ' . curl_getinfo($result['handle'], CURLINFO_HTTP_CODE) . "\n";
} else {
echo 'Error: ' . curl_strerror($result['result']) . "\n";
}
}
Реальный тест теперь приведет к следующему:
$ php test.php
Error: Couldn't resolve host name
Success: 200
Success: 200
РЕДАКТИРОВАТЬ # 3
Кроме того, кажется, что вызов curl_multi_info_read($mh)
тоже помогает, и внутренне заполняет информацию в ваших существующих дескрипторах / ресурсах.
На мой взгляд, это немного вводит в заблуждение. Я создам отчет об ошибке / документации для php, так как ничего не могу найти по этому поводу. Я просто наткнулся на то, как я проверил, как жадность сделала его низкоуровневую реализацию.
// your code...
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);
while ($result = curl_multi_info_read($mh)) {}
foreach($ch as $handle) {
echo "Handle: " . curl_errno($handle) . PHP_EOL;
}