2016-06-17 5 views
4

Я делаю сайт, на котором будет проверяться, работает ли сайт и живет ли он. Я передаю URL-адрес сайта, который я бы хотел проверить, и следующий код проверяет, жив ли сайт и возвращает код ответа HTTP, а также true или false.HTTP-код ответа 0 - Сайт работает

function urlExists($url=NULL) 
{ 
    if($url == NULL) return false; 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $data = curl_exec($ch); 
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    curl_close($ch); 
    if ($httpcode == 0) { 
     return array (false, $httpcode); 
    } 
    else if($httpcode < 400){ 
     return array (true, $httpcode); 
    } else { 
     return array (false, $httpcode); 
    } 
} 

С одним из сайтов я тестирование, хотя я получаю код ответа HTTP 0, хотя я знаю, что сайт живет и работает.

Сайт очень медленный, так как его большой сайт на не очень мощном сервере, поэтому время отклика может варьироваться от 7 до 25 секунд.

Любая помощь была бы принята с благодарностью.

Спасибо,

Sam

+4

, так как время ответа сервера составляет 7-25 секунд, и вы устанавливаете 'CURLOPT_CONNECTTIMEOUT' на 5 секунд, поэтому вы получаете 0, потому что соединение закрывается до того, как будет получен какой-либо ответ. измените его на 300 и проверьте: https://curl.haxx.se/libcurl/c/CURLOPT_CONNECTTIMEOUT.html –

+1

@ Спасибо за то, что это действительно помогло. Мне также нужно было увеличить CURLOPT_TIMEOUT до 300. –

ответ

4

На основе этих двух звеньев: -

https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html

И

https://curl.haxx.se/libcurl/c/CURLOPT_CONNECTTIMEOUT.html

Первый: - set maximum time the request is allowed to take

Второй один является: - timeout for the connect phase

Как вы сказали, что Site URL вы ударяете принимает 7-25 секунды для реагирования. между тем ваш CURL request завершен и закрыт из-за этих двух настроек времени.

Увеличьте эти два временных параметра в своем коде, и он будет работать на вас.

спасибо.

0

Код 0 возвращает часто при использовании некорректного синтаксиса URL или сервер не найден ошибка.

Вы также можете вызвать функцию curl_error ($ ch) (http://php.net/manual/en/function.curl-error.php), чтобы определить детали ошибки.

2

Я предлагаю вам 2 альтернативы для сравнения - вместе с вашей функцией curl() у вас будет 3 варианта, чтобы узнать, какой из них лучше/быстрее для вас.

Вариант А (все версии PHP), требует FOPEN(), который будет активирован:

if (!$fp = fopen($url, 'r')) 
{ 
    trigger_error("Unable to open URL ($url)", E_USER_ERROR); 

} 
$headers = stream_get_meta_data($fp); 
fclose($fp);  
$http_header_info = $headers['wrapper_data'][0]; 
$httpCode = (int)substr($http_header_info, 9, 3); 


Вариант B (php5 +):

$headers = get_headers($url, 1); 
$http_header_info = $headers[0]; 
$httpCode = substr($http_header_info, 9, 3); 

Кроме того, если кто-нибудь имеет ориентиры по этим 3 подходам, мне любопытно узнать, какая из них более подходит (только для поиска заголовков HTTP-ответов, конечно)