Retourner sur PHPFrance


 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   Accéder aux archivesArchives  S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
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.

Tester qu'un site distant est

 
Poster un nouveau sujet   Répondre au sujet    PHPFrance Index du Forum -> PHP débutant
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
jmh
Invité




MessagePosté le: 18 Nov 2005, 13:33    Sujet du message: Tester qu'un site distant est Répondre en citant

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
Ce membre fait partie des ViPHP
MessagePosté le: 18 Nov 2005, 18:39    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
jmh
Invité




MessagePosté le: 18 Nov 2005, 19:01    Sujet du message: Répondre en citant

Merci.

je teste déjà "fsockopen".
jmh
Invité




MessagePosté le: 18 Nov 2005, 20:14    Sujet du message: Répondre en citant

"fsockopen" fonctionne.

Super génial. Merci !!!
Ripat
Mammouth


Inscrit le: 08 Fév 2005
Messages: 1278
Localisation: Belgique
Ce membre fait partie des ViPHP
MessagePosté le: 18 Nov 2005, 20:35    Sujet du message: Répondre en citant

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($site80$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($fp128);
    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
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
jmh
Invité




MessagePosté le: 18 Nov 2005, 21:15    Sujet du message: Répondre en citant

Je n'ai pas compris grand chose (je suis un peu débutant). Mais je vais étudier et tester la solution. Merci.
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    PHPFrance Index du Forum -> PHP débutant Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
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