PHPFrance

Discuter de tout ce qui touche au PHP, en français.

Vers le contenu

» Masquer les résultats de la recherche

Recherche dynamique PHPfrance

  1. Effectuez une recherche, les résultats s'afficheront dynamiquement ici.

Tester qu'un site distant est

Pour ceux qui débutent en PHP.

Tester qu'un site distant est

Messagede jmh le 18 Nov 2005, 14:33

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.
jmh
 

Publicité

Messagede Ripat le 18 Nov 2005, 19:39

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 ImageImage
Ripat
ViPHP
ViPHP
 
Messages: 1282
Inscription: 08 Fév 2005, 10:17
Localisation: Belgique

Messagede jmh le 18 Nov 2005, 20:01

Merci.

je teste déjà "fsockopen".
jmh
 

Messagede jmh le 18 Nov 2005, 21:14

"fsockopen" fonctionne.

Super génial. Merci !!!
jmh
 

Messagede Ripat le 18 Nov 2005, 21:35

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.

Syntaxe: [ Télécharger ] [ Masquer ]
Code 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:

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 ImageImage
Ripat
ViPHP
ViPHP
 
Messages: 1282
Inscription: 08 Fév 2005, 10:17
Localisation: Belgique

Messagede jmh le 18 Nov 2005, 22:15

Je n'ai pas compris grand chose (je suis un peu débutant). Mais je vais étudier et tester la solution. Merci.
jmh
 


Retourner vers PHP débutant

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 8 invités

  • Publicité