opendir() qui ne marche pas

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : opendir() qui ne marche pas

Re: opendir() qui ne marche pas

par moogli » 11 avr. 2013, 22:13

le message est clair, tu ne passe un nom de répertoire à la fonction scandir.

donc tu doit corriger ce problème, le scandir est à la ligne 2 du fichier.


l'os sur lequel tourne le script est important car les système de fichier ne sont pas parcourut pareil.

sous windows le chemin /alex/vue/catalogue/complements sera traduit pas c:\alex\vue\catalogue\complements

le ./ n'est pas forcément bien perçu par un os windows (le séparateur de dossier est \ et non /).

bref quoi qu'il arrive ton code doit passer un nom de fichier valide (et accessible par l'utilisateur qui fait tourner le script) à la fonction scandir.

Tu peux t'en assurer avec un file_exists ou un is_dir.

@+

Re: opendir() qui ne marche pas

par yann18 » 11 avr. 2013, 22:09

si une fonction php aussi basique que is_dir() ne marche pas c'est que y a forcement un problème chez ton hébergeur qui doit sans doute restreindre certaines directives apache.

si ton système est linux et que to bégergeur n'a pas bloqué la fonction exec tu peux essayer ceci:
$sortie=array();
exec('ls alex/vue/catalogue/complements/', $sortie);
if(!empty($sortie)
echo " il y a count($sortie) fichiers";
var_dump($sortie);

Re: opendir() qui ne marche pas

par Stalker » 11 avr. 2013, 16:10

UP

Re: opendir() qui ne marche pas

par Stalker » 09 avr. 2013, 12:28

Warning: scandir() [function.scandir]: Directory name cannot be empty in ... on line 2
bool(false)
Je suis hébergé sur ipage, je ne sais pas quel est leur OS.

Re: opendir() qui ne marche pas

par yann18 » 09 avr. 2013, 11:34

c'est var_dump($dir) et non vard_ump($dir) devrais-je écrire je m'en excuse.
$dir=scandir(realpath('./alex/vue/catalogue/complements'));
var_dump($dir); //retourne t-il tableau contenant les noms des fichiers?
encore une fois ton code je viens de le ré-tester en local(avec un mac) et sur un serveur en ligne(unix/debian) ça passe sans problème.
J'ai l'air peut être de ne pas comprendre certains des aspects liés à tes serveurs car tu parles de windows 7(donc forcement du local) et d'un serveur en ligne: le serveur(en ligne) sur lequel est exécuté ton code est-il un windows ou un linux?

Re: opendir() qui ne marche pas

par Stalker » 09 avr. 2013, 08:55

Pour le premier: bool(false)

Dois-je vraiment essayer le deuxième code? Mon site est en ligne, le dossier est sur FTP, le PHP est exécuté sur le serveur et non en local sur mon ordinateur, donner une adresse sur mon disque dur est incompréhensible pour moi.

Pour la solution alternative (à la fin de ta réponse), ça me donne ceci:
"Warning: scandir() [function.scandir]: Directory name cannot be empty in..."
"Fatal error: Call to undefined function vard_ump() in... "

Re: opendir() qui ne marche pas

par yann18 » 08 avr. 2013, 23:34

Le problème est que la function is_dir dans ton cas renvoie toujours false donc il y a forcement un problème de chemin lié au système de gestion de fichier propre à windows.
essaies de tester ces bouts codes pour voir lequel correspond à windows:
//en précédant le slash(/) par le point(.)
 $mondossier=is_dir(realpath('./alex/vue/catalogue/complements'));
var_dump($mondossier); //renvoie t-il TRUE?

//chemin absolu style windows
 $mondossier=is_dir('c:\ .......\alex\vue\catalogue\complements');
var_dump($mondossier); //renvoie t-il TRUE?
si aucun bout de code renvoie TRUE tu peux voir à la page ci-dessous il y a quelqu'un qui a écrit une méthode(UnRealPath()) pour ça:
http://www.php.net/manual/fr/function.r ... .php#77968

autre alternative pour lire le contenu d'un dossier :
$dir=scandir(realpath('./alex/vue/catalogue/complements'));
vard_ump($dir);

Re: opendir() qui ne marche pas

par Stalker » 08 avr. 2013, 21:53

Je ne vois pas ce que vient faire l'OS de mon ordinateur dans l'histoire, puisque le PHP est exécuté sur un serveur O_o

Cela dit je vais plus explicité code, je pensais que le simplifier facilitera le debug mais si ça se trouve le problème vient de là. En ce moment j'ai ça:
<?php

$nb_fichier = 0;
echo '<ul>';
$mondossier=realpath('/alex/vue/catalogue/complements');

   if(is_dir($mondossier))
   {
      if($dossier = opendir($mondossier))
      {
         while(false !== ($fichier = readdir($dossier)))
         {
            $nb_fichier++; // On incrémente le compteur de 1
            echo '<li><a href=".$dossier' . $fichier . '">' . $fichier . '</a></li>';
         }
         echo '</ul>';
         echo 'Il y a <strong>' . $nb_fichier .'</strong> fichier(s) dans le dossier';
 
         closedir($dossier);
      }
      else
         echo 'Le dossier n\' a pas pu être ouvert';
   }
   else
      echo($mondossier." n'est pas un dossier.");
?>
 

Re: opendir() qui ne marche pas

par yann18 » 08 avr. 2013, 20:26

parce-que sous windows le style de chemin utilisé est l'anti-slash (\).

j'aurai dû mettre realpath à place de basename (prévu pour les fichiers) bien sûr que sous unix ça n'aurait rien changé car tout est fichier.Ton script est-il dans le même dossier que mondossier?
 $nb_fichier = 0;
   echo '<ul>';
   $mondossier=realpath('mondossier/');
   
   if(is_dir($mondossier))
   {
      if($dossier = opendir($mondossier))
      {
         while(false !== ($fichier = readdir($dossier)))
         {
            $nb_fichier++; // On incrémente le compteur de 1
            echo '<li><a href=".$dossier' . $fichier . '">' . $fichier . '</a></li>';
         }
         echo '</ul>';
         echo 'Il y a <strong>' . $nb_fichier .'</strong> fichier(s) dans le dossier';
 
         closedir($dossier);
      }
      else
         echo 'Le dossier n\' a pas pu être ouvert';
   }
   else
      echo($mondossier." n'est pas un dossier.");
rappel: ton script marche très bien chez moi
si ça ne marche pas regardes les droits de mondossier.

Re: opendir() qui ne marche pas

par Stalker » 08 avr. 2013, 18:50

Je suis sous Windows 7 mais quel rapport? le dossier est sur FTP

Re: opendir() qui ne marche pas

par yann18 » 08 avr. 2013, 18:07

en réalité ton script doit marcher sans problème.
qu'est ce que t'as comme OS? je présume que c'est windows.

passe en paramètre de basename le nom du dossier.
    $mondossier=basename('mondossier/');

Re: opendir() qui ne marche pas

par Stalker » 08 avr. 2013, 17:41

"n'est pas un dossier." Comment est-ce possible?

Re: opendir() qui ne marche pas

par edison1986 » 08 avr. 2013, 10:26

Si tue essai comme ça qu'est ce que sa t'affiche ?
<?php
   $nb_fichier = 0;
   echo '<ul>';
   $mondossier='mondossier/';
   
   if(is_dir($mondossier))
   {
      if($dossier = opendir($mondossier))
      {
         while(false !== ($fichier = readdir($dossier)))
         {
            $nb_fichier++; // On incrémente le compteur de 1
            echo '<li><a href=".$dossier' . $fichier . '">' . $fichier . '</a></li>';
         }
         echo '</ul>';
         echo 'Il y a <strong>' . $nb_fichier .'</strong> fichier(s) dans le dossier';
 
         closedir($dossier);
      }
      else
         echo 'Le dossier n\' a pas pu être ouvert';
   }
   else
      echo($mondossier." n'est pas un dossier.");
?>
 

Re: opendir() qui ne marche pas

par Stalker » 08 avr. 2013, 08:56

ça ne change rien.

Re: opendir() qui ne marche pas

par Invité » 07 avr. 2013, 20:31

essai comme ça
<?php

$nb_fichier = 0;
echo '<ul>';
$mondossier='mondossier/';
if($dossier = opendir($mondossier))
  {
   while(false !== ($fichier = readdir($dossier)))
      {
       $nb_fichier++; // On incrémente le compteur de 1
       echo '<li><a href=".$dossier' . $fichier . '">' . $fichier . '</a></li>';
      }
echo '</ul>
';
echo 'Il y a <strong>' . $nb_fichier .'</strong> fichier(s) dans le dossier';
  
closedir($dossier);
  
  }
  
else
     echo 'Le dossier n\' a pas pu être ouvert';

?>