Tom's Hardware > Forum > Programmation > PHP & MySQL & ASP > [PHP] Test de la présence d'un fichier distant avec is_file

[PHP] Test de la présence d'un fichier distant avec is_file

Forum Programmation : PHP & MySQL & ASP - [PHP] Test de la présence d'un fichier distant avec is_file

Tomshardware : 1,4 millions d'inscrits dans 6 pays différents répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Salut à tous,

Voilà, je m'occupe du site de mon asso de gamers (Media-Lan), et nous parrainons une ligue (Chaos Lan).
Je voulais afficher sur le site de Media-Lan, des infos du site chaos-lan, ce qui marche plutot bien avec le script suivant que j'ai fait (c'est pas les vrais adresse et nom de fichier):

Code :
  1. <?
  2. $path="http://www.toto.com/chaoslan/";
  3. $file="stat.php";
  4. $chaos=fopen($path.$file,"r" );
  5. $info_chaos=fgets($chaos, 4096);
  6. fclose($chaos);
  7. if (strlen($info_chaos)>0)
  8.     {
  9.       $info_chaos=explode('<br>', $info_chaos);
  10.       $equipe=$info_chaos[0];
  11.       $coach=$info_chaos[1];
  12.       $match=$info_chaos[2];
  13.       echo "<img src='Images/chaoslanpiti.gif'>";
  14.       echo $equipe."gérées par ".$coach."avec déjà ".$match;
  15.     }
  16. ?>



Mais j'aimerais en plus rajouter un test avant le fopen pour vérifier que le fichier est là et ne pas me ramasser un gros message d'erreur dans le cas contraire.
J'ai donc tenté un is_file($path.$file) avant mon fopen, mais avec ça, il me répond FALSE (fichier inexistant) à chaque fois... alors que si je test pas, il trouve le fichier et tout se déroule bien.

Est-il possible avec un is_file de connaitre l'existence d'un fichier distant (ce que j'essai de faire), sinon avec qu'elle commande je peux le faire ???

Merci à ceux qui ont eu le courage de tout lire, merci d'avance à ceux qui vont répondre, et.... rien pour les autres ;)

EDIT:
le fichier stat.php se présente comme suis et n'est destiné qu'à la lecture par le site media-lan:

Code :
  1. // connexion à  la base et récup des infos
  2. echo $equipe." équipes<br>";
  3. echo $coach." coach<br>";
  4. echo $match." match joués";


Message édité par Xav_ le 13-09-2004 à 09:12:27
------------------------------ - Xav - // :jap: ZEN du matin au soir, et du soir au matin... :jap: // Vice-Président Media-Lan --- Forum
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

au fait non, is_file ne peut pas tester l'existance d'un fichier distant.
par contre dans les commentaires de cette fonction sur php.net (ou de file_exist je sais plus), quelqu'un a proposer sa prope fonction : remote_file_exist.

------------------------------ Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Répondre à KangOl

je vais jetter un oeil la-dessus et je vous tiens au courant...

Merci de ta réponse KangOl :D

------------------------------ - Xav - // :jap: ZEN du matin au soir, et du soir au matin... :jap: // Vice-Président Media-Lan --- Forum
Répondre à Xav_

:jap:

------------------------------ Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Répondre à KangOl

nickel, j'ai effectivement trouvé un script d'une fonction "maison": remote_file_exist
Elle est bien dans le manuel PHP, en exemple de la fonction file_exist, et elle marche nickel.

C'est basé sur un fsockopen sur l'URL du fichier en question, ça te permet de savoir si une URL existe, et ça gère les différents cas d'erreur.

--> pb résolu, merci KangOl

------------------------------ - Xav - // :jap: ZEN du matin au soir, et du soir au matin... :jap: // Vice-Président Media-Lan --- Forum
Répondre à Xav_

le problème, c'est quelle prend pas mal de temps a s'exécuter, ce qui n'est pas top si on doit l'utiliser souvent...

------------------------------ Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Répondre à KangOl

dans mon cas les infos sont affichées dans un cadre du menu et n'ont pas besoin d'etre rafraichi très souvent --> j'ai déclaré une variable de session pour n'effectuer la récup d'info qu'une fois par session
après je réaffiche mes valeurs tout le temps sans retourner lire.

------------------------------ - Xav - // :jap: ZEN du matin au soir, et du soir au matin... :jap: // Vice-Président Media-Lan --- Forum
Répondre à Xav_

Un gars m'a demandé sur ICQ ou il pourrait trouver cette fonction.
Apparement elle ne se trouve plus dans les commentaire de php. Cependant, on la trouve toujours sur d'autre sites avec google. puisque le net est assez volatile, je reposte le code ici

Code :
  1. <?php
  2. function remote_file_exists ($url)
  3. {
  4. /*
  5.   Return error codes:
  6.   1 = Invalid URL host
  7.   2 = Unable to connect to remote host
  8. */ 
  9.   $head = "";
  10.   $url_p = parse_url ($url);
  11.  
  12.   if (isset ($url_p["host"]))
  13.   { $host = $url_p["host"]; }
  14.   else
  15.   { return 1; }
  16.  
  17.   if (isset ($url_p["path"]))
  18.   { $path = $url_p["path"]; }
  19.   else
  20.   { $path = ""; }
  21.  
  22.   $fp = fsockopen ($host, 80, $errno, $errstr, 20);
  23.   if (!$fp)
  24.   { return 2; }
  25.   else
  26.   {
  27.       $parse = parse_url($url);
  28.       $host = $parse['host'];
  29.      
  30.       fputs($fp, "HEAD ".$url." HTTP/1.1\r\n" );
  31.       fputs($fp, "HOST: ".$host."\r\n" );
  32.       fputs($fp, "Connection: close\r\n\r\n" );
  33.       $headers = "";
  34.       while (!feof ($fp))
  35.       { $headers .= fgets ($fp, 128); }
  36.   }
  37.   fclose ($fp);
  38.   $arr_headers = explode("\n", $headers);
  39.   $return = false;
  40.   if (isset ($arr_headers[0]))
  41.   { $return = strpos ($arr_headers[0], "404" ) === false; }
  42.   return $return;
  43. }
  44. /* utilisation */
  45. $url = "http://www.google.it/intl/it_it/images/logo.gif";
  46. if (remote_file_exists ($url))
  47. { print ($url . " file exists!" ); }
  48. else
  49. { print ($url . " file doesn't exist!" ); }
  50. ?>

source : http://www.wmcity.nl/scripts.php?a [...] ijk&id=626

cependant, au cours de mes recherches sur google, je suis tomber sur une autre fonction. Je ne l'ai pas tester mais elle devrait logiquement fonctionner. attention certains hebergeur desactivent la fonction ini_set ce qui empechera cette fonction de fonctionner...

Code :
  1. // remote_file_exists-function
  2. // ---------------------------
  3. function remote_file_exists ($url)
  4. {
  5.     ini_set('allow_url_fopen', '1');
  6.     if (@fclose(@fopen($url, 'r'))) {
  7.         return true;
  8.     } else {
  9.         return false;
  10.     }
  11. }

source : http://www.urkburk.com/galleri.phps

------------------------------ Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Répondre à KangOl

je suis le mec sur icq ;) merci pour la reponse KangOl :D

En fait apres avoir essayé la fonction j'ai l'impression qu'elle ne fonctionne pas pour ce que j'aimerais faire ...

Je m'explique, en fait j'aimerais tester la validité d'un lien style : mms://vipmms.canalplus.fr/canalplus/guignols_050321_a.wmv
ce dernier est valide, mais le lien mms://vipmms.canalplus.fr/canalplus/guignols_a.wmv ne l'est pas par ex, hors dans les 2 cas, il a l'air de trouver un fichier, mais dans le cas du 2eme, le fichier (inexistant) n'est pas exploitable (normal ...).
Tout ceci est un peu confu, j'espere que qqn comprendra mon pb ;)
J'aimerais donc savoir s'il existe un moyen de verifier que tel ou tel lien est valide ou non ?

Merci d'avance.

P.S. : mon server est sous php 4.1.2 (Debian GNU/Linux stable)

Message cité 2 fois
Message édité par gabyweb le 23-03-2005 à 00:57:15
Répondre à gabyweb

zakarianet a écrit :

je suis le mec sur icq ;) merci pour la reponse KangOl :D

En fait apres avoir essayé la fonction j'ai l'impression qu'elle ne fonctionne pas pour ce que j'aimerais faire ...

Je m'explique, en fait j'aimerais tester la validité d'un lien style : mms://vipmms.canalplus.fr/canalplus/guignols_050321_a.wmv
ce dernier est valide, mais le lien mms://vipmms.canalplus.fr/canalplus/guignols_a.wmv ne l'est pas par ex, hors dans les 2 cas, il a l'air de trouver un fichier, mais dans le cas du 2eme, le fichier (inexistant) n'est pas exploitable (normal ...).
Tout ceci est un peu confu, j'espere que qqn comprendra mon pb ;)
J'aimerais donc savoir s'il existe un moyen de verifier que tel ou tel lien est valide ou non ?

Merci d'avance.

P.S. : mon server est sous php 4.1.2 (Debian GNU/Linux stable)



Lol c'est drole, je cherche exactement la même chose.

En fait, il faudrait changer le user-agent pour que le serveur mms puisse nous faire telecharger le fichier. Mais alors, aucune idée pour realiser ca :??:

Répondre à lol51

alexia6 a écrit :

Lol c'est drole, je cherche exactement la même chose.

En fait, il faudrait changer le user-agent pour que le serveur mms puisse nous faire telecharger le fichier. Mais alors, aucune idée pour realiser ca :??:



EDIT : Ca y est, j'ai trouvé :D

ini_set ('user_agent', 'NSPlayer/9.0.0.2980');

Et ca marche !

Répondre à lol51

On peut savoir comment tu a fait pour vérifier si le fichier mms/wmv existe sur le serveur distant ?
Moi la fonction me retourne 0 ?

------------------------------ Nous ne pouvons pas prédire où nous conduira la Révolution Informatique. Tout ce que nous savons avec certitude, c'est que, quand on y sera enfin, on n'aura pas assez de RAM.
Répondre à Phoenix2006

Edit: en fait c'est bon :)
Ca marche du tonnerre merci beaucoup :)


Message édité par kanaziwok le 30-05-2006 à 13:32:22
Répondre à kanaziwok

Qu'est ce que renvoie le serveur distant si le fichier n'existe pas ?

Répondre à boub popsyteam

non c'est bon j'avais fait une merde avec mon aray :s
j'avais oublié une variable donc il testé le domaine et pas le fichier lool ... quel boulz je suis lol

Répondre à kanaziwok

mais le plus simple ne serait pas de tester la valeur de sortie de fopen ?

Répondre à batchy

zakarianet a écrit :

je suis le mec sur icq ;) merci pour la reponse KangOl :D

En fait apres avoir essayé la fonction j'ai l'impression qu'elle ne fonctionne pas pour ce que j'aimerais faire ...

Je m'explique, en fait j'aimerais tester la validité d'un lien style : mms://vipmms.canalplus.fr/canalplus/guignols_050321_a.wmv
ce dernier est valide, mais le lien mms://vipmms.canalplus.fr/canalplus/guignols_a.wmv ne l'est pas par ex, hors dans les 2 cas, il a l'air de trouver un fichier, mais dans le cas du 2eme, le fichier (inexistant) n'est pas exploitable (normal ...).
Tout ceci est un peu confu, j'espere que qqn comprendra mon pb ;)
J'aimerais donc savoir s'il existe un moyen de verifier que tel ou tel lien est valide ou non ?

Merci d'avance.

P.S. : mon server est sous php 4.1.2 (Debian GNU/Linux stable)



alexia6 a écrit :

Lol c'est drole, je cherche exactement la même chose.

En fait, il faudrait changer le user-agent pour que le serveur mms puisse nous faire telecharger le fichier. Mais alors, aucune idée pour realiser ca :??:



Idem c'est exactement ce que je cherche à faire... bizarre, vous travaillez sur quoi ? pour faire quoi ? En ce qui me concerne c'est pour mettre à jour mon module Netvibes : http://eco.netvibes.com/modules/1192/mediavibes

J'ai testé les 2 fonctions, je préfère la deuxieme qui est plus light dans le code et bien plus rapide à executer mais les 2 ne me donnent pas le bon résultat ! même en changeant le user-agent... où faut t il le mettre dans la fonction ?

Répondre à SamBeckett

daghadi a écrit :

Idem c'est exactement ce que je cherche à faire... bizarre, vous travaillez sur quoi ? pour faire quoi ? En ce qui me concerne c'est pour mettre à jour mon module Netvibes : http://eco.netvibes.com/modules/1192/mediavibes

J'ai testé les 2 fonctions, je préfère la deuxieme qui est plus light dans le code et bien plus rapide à executer mais les 2 ne me donnent pas le bon résultat ! même en changeant le user-agent... où faut t il le mettre dans la fonction ?



Salut,
en se qui me concerne j'avais fait un script pour générer des liens directs vers les videos des guignols :

Code :
  1. <?php
  2. ini_set ('user_agent', 'NSPlayer/9.0.0.2980');
  3. function remote_file_exists ($url)
  4. {
  5.     ini_set('allow_url_fopen', '1');
  6.     if (@fclose(@fopen($url, 'r'))) {
  7.         return true;
  8.     } else {
  9.         return false;
  10.     }
  11. }
  12. $urlbase = "http://";
  13. $jour = date("d" );
  14. $mois = date("m" );
  15. $an = date("y" );
  16. for($boucle=0 ; $boucle!=15 ; $boucle++)
  17.     {
  18.     if(strlen($jour)<2)
  19.     {
  20.       $jour=substr("0".$jour,-2);
  21.     }
  22.     else {}
  23.     $uRl='http://vipmms.canalplus.fr/canalplus/guignols_'.$an.$mois.$jour.'_a.wmv';
  24. if (remote_file_exists($uRl)=='true')
  25. {
  26.     echo $jour.' ';
  27.     echo '<a href="'.$uRl.'">    lien disponible<br /></a>';
  28. }
  29. else{
  30.     echo $jour.' ';
  31.     echo '<a href="'.$uRl.'">    lien mort</a><br />';
  32. }
  33.     if($jour>=2)
  34.         {
  35.         $jour = $jour-1;
  36.         }
  37.     else{
  38.         $mois=$mois-1;
  39.         $mois=substr("0".$mois,-2);
  40.         $jour=31;
  41.         }
  42.     }
  43. ?>


Voilà.. si ça peut servir à quelqu'un plus tard, en l'adaptant un peu !


Message édité par lol51 le 11-07-2006 à 15:13:51
Répondre à lol51

bonjour,

j'utilise la fonction :

ini_set('allow_url_fopen', '1');
if (@fclose(@fopen($url, 'r'))) {
return true;
} else {
return false;
}


et j'ai un truc bisarre, je télécharge un 1er fichier : test_3_m.jpg
pas de soucis, le fichier n'existe pas encore donc le téléchargement se fait

je vais pour télécharger un autre fichier : test_5_m.jpg

et là la fonction me dit que le fichier existe deja, comme si il ne faisait pas la différence entre le 3 et le 5 !!!!

si je fait la meme chose mais en renomant le fichier : test_5_m.jpg en test_55_m.jpg = ca marche !!!!

avez vous déjà eu ca ? comment le corriger ?
test_5_m.jpg

Répondre à antoineklein

Puisque tu es dans ce topic, pourquoi tu n'utilises pas la fonction is_file, prévue à cet effet, plutôt que ton truc bizarre ?

Répondre à marsien

Bonjour,
Juste pour une info utile, la fonction remote_file_exists semble plus rapide avec un file_get_contents qu'avec un fopen ...

 
Code :
  1. function remote_file_exists ($url)
  2. {
  3.         if([b]file_get_contents[/b]($url)){
  4.           return true;
  5.       } else {
  6.           return false;
  7.       }
  8. }
 

N'essayez pas la fonction is_file, elle ne fonctionne pas pour des fichiers distants (cf début du post).


Message édité par zeb le 08-10-2009 à 10:22:34
Répondre à _fizz

3 ans de retard, et en plus tu ne respectes pas les règles de publication ! :pfff:

------------------------------ Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Répondre à zeb
Tom's Hardware > Forum > Programmation > PHP & MySQL & ASP > [PHP] Test de la présence d'un fichier distant avec is_file
Aller à :

Il y a 441 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Annonces Google
  • Besoin d'aide ? Publiez votre question
  • Publier
Publicité
Solution la plus récente
Trier une liste linéaire chainée par insertion
Par Storos il y a 4 jours :

En gros, tu veux qu'on fasse tes devoirs? :o En plus, il s'agit d'un problème pour débutant tout ce qu'il y a de plus classique... Si tu es trop flemmard pour chercher par toi-même, une simple recherche sur Google te donnera l'algorithme (je le sais, je viens d'essayer...). Recherche le code, teste-le, et reviens ici si tu as encore des problèmes... :o

Les offres du moment
Ils ont gagné un badge
Vous pouvez les féliciter
Top experts