traitement de fichiers portant le même nom

traitement de fichiers portant le même nom - PHP - Programmation

Marsh Posté le 06-09-2007 à 17:25:45    

Bonjour,
 
Je développe un programme qui permet ,dans un répertoire, de modifier des fichiers.xml en les transformant en .txt dont le titre est une balise contenue dans le xml.
 
Je traite bien les fichiers mais il arrive que des fichiers XML contiennent la même balise constituant le nommage du fichier .txt . Ce qui me dérange c'est que je voudrais que les 2 fichiers soient présents après lancement du programme. Actuellement, un seul fichier ressort  !
 
[B]exemple : [/B]
contenu de  12345.xml  

Code :
  1. ...
  2. <Sujet>5-communes</Sujet>
  3. ...


 
contenu de 23456.xml

Code :
  1. ...
  2. <Sujet>5-communes</Sujet>
  3. ...


 
J'aimerais récupérer les 2 fichiers , tester si ils se nomment de la même manière, pouvoir renommer le 2nd en 5-communes-1 dans notre cas.
 
J'ai essayé "file exists", mais ça ne remarque pas qu'il existe déjà ?!?
voici mon prog
 

Code :
  1. <?php
  2. // on ouvre le repertoire
  3. $handle = opendir('.');
  4. // on scrupte le repertoire
  5. while(false !== ($file = readdir($handle))) {
  6.     if($file != "." && $file != ".." && $file !="transxml.php" ) {
  7. // on cree le chemin
  8. $path = '.'.'/'.$file;
  9. // on traite tous les fichiers xml
  10. if (preg_match('~\T.xml$~',$file)) {
  11. // on applique la transformation
  12. x$sxml = simplexml_load_file($path);
  13. $titre = utf8_decode($sxml->Proprietes->Sujet);
  14. //echo utf8_decode($sxml->Contenu);
  15. $texte = utf8_decode($sxml->Contenu);
  16. $texte = str_replace('?',"'",$texte);
  17. $texte = str_replace('\(','',$texte);
  18. $bad = array ('\cST\s','\cTI\s','\cTX\s','\cSG\s','\$','\dSG\t','\dDS1,2\t','\dFS\t','\dSN\t','\dSI\t','\cCH\s');
  19. $good = array ('','','',' ',' ','','','','','','');
  20. $texte = str_replace ($bad,$good,$texte);
  21. $titre = str_replace (' ','_',$titre);
  22. // on cree le fichier destination avec les donnees du fichier source
  23. $fp = fopen ('.' . DIRECTORY_SEPARATOR . $titre. '.txt','w');
  24. fputs ($fp,$texte);
  25. fclose ($fp);
  26. }
  27. }
  28. }
  29. // on ferme le repertoire
  30. closedir($handle);
  31. ?>


 
Merci d'avance pour vos réponses , car je nage :(

Reply

Marsh Posté le 06-09-2007 à 17:25:45   

Reply

Marsh Posté le 06-09-2007 à 18:37:40    

c bon, j'ai trouvé :  
 
la bonne syntaxe est de mettre le if avant le fopen , de cette manière :
 
 
if (file_exists($titre.'.txt')) {
$titre = "$titre-1";
}
 
$fp = fopen ('.' . DIRECTORY_SEPARATOR . $titre. '.txt','w');
fputs ($fp,$texte);
fclose ($fp);
 
A plus !!

Reply

Marsh Posté le 06-09-2007 à 18:41:45    

Risque de problème avec ta solution : tu fais quoi s'il existe déjà un fichier dont le nom est "$titre-1.txt" ?
 
Il vaut mieux vérifier quels sont les fichiers qui commencent par $titre et qui finissent par .txt (utilise la fonction glob() ) De cette manière tu sauras quel nom donner à ton fichier.

Reply

Sujets relatifs:

Leave a Replay

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