Получение HTTP кода в PHP с помощью curl
Я использую CURL, чтобы получить статус сайта, если он вверх/вниз или перенаправление на другой сайт. Я хочу, чтобы это было максимально упрощено, но это не работает хорошо.
<?php
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_TIMEOUT,10);
$output = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $httpcode;
?>
у меня это обернуто в функцию. Он отлично работает, но производительность не самая лучшая, потому что он загружает всю страницу, вещь, если я удалю $output = curl_exec($ch);
возвращает 0
все время.
кто-нибудь знает, как сделать лучше производительность?
7 ответов:
сначала убедитесь, что URL-адрес действительно действителен (строка, а не пустой, хороший синтаксис), это быстро проверить на стороне сервера. Например, выполнение этого первого может сэкономить много времени:
if(!$url || !is_string($url) || ! preg_match('/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(\/.*)?$/i', $url)){ return false; }
убедитесь, что вы извлекаете только заголовки, а не содержимое тела:
@curl_setopt($ch, CURLOPT_HEADER , true); // we want headers @curl_setopt($ch, CURLOPT_NOBODY , true); // we don't need body
для получения более подробной информации о получении статуса URL http-кода я ссылаюсь на другой пост, который я сделал (это также помогает со следующими перенаправлениями):
в целом:
$url = 'http://www.example.com'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, true); // we want headers curl_setopt($ch, CURLOPT_NOBODY, true); // we don't need body curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT,10); $output = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo 'HTTP code: ' . $httpcode;
// must set $url first.... $http = curl_init($url); // do your curl thing here $result = curl_exec($http); $http_status = curl_getinfo($http, CURLINFO_HTTP_CODE); curl_close($http); echo $http_status;
попробуйте PHP "функция get_headers функции".
что-то вроде:
<?php $url = 'http://www.example.com'; print_r(get_headers($url)); print_r(get_headers($url, 1)); ?>
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_TIMEOUT, 20); $rt = curl_exec($ch); $info = curl_getinfo($ch); echo $info["http_code"];
curl_getinfo
- получить информацию о конкретной передачеРегистрация из функции curl_getinfo
<?php // Create a curl handle $ch = curl_init('http://www.yahoo.com/'); // Execute curl_exec($ch); // Check if any error occurred if(!curl_errno($ch)) { $info = curl_getinfo($ch); echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url']; } // Close handle curl_close($ch);
вот мое решение нужно получить статус Http для проверки состояния сервера регулярно
$url = 'http://www.example.com'; // Your server link while(true) { $strHeader = get_headers($url)[0]; $statusCode = substr($strHeader, 9, 3 ); if($statusCode != 200 ) { echo 'Server down.'; // Send email } else { echo 'oK'; } sleep(30); }