FORUM Tom's Hardware » 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

Il y a 255 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : [PHP] Test de la présence d'un fichier distant avec is_file
 
Webmaster Media-Lan
Plus d'informations

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

Profil : Pointeur
Plus d'informations

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
Webmaster Media-Lan
Plus d'informations

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
Profil : Pointeur
Plus d'informations

:jap:


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Webmaster Media-Lan
Plus d'informations

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
Profil : Pointeur
Plus d'informations

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
Webmaster Media-Lan
Plus d'informations

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
Profil : Pointeur
Plus d'informations

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
Plus d'informations

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
Plus d'informations

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  :??:  

Plus d'informations

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 !

Plus d'informations

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.
Plus d'informations

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


Message édité par kanaziwok le 30-05-2006 à 13:32:22
G.M.G.V.S.O.
Profil : Modo matériel
Plus d'informations

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

Plus d'informations

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

pourquoi faire cent fois la même chose ?
Plus d'informations

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

Plus d'informations

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)


 

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 ?
 

Plus d'informations

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.    &nb