it-swarm.com.de

HTTP-Code in PHP using curl

Ich verwende CURL, um den Status einer Site abzurufen, wenn diese auf/ab ist oder auf eine andere Site umgeleitet wird. Ich möchte es so schlank wie möglich machen, aber es funktioniert nicht gut.

<?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;
?>

Ich habe dies in eine Funktion eingewickelt. Es funktioniert einwandfrei, aber die Leistung ist nicht die beste, da es die gesamte Seite herunterlädt. Wenn ich $output = curl_exec($ch); entferne, wird die ganze Zeit 0 Zurückgegeben.

Weiß jemand, wie man die Leistung verbessert?

151
Aaran McGuire

Stellen Sie zunächst sicher, dass die URL tatsächlich gültig ist (eine Zeichenfolge, nicht leer, gute Syntax). Dies lässt sich schnell auf der Serverseite überprüfen. Wenn Sie dies zum Beispiel zuerst tun, können Sie viel Zeit sparen:

if(!$url || !is_string($url) || ! preg_match('/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(\/.*)?$/i', $url)){
    return false;
}

Stellen Sie sicher, dass Sie nur die Header abrufen, nicht den Textinhalt:

@curl_setopt($ch, CURLOPT_HEADER  , true);  // we want headers
@curl_setopt($ch, CURLOPT_NOBODY  , true);  // we don't need body

Weitere Informationen zum Abrufen des http-Codes für den URL-Status finden Sie in einem anderen von mir verfassten Beitrag (er hilft auch bei den folgenden Weiterleitungen):


Als Ganzes:

$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;
219
MoonLite
// 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;
112
Deepika Patel
$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"];
21
ntson1009

Probieren Sie die PHP-Funktion " get_headers " aus.

Etwas in der Art von:

<?php
    $url = 'http://www.example.com';
    print_r(get_headers($url));
    print_r(get_headers($url, 1));
?>
15
Raphael Caixeta

curl_getinfo - Informationen zu einer bestimmten Übertragung abrufen

Aktivieren Sie 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);
4
Lead Developer

curl_exec ist notwendig. Versuchen CURLOPT_NOBODY, um den Body nicht herunterzuladen. Das könnte schneller sein.

2
Explosion Pills