2012-04-21 3 views
1

Я использую cURL для извлечения файла с сервера. Интересно, есть ли способ указать возвращаемое значение, когда curl_exec() терпит неудачу. Мой код выглядит так:curl return value for error

if (!$result = curl_exec($curl)){ 
    echo "something is wrong."; 
    exit; 
} 
/** 
*the rest of the script 
*/ 

При сбое вызова Exec(), эхо заявление не печатается на странице, и, видимо, выход() не вызывается, а также, в результате чего мои следующие сценарии для выполнения в нормальный. Я заметил, что когда curl_exec() терпит неудачу, он не дает вам FALSE, он просто дает вам что-то вроде страницы «NOT FOUND», я думаю, что это моя проблема. Есть ли способ, который может заставить его возвращать логическое значение или строку, чтобы я мог выполнить проверку условия? Большое спасибо.

ответ

1

curl_exec будет возвращать только false, если запрос HTTP не завершился успешно с технической точки зрения. Если сам запрос делает, но результат не тот, который вы ожидали (например, сервер ответил 404), он будет правильно return true или результат (в зависимости от установленного CURLOPT_RETURNTRANSFER).

Поэтому вы должны проверить этот вариант отдельно. Например:

if (!$result = curl_exec($curl)){ 
    echo "request totally failed."; 
    exit; 
} 

$code = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
if ($code >= 400) { 
    echo "the server responded with an error code."; 
    exit; 
} 

Для получения дополнительной информации см. list of HTTP status codes.

+0

Обратите внимание на предупреждение от страницы curl_exec PHP: «Эта функция может возвращать Boolean FALSE, но также может возвращать небулево значение, которое оценивается как FALSE [...] Используйте оператор === для проверки возвращаемого значения этой функции ". http://php.net/manual/en/function.curl-exec.php –

0

Try:

$result = curl_exec($curl); 
if (!$result){ 
    echo "something is wrong."; 
    exit; 
} 

Условие выше будет выполнено, только если curl_exec() возвращает ложь. curl_exec() возвращает false, когда ему не удается получить доступ к целевой ссылке, которую вы предоставили. Даже если подобное возвращает ошибку 404, curl_exec() не вернет false, так как у него не было проблем с доступом к ссылке.