Я не понимаю, когда я эхо $ httpCode, я всегда получаю 0, я ожидал 404, когда меняю $ html_brand на сломанный URL. Есть ли что-то, о чем я скучаю или не знаю? Благодарю.
//check if url exist $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $html_brand); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($httpCode == 404) { echo "The Web Page Cannot Be Found"; return; } curl_close($ch);
Если вы подключитесь к серверу, вы можете получить от него код возврата, иначе он будет терпеть неудачу, и вы получите 0. Поэтому, если вы попытаетесь подключиться к «www.google.com/lksdfk», вы получите код возврата 400, если вы перейдете непосредственно на google.com, вы получите 302 (а затем 200, если вы перейдете на следующую страницу … ну, я делаю это, потому что он переадресуется на google.com.br, так что вы не можете этого понять) и если вы перейдете на «googlecom», вы получите 0 (хост не найден), поэтому с последним, некому отправить код обратно.
Протестировано с использованием приведенного ниже кода.
<?php $html_brand = "www.google.com"; $ch = curl_init(); $options = array( CURLOPT_URL => $html_brand, CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_ENCODING => "", CURLOPT_AUTOREFERER => true, CURLOPT_CONNECTTIMEOUT => 120, CURLOPT_TIMEOUT => 120, CURLOPT_MAXREDIRS => 10, ); curl_setopt_array( $ch, $options ); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ( $httpCode != 200 ){ echo "Return code is {$httpCode} \n" .curl_error($ch); } else { echo "<pre>".htmlspecialchars($response)."</pre>"; } curl_close($ch);
Попробуйте это после curl_exec, чтобы узнать, в чем проблема:
print curl_error($ch);
Если он печатает что-то вроде «неправильного», проверьте его URL-адрес.
Какое точное содержимое вы передаете в $ html_brand?
Если он имеет неверный синтаксис URL, вы, скорее всего, получите код HTTP 0.
Как сказано здесь и ниже, неудачный запрос ( т. Е. Сервер не найден ) возвращает false, код состояния HTTP не сохраняется, поскольку ответ так и не был получен.
Вызов curl_error()
.
проверьте curl_error после curl_getinfo, чтобы узнать скрытые ошибки.
if(curl_errno($ch)){ echo 'Curl error: ' . curl_error($ch); }
У меня была такая же проблема, и в моем случае это было связано с тем, что функция curl_exec отключена в php.ini. Проверка журналов:
PHP Warning: curl_exec() has been disabled for security reasons in /var/www/***/html/test.php on line 18
Решение – удалить curl_exec из отключенных функций в php.ini в файле конфигурации сервера.