NewbieContest

Programmation => Langages Web => Discussion démarrée par: Folcan le 03 Août 2006 à 11:24:43



Titre: [PHP] Accès à un site externe
Posté par: Folcan le 03 Août 2006 à 11:24:43
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 :

Code:
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 :
Citation
Warning: fopen(http://www.xxx.fr/admin): failed to open stream: Bad file descriptor in index.php on line 73
Dossier admin non trouvé
Requete : http://www.xxx.fr/admin
(tout en sachant que bien sur pour le test, le repertoire /admin existe bien !)

J'ai testé aussi :

Code:
$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 :
Citation
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 :

Code:
   // 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 :
Citation
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 :

Citation
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 !


Titre: [PHP] Accès à un site externe
Posté par: the lsd le 03 Août 2006 à 13:06:33
tu le fait a la mano !


Titre: [PHP] Accès à un site externe
Posté par: Crisis le 03 Août 2006 à 13:10:04
Citation de: the lsd
tu le fait a la mano !
xD. En effet... ^^


Titre: [PHP] Accès à un site externe
Posté par: pepekiss le 03 Août 2006 à 15:46:56
ou alors tu le fais comme moi et tu le code en perl. le scanner est très rapide (en fonction de la rapidité du server distant aussi ^^) et très efficace vu que j'ai un bon dico de directories a coté :)

Si vous etes sages je posterais p-e la source ;)


Titre: [PHP] Accès à un site externe
Posté par: Folcan le 03 Août 2006 à 15:36:02
C'est donc toi qui scanne en permanance mon serveur !!!!!! :evil: ;)


Titre: [PHP] Accès à un site externe
Posté par: pepekiss le 03 Août 2006 à 17:28:44
lol non Folcan, je dois pas etre le seul a avoir codé un scanner ^^

j'ai même pas testé des pages a la main :)


Titre: [PHP] Accès à un site externe
Posté par: the lsd le 11 Août 2006 à 13:39:11
Tiens c'est rigolo j'ai le meme probleme aujourd'hui =D

PHP P0w4444

Enjoy

The lsd


Titre: [PHP] Accès à un site externe
Posté par: Perfect Slayer le 12 Août 2006 à 18:07:58
Lol ca c'est finit comment ? T'as réussi à le finir ou pas ?


Titre: [PHP] Accès à un site externe
Posté par: the lsd le 12 Août 2006 à 21:08:19
pepkiss m'a aidé pour du vrai, j'ai le debut du script. Pour l'instant, rien de recursif, le script foire mais j'ai deja un bon debut donc des que j'ai le temps je regarde ca de plus pres =D J'ai au moins reussi a comprendre le principe du script =D

Enjoy

The lsd


Titre: [PHP] Accès à un site externe
Posté par: Perfect Slayer le 13 Août 2006 à 07:57:08
Au pire si tu veux de l'aide.. tu passes en PV sur IRC ou MSN. :wink:


Titre: [PHP] Accès à un site externe
Posté par: the lsd le 13 Août 2006 à 09:24:03
Pour l'instant c'est bon, je vais essayer de voir ca tout seul. Si vraiment j'y arrive pas je verrais bien =D

Enjoy

The lsd