Obtenir du Code HTTP en PHP en utilisant curl
j'utilise CURL pour obtenir le statut d'un site, s'il est up/down ou redirecting vers un autre site. Je veux que ce soit aussi simple que possible, mais ça ne marche pas bien.
<?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;
?>
j'ai ceci enveloppé dans une fonction. Il fonctionne très bien, mais la performance n'est pas la meilleure parce qu'il télécharge l'ensemble de la page, chose si je supprime $output = curl_exec($ch);
il retourne 0
tout le temps.
est-ce que quelqu'un sait comment améliorer la performance?
7 réponses
assurez-vous D'abord que si L'URL est réellement valide (une chaîne, pas vide, bonne syntaxe), ceci est rapide pour vérifier côté serveur. Par exemple, faire cela d'abord pourrait sauver beaucoup de temps:
if(!$url || !is_string($url) || ! preg_match('/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(\/.*)?$/i', $url)){
return false;
}
assurez-vous que vous ne récupérez que les en-têtes, pas le contenu du corps:
@curl_setopt($ch, CURLOPT_HEADER , true); // we want headers
@curl_setopt($ch, CURLOPT_NOBODY , true); // we don't need body
pour plus de détails sur l'obtention du Code http de l'état de L'URL, je me réfère à un autre post que j'ai fait (il aide également avec les redirections suivantes):
dans l'ensemble:
$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;
Essayer de PHP " get_headers fonction".
quelque chose du genre:
<?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_exec
est nécessaire. Essayez CURLOPT_NOBODY
pour ne pas télécharger le corps. Qui pourrait être plus rapide.
curl_getinfo
- obtenir des informations concernant un transfert spécifique
Vérifier 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);
voici ma solution besoin obtenir L'état Http pour vérifier l'état du serveur régulièrement
$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);
}