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

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP-XML-Flash] listage repertoire [resolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP-XML-Flash] listage repertoire [resolu]

n°1180186
mechkurt
Posté le 20-08-2005 à 14:43:46  profilanswer
 

j'ai fait (avec l'aide d'omega2 pour une sombre histoire de path) une interface flash pour parcourir les repertoires, et lire les medias qui y sont contenu (flv :video sous flash + mp3 et jpg).
Flash fait donc une requete a list_dir_php (avec xml="." ) a peu près de cette manière:

Code :
  1. //recup XML
  2. function OnLoad(success:Boolean) {
  3. if (success) {
  4.  debug_txt.text = this;
  5. }
  6. }
  7. //send XML
  8. function sendXML(path:String) {
  9. var send_xml:XML = new XML(path);
  10. send_xml.xmlDecl = "xml=";
  11. var Reply_xml:XML = new XML();
  12. Reply_xml.ignoreWhite = true;
  13. Reply_xml.onLoad = OnLoad;
  14. send_xml.sendAndLoad("list_dir.php", Reply_xml);
  15. }
  16. //pour avoir le listage du dossier ou se trouve le script PHP  
  17. sendXML("." );
  18. //pour avoir listage d'un sous dossier intitulé mes_docs
  19. sendXML("mes_docs/" );


Le script PHP lui renvoie un xml formaté avec les differents fichiers contenu dans le dossier.
voila a quoi ressemble list_dir.php:

Code :
  1. <?php
  2. //recuperation de $path (chemin d'acces au repertoire a lister)
  3. //_GET pour débugguer : list_dir.php?xml=monsousrepertoire/
  4. if (isset($_GET['xml'])) {
  5. $path = $_GET['xml'];
  6. }
  7. //_POST pour Flash
  8. if (isset($_POST['xml'])) {
  9. $path = $_POST['xml'];
  10. }
  11. if( !isset( $path ) || $path == "" )  {
  12. $path = ".";
  13. }
  14. //modification de path pour que is_dir() et filesize() trouve les fichiers  
  15. if( $path == "." )  {
  16. $phppath = "./";
  17. } else {
  18. $phppath = "./" . $path;
  19. }
  20. //ouverture et listage du repertoire
  21. $dir_handle=@opendir($path) or die("Unable to open dir" );
  22. while( false !== ( $file = readdir( $dir_handle ) ) ) {
  23. if (substr($file,0,1)!="." ) {
  24.  if (is_dir($phppath.$file)) {
  25.   $dirs[]=$file;
  26.  } else if(ereg("_T.JPG",strtoupper($file))){
  27.   $jpgs[]=substr($file,0,8);
  28.  } else if (ereg(".FLV",strtoupper($file))) {
  29.   $flvs[]=$file;
  30.  } else if (ereg(".MP3",strtoupper($file))) {
  31.   $mp3s[]=$file;
  32.  }
  33.    }
  34. }
  35. @closedir($dir_handle);
  36. //classe par type de fichier puis par ordre alphabetique et renvoie une liste formaté en XML
  37. echo '<?xml version="1.0" encoding="UTF-8"?><dossier path="'.$path.'">';
  38. if(isset($dirs) and is_array($dirs)) {
  39. natcasesort($dirs);
  40. foreach ($dirs as $dir){
  41.  echo '<fichier type="dir" taille="'.filesize( $phppath . $dir ).'" nom="'.$dir.'" />';
  42. }
  43. }
  44. if(isset($jpgs) and is_array($jpgs)) {
  45. natcasesort($jpgs);
  46. foreach ($jpgs as $jpg){
  47.  echo '<fichier type="jpg" taille="'.filesize( $phppath . $jpg . '.jpg' ).'" nom="'.$jpg.'.jpg" nomthumb="'.$jpg.'_T.jpg" />';
  48. }
  49. }
  50. if(isset($flvs) and is_array($flvs)) {
  51. natcasesort($flvs);
  52. foreach ($flvs as $flv){
  53.  echo '<fichier type="flv" taille="'.filesize( $phppath . $flv ).'" nom="'.$flv.'" />';
  54. }
  55. }
  56. if(isset($mp3s) and is_array($mp3s)) {
  57. natcasesort($mp3s);
  58. foreach ($mp3s as $mp3){
  59.  echo '<fichier type="mp3" taille="'.filesize( $phppath . $mp3 ).'" nom="'.$mp3.'" />';
  60. }
  61. }
  62. echo "</dossier>";
  63. ?>


J'éspére avoir débroussaillé un peu pour d'autres!
Il ne reste plus qu'a bosser un peu le Flash pour recuperer les infos de this, charger les video, les mp3 et afficher les photos...
merci encore à omega2 et shakpana


Message édité par mechkurt le 24-09-2005 à 16:24:52

---------------
D3
mood
Publicité
Posté le 20-08-2005 à 14:43:46  profilanswer
 

n°1180200
omega2
Posté le 20-08-2005 à 15:26:07  profilanswer
 

"is_dir ( string   filename  )"  
 
"$file = readdir( $dir_handle )" donnera le nom du fichier, pas son nom avec le chemin d'accés.  
 
Faudrait peut être donner le chemin complet pour qu'il le trouve le répertoire. Sinon, il cherchera dans le répertoire courant et s'il en trouve un, ca sera pas celui qu'est visé.  
 
 
Sinon, optimisation :  
while( false !== ( $file = readdir( $dir_handle ) ) )  
est la même chôse que :  
while ( $file = readdir( $dir_handle ) )  
vu que "pas faux" = "vrai".
 
En php, une affectation de valeur dans une variable retourne un booléen (vrai tant qu'il y a eu affectation possible) en plus de l'affectation en question. Donc il n'y a aucune raison de typer ça en comparant l'opération à un booléen.

n°1180202
mechkurt
Posté le 20-08-2005 à 15:34:27  profilanswer
 

je suis pas sur d'avoir compris le debut de ta reponse...
le listage des sous repertoire fonctionne (essaye de cliquer sur le dossier 2002 par exemple)
http://mbillonlanfrey.free.fr/fecl [...] st_dir.swf
donc le path que je passe en argument est bien compris par le script PHP (il voie tous les fichiers qui sont dans le dossier 2002)
le PB c'est qu'il y a trois dossier dans 2002 (essai, truc et muche) et que ca il ne les voie pas
 
pour l'optimisation, c'était mon premier choix mais j'ai vue ici:
http://fr3.php.net/manual/en/function.readdir.php
This is the correct way to loop over the directory.
$
j'ai pas chérché a comprendre...
;-)
 
merci de ta réponse!


---------------
D3
n°1180203
omega2
Posté le 20-08-2005 à 15:43:00  profilanswer
 

dans ton dossier 2002 t'as par exemple un dossier 05 et un dossier 06.
dans ton répertoire local ils y sont pas.
Si je me souvient bien, "$file = readdir( $dir_handle )" te retourneras donc "." puis ".." puis "05" puis "06".
Toi tu lui demandes si "05" est un dossier, mais si tu précises pas "2002/05" il cherchera "./05" qui n'existe pas.
 
Voilà ce qui merde dans ton script.
 
Quand aux fichiers qui sont bien repéré, c'est normal, tu compares leur nom à une chaine de caractére, vu que c'est une comparaison pour laquelle on se contrefiche de la position des fichiers sur le disque dur, c'est normal que la comparaison marche.


Message édité par omega2 le 20-08-2005 à 15:48:16
n°1180380
mechkurt
Posté le 20-08-2005 à 20:40:38  profilanswer
 

je suis pas sur de comprendre (je suis un peu bourré juste la maintenant) mais je crois voir...
il faudraait que je change if (is_dir($file)) { et que je le transforme en if (is_dir($path.$file)) { ou un truc du genre...
j'essaye ca demain!
merci
;-)


---------------
D3
n°1180383
omega2
Posté le 20-08-2005 à 20:46:56  profilanswer
 

dans le while ait un  
echo $file."<BR>";
 
Tu véras bien ce que ca contient. ;) j'utilises parfois cette méthode pour débugguer mes scripts. :))

n°1180673
mechkurt
Posté le 21-08-2005 à 16:07:44  profilanswer
 

ayez ca marche comme je veux!
merci bcps!
j'ai édité mon poste pour que ca puisse servire a d'autres!
une derniere question si je veux debuguer mon code sans passer par Flash, est il possible de taper genre list_dir.php?xml="mes_docs/" dans mon browser pour voir le xml dans celui ci?
je suis pas sur d'avoir été tres clair ;-)


---------------
D3
n°1180681
omega2
Posté le 21-08-2005 à 16:13:32  profilanswer
 

me semble que oui
en tout cas, je vois pas pourquioi ca marcherait pas. par contre, IE a eu droit à certaines versions qui n'affichait pas les pages xml mal formaté. Pour celles là, il fallait créer une page html avec un lien pour faire un enregistrer sous et le regarder dans un autre logiciel.

n°1180711
mechkurt
Posté le 21-08-2005 à 16:43:50  profilanswer
 

ca m'a fait pensé que j'avais pas encore essayé avec IE...
pour une fois ca marche "mieux" que firefox, c.a.d qu'il affiche direct le xml alors que firefox necessite d'afficher la source
 
sinon ben ca marche pô list_dir.php?xml="mes_docs/"
-> que je le tape comme ca il me transforme les " en %22
-> ou que je le tape sans les guillemets list_dir.php?xml=mes_docs/
 
=>dans les deux cas il me renvoie le listage de la racine ("." )
 
je pense que c'est a cause de ca:

Code :
  1. $path = $_POST['xml'];
  2. if( !isset( $path ) || $path == "" )  {
  3.      $path = ".";
  4. }


mais ca veut quand même dire que ca passe pas bien...
c'est pas bien grave je me debrouillerais pour debuguer comme je peut avec Flash


---------------
D3
n°1186531
mechkurt
Posté le 28-08-2005 à 20:27:10  profilanswer
 

encore une question...
cette portion de code:

Code :
  1. if ($dirs){
  2.    gnagnagna
  3. }
  4. if ($jpgs){
  5.    gnagnagna
  6. }
  7. if ($flvs){
  8.    gnagnagna
  9. }
  10. if ($mp3s){
  11.    gnagnagna
  12. }


me cause des erreurs sous easyPHP (je sais c'est pas terrible d'utiliser ca mais c'est pratique pour montrer mon truc a des gens qu'on pas l'internet)
j'ai resolu le PB en faisant ca:

Code :
  1. $direxist=false;
  2. $jpgexist=false;
  3. $mp3exist=false;
  4. $flvexist=false;
  5. //etc...
  6. while( false !== ( $file = readdir( $dir_handle ) ) ) {
  7.     if (substr($file,0,1)!="." ) {
  8.         if (is_dir($phppath.$file)) {
  9.             $dirs[]=$file;
  10.             $direxist=true;
  11.         } else if(ereg("_T.JPG",strtoupper($file))){
  12.             $jpgs[]=substr($file,0,8); 
  13.             $jpgexist=true;
  14.         } else if (ereg(".FLV",strtoupper($file))) {
  15.             $flvs[]=$file;
  16.             $flvexist=true;
  17.         } else if (ereg(".MP3",strtoupper($file))) {
  18.             $mp3s[]=$file; 
  19.             $mp3exist=true;
  20.         } 
  21.    }
  22. }
  23. //etc...
  24. if ($direxist){
  25.    gnagnagna
  26. }
  27. if ($jpgexist){
  28.    gnagnagna
  29. }
  30. if ($flvexist){
  31.    gnagnagna
  32. }
  33. if ($mp3exist){
  34.    gnagnagna
  35. }


ca me semble moins propre mais comme ca resout le PB...
est ce que EasyPHP a raison et le fait de tester l'existence d'un array non déclaré de cette maniére est source d'erreur ?
a part ca si qq'un sait pourquoi list_dir.php?xml="mes_docs/" ne marche pas je suis preneur!
merci ;-)


---------------
D3
mood
Publicité
Posté le 28-08-2005 à 20:27:10  profilanswer
 

n°1189654
mechkurt
Posté le 01-09-2005 à 16:43:36  profilanswer
 

:bounce:


---------------
D3
n°1206380
mechkurt
Posté le 24-09-2005 à 10:57:37  profilanswer
 

j'ai toujours ce PB de undefined index sous easy PHP, je ne vais quand même pas faire ce pricncipe de booleen sessionexist, panoramiqueexist, etc... pour toutes les variables que j'utilise dans un code...
 
je sais que easyPHP c'est pas top mais j'ai pas trops le choix quand il s'agit d'aller montrer un site PHP chez un client qui n'as pas Internet...
 
Il doit bien exister une autre methode...
 
Help!


---------------
D3
n°1206464
shakpana
des fois, j'me demande ...
Posté le 24-09-2005 à 13:48:43  profilanswer
 

Hello, je m'immisce dans la conversation ...
 
- concernant tes $trucexist, j'aurait tendance à te proposer un

Code :
  1. if(isset($truc))


ou encore

Code :
  1. if(isset($truc) and is_array($truc))


tu gagnes 8 lignes et 4 variables, et passe gentillement un "error_reporting(E_ALL);" ...
et surtout, tu ne réinventes pas la roue ;p
 
- concernant %22, list_dir.php?xml="mes_docs/"
je comprend pas pourquoi l'idée t'es venu de mettre des guillemets ... ?
parce qu'en ce cas un "echo $_GET['xml'];" vas te donner "[guillemet]mes_docs/[guillemet]", ce qui ne risque pas de ressembler à un nom de dossier valide ...
 
a+
shakpana

n°1206506
mechkurt
Posté le 24-09-2005 à 15:21:19  profilanswer
 

ouais effectivement isset ressemble bien a ce que je cherche mais est ce que easyPHP m'eduque de force a faire des verifs de ce genre (alors que chez free mon script fonctionne tres bien sans ces verifications) ?
les guillemets c'est sans doute parcque inconsciemment je pensais a un string ;-)


---------------
D3
n°1206524
shakpana
des fois, j'me demande ...
Posté le 24-09-2005 à 16:05:11  profilanswer
 

> easyPHP m'eduque de force (...)
tu veux dire des erreurs "Notice" ?
J'utilise eror_reporting(E_ALL) en developpement, ça sert - finalement - même si des fois on l'a impression de faire plus de test d'existence de valeurs qu'autre chose, mais au final ton code est qd même plus "sûr" ... et ça permet de pas tomber dans du debuggage sauvage à la recherche d'une variable non-existente ...

n°1206528
mechkurt
Posté le 24-09-2005 à 16:17:34  profilanswer
 

Ok si tester une variable (avec isset()) avant de l'utiliser et une bonne habitude a prendre alors je vais la prendre ;-)


---------------
D3

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

  [PHP-XML-Flash] listage repertoire [resolu]

 

Sujets relatifs
[ VB.NET ] [ Résolu ] Treeview qui plante ...PHP et css
Erreur bizarre - Besoin d'explication avec formulaire [Résolu][php] Trier par ordre alphabétique [RESOLU]
[Resolu]inclure du c dans du c++[php] script trop long : pb d'execution ! [RESOLU]
[ resolu ] ContextMenu sur listboxMap Flash interactive
[RESOLU] probleme compil opengl / glut sous linux[MySQL & PHP] Obtenir les valeurs que peut prendre un champs SET
Plus de sujets relatifs à : [PHP-XML-Flash] listage repertoire [resolu]


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