Lire une page distante avec fopen

Lire une page distante avec fopen - PHP - Programmation

Marsh Posté le 08-01-2006 à 11:05:42    

Bonjour,
 
Je souhaite installer dans mon admin un script qui me permet de vérifier un lien retour sur une page distante. J'ai donc bricolé ceci :

Code :
  1. <?
  2. $page = "http://www.urldistante.com/";
  3. $handle = fopen($page, "r" );
  4. echo $contenu = fread ($handle, filesize ($page));
  5. if(ereg("textedulien",$contenu)){
  6. echo 'lien retour présent';
  7. }else{
  8. echo 'lien retour absent';
  9. }
  10. fclose ($handle);
  11. ?>


 
Ca ne marche pas très fort, connaissez vous des méthodes plus adaptées/performantes?
 
Merci.

Reply

Marsh Posté le 08-01-2006 à 11:05:42   

Reply

Marsh Posté le 08-01-2006 à 11:34:01    

Ton serveur peut etre configure pour ne pas autoriser l'ouverture de fichier distant par fopen (et ses derivés). Vérifie le parametre "allow_url_fopen" dans le tableau retourné par phpinfo(); pour savoir si tu es concerné par cette restriction. D'une maniere générale tu dois de toute facon verifier le resultat de fopen pour t'assurer le succès de l'operation avant de continuer.
 
file size($page) ne fonctionnera pas avec un fichier distant sauf avec les toutes dernières versions de PHP5. Vérifie la valeur retournée : echo est ton ami.
 
ereg n'est pas adaptée pour ton cas ! preg_match et preg_match_all est bien plus puissante et plus rapide d'execution que ereg MAIS dans ton cas il vaut encore mieux se passer des expressions regulieres et utiliser les fonctions de recherche classique dans une chaine de caractères.


Message édité par afbilou le 08-01-2006 à 11:40:53
Reply

Marsh Posté le 08-01-2006 à 12:01:59    

Salut,
 
Merci pour ces détails. Concernant la configuration serveur, pas de soucis : allow_url_fopen On On
L'accès est autorisé.  
 
La fonction filesize a en effet l'air de ne pas fonctionner :  
Warning: filesize(): Stat failed for -http://www.*********.com/index.html (errno=2 - No such file or directory) in /usr2/w*b/***er*e/***u/c****s/***.php on line 4
 
Quant à la fonction ereg, je suis bien d'accord avec toi, l'utilisation des expressions régulières n'est pas forcément adapté.
 
Que donnerait le code dans ce cas?

Reply

Marsh Posté le 08-01-2006 à 12:37:37    

$contenu = file_get_contents($page);
 
if (strpos($contenu , 'texte_du_lien')) {
     echo 'Youppi !!!';
}
else {
     echo 'A pas lien :(';
}

Reply

Marsh Posté le 08-01-2006 à 13:19:24    

C'"est parfois si simple :)
 
Merci abfilou pour ton aide :)

Reply

Marsh Posté le 08-01-2006 à 13:41:15    

N'oublie pas de verifier les retour de tes fonctions surtout quand tu travaille sur des ressources telles que les fichiers.
 
if ($fichier = fopen('...' , '...'))
{
     // traitements ...
 
     fclose($fichier);
}
else
{ // le fichier n'a pas pu etre ouvert
}
 
Pour te convaincre de ne plus utiliser les expressions regulieres POSIX (fonctiones ereg* de PHP) voici un bon site sur les expressions regulieres Perl : http://www.lumadis.be/regex/index.php
La version francaise du tuto : http://www.lumadis.be/regex/tuto_pcre.php
Un simulateur tres tres tres bien fait qui permet de faire des tests et de rapidement voir les resultats :) http://www.lumadis.be/regex/test_regex.php?lang=fr

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed