214

サイトがアップ/ダウンしている場合、または別のサイトにリダイレクトしている場合、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

パフォーマンスを向上させる方法を知っている人はいますか?

4

8 に答える 8

320

最初に、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;
于 2012-09-27T20:07:42.323 に答える
157
// 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;
于 2015-02-10T09:14:44.897 に答える
18

PHP の " get_headers " 関数を試してください。

次のようなもの:

<?php
    $url = 'http://www.example.com';
    print_r(get_headers($url));
    print_r(get_headers($url, 1));
?>
于 2012-08-03T14:30:38.180 に答える
2

curl_exec必要です。CURLOPT_NOBODY本文をダウンロードしないようにしてください。その方が早いかもしれません。

于 2012-08-03T14:30:41.283 に答える
-4

サーバーのステータスを定期的にチェックするためにStatus 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);
}
于 2016-08-13T08:14:50.930 に答える