Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2069 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Tester l'existance d'un fichier sur un montage

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tester l'existance d'un fichier sur un montage

n°2009502
rufo
Pas me confondre avec Lycos!
Posté le 16-07-2010 à 14:20:36  profilanswer
 

Bonjour,
Dans le cadre de mon appli web Astres(cf signature), j'ai besoin de tester l'existence de fichiers situés sur un montage samba ou d'url. J'ai trouvé une méthode qui marche pour les 2 :

Code :
  1. function remote_file_exists($url)
  2. {
  3.     $head = "";
  4.     $url_p = parse_url ($url);
  5.  
  6.     if (isset ($url_p["host"]))
  7.     {
  8.         $host = $url_p["host"];
  9.     }
  10.     else
  11.     {
  12.         return 1;
  13.     }
  14.  
  15.     if (isset ($url_p["path"]))
  16.     {
  17.         $path = $url_p["path"];
  18.     }
  19.     else
  20.     {
  21.         $path = "";
  22.     }
  23.  
  24.     $fp = @fsockopen ($host, 80, $errno, $errstr, 20);
  25.     if (!$fp)
  26.     {
  27.         return 2;
  28.     }
  29.     else
  30.     {
  31.         $parse = parse_url($url);
  32.         $host = $parse['host'];
  33.  
  34.         fputs($fp, "HEAD ".$url." HTTP/1.1\r\n" );
  35.         fputs($fp, "HOST: ".$host."\r\n" );
  36.         fputs($fp, "Connection: close\r\n\r\n" );
  37.         $headers = "";
  38.         while (!feof ($fp))
  39.         {
  40.             $headers .= fgets ($fp, 128);
  41.         }
  42.     }
  43.  
  44.     fclose ($fp);
  45.     $arr_headers = explode("\n", $headers);
  46.     $return = false;
  47.     if (isset ($arr_headers[0]))
  48.     {
  49.         $return = strpos ($arr_headers[0], "404" ) === false;
  50.     }
  51.  
  52.     return $return;
  53. }


 
Ca marche bien sauf que des fois, la fonction bloque pendant 3 plombes et j'ai beau jouer sur le paramètre de timeout (ici, il est à 20s, j'ai testé avec 1s voire 0.1s), ça ne change rien  :heink:  
 
Du coup, est-ce que vous connaitriez une autre façon de procéder?
 
Merci :)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
mood
Publicité
Posté le 16-07-2010 à 14:20:36  profilanswer
 

n°2009510
stealth35
Posté le 16-07-2010 à 14:37:07  profilanswer
 

pourquoi t'utilises pas get_headers ?

n°2009535
rufo
Pas me confondre avec Lycos!
Posté le 16-07-2010 à 15:39:12  profilanswer
 

On va dire parce que je suis un âne  :whistle:  
 
Mais bon, ça va pas résoudre mon pb. C'est pas ma fonction qui merde, je me suis rendu compte en poussant les tests que ce certaines urls que je donne à ma fonction qui merdent. Quand je les mets dans Firefox, il mouline 30 secondes et puis rien : pas de msg d'erreur, rien :/
 
Une url, elle amrche ou pas, mais elle est pas censée mettre 30s pour se décider  :pt1cable:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2009537
stealth35
Posté le 16-07-2010 à 15:45:54  profilanswer
 

si justement, le serveur peu être long a répondre donc le client attend jusqu'à ce qu'il excède le temps max,
tu peu réduire le temps (2sec par exemple) mais bon tu saura pas vraiement si il a été long a répondre ou si il n'existe pas


Message édité par stealth35 le 16-07-2010 à 15:47:29
n°2009541
rufo
Pas me confondre avec Lycos!
Posté le 16-07-2010 à 15:58:47  profilanswer
 

Comment je peux réduire le temps? Parce qu'avec fsockopen(), le paramètre timeout n'a aucun effet :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2009549
stealth35
Posté le 16-07-2010 à 16:08:48  profilanswer
 

essaye de changer ton default_socket_timeout

n°2009590
rufo
Pas me confondre avec Lycos!
Posté le 16-07-2010 à 17:02:10  profilanswer
 

j'ai essayé avec get_headers(), mais j'arrive pas à systématiquement à discriminer des url ok et des NOK. Des fois, j'ai un code 200 OK pour des urls qui moulinent pendant 30s et où je n'arrive pas à avoir accès au contenu :/
 
Et après d'autres tests, ma fonction ne mouline plus sur des urls où elle devrait alors que j'ai touché à rien :??: Je comprends plus rien  :pt1cable:
 
EDIT : J'ai regardé du côté de stream_set_timeout() et stream_get_meta_data(), mais rien de concluant.


Message édité par rufo le 19-07-2010 à 09:30:49

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2009602
Dj YeLL
$question = $to_be || !$to_be;
Posté le 16-07-2010 à 17:30:48  profilanswer
 

curl ?


---------------
Gamertag: CoteBlack YeLL
n°2009651
jeff@be
Posté le 16-07-2010 à 22:23:00  profilanswer
 

J'ai eu un problème similaire il y a quelques jours, j'avais une boucle infinie (ta ligne 38).

 

C'est un problème connu de feof et fsockopen http://php.net/manual/fr/function.feof.php

 

Peut-être que ton problème vient de là également?


Message édité par jeff@be le 16-07-2010 à 22:23:38
n°2009880
rufo
Pas me confondre avec Lycos!
Posté le 19-07-2010 à 09:32:30  profilanswer
 

merci pour l'info, je vais regarder ça. Mais ce qui me trouble comme dit dans mon précédent post, c'est que des url sur lesquelles ma fonction mettait 3 plombes, 1h après, ça ne le faisait plus :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
mood
Publicité
Posté le 19-07-2010 à 09:32:30  profilanswer
 

n°2009893
rufo
Pas me confondre avec Lycos!
Posté le 19-07-2010 à 10:12:25  profilanswer
 

Bon, en fait, c'était bien un pb de conf du côté du serveur sur lequel je vérifiait l'existence de certaines urls.
Mais bon, ce topic aura pas été inutile, j'aurai découvert get_headers() et que feof() avait un bug et qu'il existait une solution, ça pourra toujours resservir :)
Merci du coup de main en tout cas :jap:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Tester l'existance d'un fichier sur un montage

 

Sujets relatifs
supprimer ou déplacer des fichier par leur extensionsupprimer ou déplacer des fichier par leur extension
récupérer le nom d'un fichier non défini logé dan un dossier compresséfichier -> tableau
[VB.net] Renommer section fichier .iniProblème de montage des lecteurs réseaux sous windows 7
modifier une ligne precise d'un fichier texterenommer un fichier sous ubuntu
Supprimer contenu répertoire sauf 1 fichierTrier un fichier
Plus de sujets relatifs à : Tester l'existance d'un fichier sur un montage


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR