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

  FORUM HardWare.fr
  Programmation
  PHP

  Tester l'existance d'un fichier situé sur un répertoire monté

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tester l'existance d'un fichier situé sur un répertoire monté

n°1829377
rufo
Pas me confondre avec Lycos!
Posté le 19-12-2008 à 10:11:41  profilanswer
 

Bonjour,
Sur un serveur sous Linux, j'ai une appli web en PHP qui, entre autre, gère des fiches documentaires dans une BD MySQL. L'un des champs de chaque fiche contient le chemin du fichier sous la forme http://NomDuServeur/NomRépertoireMonté/Chemin.../NomFichier.ext où NomRépertoireMonté correspond à un répertoire situé sur un autre serveur (Windows) qui a été monté sur le serveur via Samba.
 
Je voudrais faire un script qui vérifie que le fichier existe bien sur ce répertoire monté, afin de détecter les liens morts. J'ai essayé avec :
1) file_exists() mais ça me dit à chaque fois que le fichier n'existe pas alors que ce n'est pas vrai,
2) fopen() et dans le php.ini, allow_url_fopen = on et Registered PHP Streams = php, file, data, http, ftp, mais j'ai un message d'erreur comme quoi il: n'arrive pas à ouvrir le flux http,
3) la lib Snoopy, ça marche en partie mais que pour détecter des chemins vraiment foireux (qui ne commencent pas par http, par ex)
 
Auriez vous une explication de pourquoi fopen ne marche pas alors que ça devrait? Merci :)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 19-12-2008 à 10:11:41  profilanswer
 

n°1829405
rufo
Pas me confondre avec Lycos!
Posté le 19-12-2008 à 11:11:22  profilanswer
 

bon, avec Snoopy, j'ai progressé et ça marche a priori comme je veux, sauf que ma base ayant plusieurs milliers d'enregistrements, le script plante avec un message d'erreur relatif à de l'allocation mémoire :(
 
[size=0]Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 500001 bytes)[/size]


Message édité par rufo le 19-12-2008 à 11:13:18

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1829452
FlorentG
Unité de Masse
Posté le 19-12-2008 à 12:27:19  profilanswer
 

Bah augmente le memory_limit [:petrus75]

n°1829456
ionik
Posté le 19-12-2008 à 12:30:47  profilanswer
 

FlorentG a écrit :

Bah augmente le memory_limit [:petrus75]


Pas forcement il lui dis qu'il peut pas allouer un espace ridicule alors qu'il ne dépasse pas la limite cela doit venir d'autre chose une mauvaise utilisation


---------------
Recette cookeo Recette de cuisine
n°1829473
rufo
Pas me confondre avec Lycos!
Posté le 19-12-2008 à 13:04:43  profilanswer
 

En gros, je fais  

Code :
  1. $snoopy = new Snoopy;
  2.  
  3. while ($Record = $DbResult->fetchRow(DB_FETCHMODE_ASSOC)) {
  4.    $Url = $Record["DocumentLocation"];
  5.  
  6.    $snoopy->fetch(str_replace(array(" ", "/'" ), array("%20", "'" ), $Url));
  7.    if (strpos($snoopy->headers[0], '404') !== FALSE) {
  8.        ...
  9.    }
  10. }
  11. unset($snoopy);


 
la ligne qui plante est une ligne qui contient un fread() dans la lib Snoopy. En fait, je pense pas que ça soit dû à mon while qui aurait trop d'enregistrements à parcourir mais au fait que la lib Snoopy ouvre et charge en mémoire à chaque fois le contenu du fichier dont je veux tester l'existence. :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1829474
rufo
Pas me confondre avec Lycos!
Posté le 19-12-2008 à 13:05:29  profilanswer
 

j'ai essayé aussi en mettant le new et le unset à l'intérieur du while, j'ai le même pb.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1829495
rufo
Pas me confondre avec Lycos!
Posté le 19-12-2008 à 14:10:38  profilanswer
 

J'ai trouvé un script pas mal qui est bien plus rapide et qui n'a pas de pb de mémoire :

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


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

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

  Tester l'existance d'un fichier situé sur un répertoire monté

 

Sujets relatifs
aide javascript pout lire un fichier texteUrgent SVP : Comment renomer un fichier récupérer par FTP
Associer icone a un type de fichiersauver objet microsoft.xmldom dans fichier xml
comment savoir si un fichier sous linux a été modifier ?Créer un fichier HTML aprés execution de la page PHP
Lister contenu du repertoire d'un site.Ecriture de log et accès simultané au fichier
Upload fichier supérieur à 300 MoVB sauvergarde si fichier inexistant
Plus de sujets relatifs à : Tester l'existance d'un fichier situé sur un répertoire monté


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