|
PHPFrance est maintenu par des bénévoles et soutenu par les sociétés Actoo et
Anaska, Conseil et Formation pour PHP
Pour optimiser vos chances commencez par consulter la FAQ et faites une recherche.
Bon esprit, politesse et entraide sont les règles de ce forum.
|
| Voir le sujet précédent :: Voir le sujet suivant |
| Auteur |
Message |
jmh Invité
|
Posté le: 18 Nov 2005, 13:33 Sujet du message: Tester qu'un site distant est |
|
|
Bonjour,
Sur un site, j'affiche une partie du flux rss en provenance d'un autre, distant.
Quand le serveur distant ne répond pas, cela occasionne une erreur.
Comment tester qu'un serveur soit le flux rss est disponible ?
Je travaille en php5
Merci. |
|
|
 |
Ripat Mammouth
Inscrit le: 08 Fév 2005 Messages: 1278 Localisation: Belgique |
Posté le: 18 Nov 2005, 18:39 Sujet du message: |
|
|
A chaud:
Pour vérifier si un domaine répond --> fsockopen
Pour vérifier si une page est "servie" c'est à dire si elle existe ET si elle renvoie un HTTP/1.1 200 OK ---> fopen.
Le problème de fopen, c'est qu'il n'y a pas de timeout, voir discussion:
http://bugs.php.net/bug.php?id=5153&edit=1
Donc si le serveur web est planté ou ne sert pas la page complètement, ou encore, si les temps de réponses sont trop longs l'appel à fopen() fera planter ton script tant qu'il n'a pas reçu le 200 OK du serveur.
Question intéressante.
Faudra travailler avec les socket et les flux. J'y réfléchi et je poste si je trouve. _________________ ripat
Jabber: ripat at im.apinc.org   |
|
|
 |
jmh Invité
|
Posté le: 18 Nov 2005, 19:01 Sujet du message: |
|
|
Merci.
je teste déjà "fsockopen". |
|
|
 |
jmh Invité
|
Posté le: 18 Nov 2005, 20:14 Sujet du message: |
|
|
"fsockopen" fonctionne.
Super génial. Merci !!! |
|
|
 |
Ripat Mammouth
Inscrit le: 08 Fév 2005 Messages: 1278 Localisation: Belgique |
Posté le: 18 Nov 2005, 20:35 Sujet du message: |
|
|
fsockopen ne fera que tester si un domaine répond sur un port donné (80 pour web).
fopen pourra te dire si une page existe sur un domaine.
Si cette page existe mais est très lente à "charger" (c.à.d lente à renvoyer un 200 OK), ton script va être mis en suspens le temps que mettra la page à charger. Si tu te sers d'une page pour pomper des info d'un fil RSS, ta page va se bloquer.
J'ai trouvé une solution pour tester le temps de réponse d'une page, avec un timeout si jamais elle de répond pas tout de suite.
En gros, il faut créer un flux avec fsockopen et lui mettre un timeout sur l'appel de la page avec la fonction stream_set_timeout();
Ma petite fonction retourne le statut de la page, et son temps de réponse, si réponse il y a dans le délai du timeout.
| PHP: | /*
Fonction pour tester le temps de réponse d'une page.
Arguments
domaine (exemple: 'www.phpfrance.com')
chemin/page (exemple: '/tutoriaux/index.php')
timeout (en secondes exemple: 5) Optionnel, défaut 10 secondes.
*/
function monTestPage($site, $page, $timeout = 10){
list($usec, $sec) = explode(" ", microtime());
$t0 = ((float)$usec + (float)$sec);
$fp = fsockopen($site, 80, $errno, $errstr, $timeout);
if (!$fp) {
$return['msg'] = 'Impossible de se connecter au domaine '.$site.'<br />';
} else {
$return['serveur'] = 'Connexion serveur OK';
$header = "GET $page HTTP/1.1\r\n";
$header .= "Host: $site\r\n";
$header .= "Connection: Close\r\n\r\n";
fputs($fp, $header);
stream_set_timeout($fp, $timeout);
$reponse = fgets($fp, 128);
list($usec, $sec) = explode(" ", microtime());
$t1 = ((float)$usec + (float)$sec);
$info = stream_get_meta_data($fp);
if ($info['timed_out']) {
$return['msg'] = "Le délai de réponse de la page ".$site.$page.
' a dépassé le timout de '.$timeout.' sec.';
}else{
$return['reponsePage'] = $reponse;
$return['tempsReponse'] = $t1 - $t0;
}
fclose($fp);
}
return $return;
}
$resultat = monTestPage ('www.phpfrance.com', '/index.php', 7);
echo '<pre>';
print_r($resultat);
echo '</pre>';
|
Ceci devrait renvoyer quelque-chose comme:
| Code: | Array
(
[serveur] => Connexion serveur OK
[reponsePage] => HTTP/1.1 200 OK
[tempsReponse] => 0.0631740093231
) |
Voilà, tu peux maintenant tester la réponse d'une page sans bloquer ton script. _________________ ripat
Jabber: ripat at im.apinc.org   |
|
|
 |
jmh Invité
|
Posté le: 18 Nov 2005, 21:15 Sujet du message: |
|
|
| Je n'ai pas compris grand chose (je suis un peu débutant). Mais je vais étudier et tester la solution. Merci. |
|
|
 |
|
|
Vous pouvez poster de nouveaux sujets dans ce forum Vous pouvez répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|
Powered by phpBB © phpBB Group - PHPFrance est hébergé par Sivit
|