Bonjour,
J'essaye de coder un petit truc en PHP, tout simple.
J'essaye juste d'ouvrir une url externe (genre
www.google.fr), de verifier si un dossier existe sur le serveur.
Je fais donc la requete :
if (fopen($filename,'r') != FALSE) {
echo "Dossier admin OK";
}
else {
echo "Dossier admin non trouvé<br />";
echo "Requete : ".$filename;
}
La requete prend enormement de temps !!
Et cela ne donne rien de concluant :
(tout en sachant que bien sur pour le test, le repertoire /admin existe bien !)
J'ai testé aussi :
$fp = fsockopen($filename, 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: ".$filename."\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
Et cela me renvoi :
Warning: fsockopen(): php_network_getaddresses: gethostbyname failed in index.php on line 57
Warning: fsockopen(): unable to connect to
http://www.xxx.fr/admin:80 in index.php on line 57
Opération réussie. (0)
Et pour finir, le test suivant :
// vérification du protocole HTTP
if (!eregi("^http://", $url)) {
echo "Probleme d'url";
}
$details = parse_url($url);
// vérification du port 80 lié au protocole HTTP
if (!isset($details['port'])) {
$details['port'] = "80";
}
// vérification du chemin
if (!isset($details['path'])) {
$details['path'] = "/";
}
// vérification de l'adresse du serveur
if (!ereg("[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+", $details['host'])){
$details['host'] = gethostbyname($details['host']);
}
// ouverture d'une connexion vers le serveur
if ($sock = fsockopen( $details['host'], $details['port'], &$numero_erreur, &$texte_erreur)){
$requete = "GET ".$details['path']." HTTP/1.1\r\n";
$requete .= "Host: ".$details['host']."\r\n\r\n";
// envoie d'une requête HTTP GET
fputs($sock, $requete);
// réception de la réponse du serveur
$str = fgets($sock, 1024);
while(!ereg('^HTTP/1.1 ', $str)){
$str = fgets($sock, 1024);
}
// fermeture de la connexion
fclose($sock);
list($http, $str, $texte) = explode(" ", $str, 3);
echo $str."<br />".$reponse[$str];
}
echo "Probleme d'url"
Qui lui me renvoi, avant meme la recherche :
Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of fsockopen(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in index.php on line 37
>> J'ai reussi a passer outre cette erreur, en modifiant le PHP.ini, comme stipulé dans l'erreur.
Par contre, toujours impossible de me connecter :
Warning: fsockopen(): unable to connect to xx.xx.xx.xx:80 in index.php on line 37
Fatal error: Maximum execution time of 30 seconds exceeded in index.php on line 37
Et pourtant, le test vers le navigateur fonctionne tres bien, sur le port 80...
J'avoue etre un peu desemparé face à temps d'echec.
Peut etre connaissez vous une methode plus simple !