Page 1 sur 2

Tous les dossiers et fichiers

Posté : 02 août 2010, 16:49
par 63renaud
Bonjour

Je voudrais faire un script qui doit faire une action dans certains fichiers.

Mais je ne sait pas lui indiquer tous les fichiers.

Code : Tout sélectionner

chmod ( " medias/ et_tous_les_fichiers_et_dossiers_qui_en_découlent", 0777);
merci

Re: Tous les dossiers et fichiers

Posté : 02 août 2010, 22:57
par Ryle
Il te faut faire une fonction récursive qui va parcourir ton dossier medias (avec scandir ou opendir + readdir par exemple).
Pour chaque élément, s'il s'agit d'un fichier tu exécutes le chmod, s'il s'agit d'un dossier, tu fais à nouveau appel à ta fonction pour parcourir ce nouveau dossier :)

Re: Tous les dossiers et fichiers

Posté : 02 août 2010, 23:21
par 63renaud
Bonjour Ryle
Merci pour ta réponse

Mais je débute en php
je dois faire une fonction avec "if " ou " while "

peux-tu me donner un exemple de départ.

Merci Ryle

Re: Tous les dossiers et fichiers

Posté : 02 août 2010, 23:47
par Ryle
En fait, avant d'être une boucle, c'est surtout une fonction que tu vas pouvoir appeler (et qui va pouvoir s'appeler elle même :
function maFonctionRecursive($dossier) {

   $liste = scandir($dossier); // parcours du dossier
   foreach ($liste as $element) { // pour chaque élément

      if ($element == '.' || $element == '..') // on passe les répertoires spéciaux 
         continue;

      if (is_dir($dossier . '/' . $element)) { // s'il s'agit d'un dossier
         maFonctionRecursive($dossier . '/' . $element); // on appel la fonction récursive pour qu'elle parcours ce dossier
      }
      else { // s'il s'agit d'un fichier
         chmod ( $dossier . '/' . $element , 0777); // on le chmodoit (du verbe chmoder, 3ème groupe)
      }
   }
}
Et pour lancer le tout il suffit d'un premier appel :
 maFonctionRecursive("chemin_du_dossier_medias");

Re: Tous les dossiers et fichiers

Posté : 03 août 2010, 00:24
par stealth35
Il te faut faire une fonction récursive qui va parcourir ton dossier medias (avec scandir ou opendir + readdir par exemple).
Pour chaque élément, s'il s'agit d'un fichier tu exécutes le chmod, s'il s'agit d'un dossier, tu fais à nouveau appel à ta fonction pour parcourir ce nouveau dossier :)
RecursiveDirectoryIterator est la pour ca :wink:

Re: Tous les dossiers et fichiers

Posté : 03 août 2010, 04:11
par AB
Il te faut faire une fonction récursive qui va parcourir ton dossier medias (avec scandir ou opendir + readdir par exemple).
Pour chaque élément, s'il s'agit d'un fichier tu exécutes le chmod, s'il s'agit d'un dossier, tu fais à nouveau appel à ta fonction pour parcourir ce nouveau dossier :)
RecursiveDirectoryIterator est la pour ca :wink:
Oui en même temps l'avantage de la réponse de Ryle c'est que cela apprend à faire une fonction récursive avec du code assez simple (donc plus à la portée du forum php débutant) et surtout que son code est documenté.

Maintenant ton lien est intéressant mais si tu pouvais prendre quelques minutes pour donner un exemple quand tu indiques ces nouvelles classes php5, ça donnerait plus d'intérêt à ton message et plus de motivation pour ceux qui te lise :wink:

Bon donc je m'y suis collé en suivant ton lien. Apparemment si l'on veut faire le chmod sur les dossiers et les fichiers on pourrait faire :
$parcours = new RecursiveDirectoryIterator("dossier_a_parcourir");

foreach (new RecursiveIteratorIterator($parcours, RecursiveIteratorIterator::SELF_FIRST) as $filename) 
{
    chmod ($filename , 0777);
}
et si seulement sur les fichiers :
$parcours = new RecursiveDirectoryIterator("dossier_a_parcourir");

foreach (new RecursiveIteratorIterator($parcours) as $filename) 
{
    chmod ($filename , 0777);
}
Oui enfin heureusement qu'il y avait quelques exemples, parce que sinon pour trouver que SELF_FIRST permettait de lister les dossiers... Donc l'inconvénient avec ces classes c'est que tant ce ne sera pas mieux documenté, excepté si on trouve un exemple correspondant à ce qu'on veut faire, on y passes des plombe ... :(

Re: Tous les dossiers et fichiers

Posté : 03 août 2010, 04:34
par stealth35
Maintenant ton lien est intéressant mais si tu pouvais prendre quelques minutes pour donner un exemple quand tu indiques ces nouvelles classes php5, ça donnerait plus d'intérêt à ton message et plus de motivation pour ceux qui te lise :wink:
c'est plus au niveau informatif, donc si ca intéressé on clique sur le lien, les exemple étant dedans je n'aurai fais que recopié exemple,
par contre "ces nouvelles classes php5", ca fais 6 ans quelle existe cette extension (puisque qu'elle est arrivé avec php 5), donc aucune excuse pour pas être a jour :wink:
l'itération étant plus simple a aborder que la récursivité (l'objet moins).

Re: Tous les dossiers et fichiers

Posté : 03 août 2010, 11:03
par 63renaud
Merci pour toutes vos aides.
Il est vrai que php5 est ancien, mais moi j'ai 47 ans et je dois apprendre le métier de développeur web php , suite à un accident de travail, qui m'invalide.

Merci pour votre patience et toutes vos aides.
-----------------------------------------------------------
J'ai lancé le script.php sur mon serveur free, puis j'ai importé la base de données dans mon localhost Wamp.

Mais maintenant voilà le message d'erreur.

Code : Tout sélectionner

Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, admin@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log.
Je ne sais pas si je suis sur le bon endroit du forum pour cette question.

Merci

Re: Tous les dossiers et fichiers

Posté : 03 août 2010, 16:54
par stealth35
étrange, t'aurai pas un htaccess qui traine ?

Re: Tous les dossiers et fichiers

Posté : 03 août 2010, 18:12
par 63renaud
si si il y a un fichier htacess.

je dois le supprimer ???

merci

Re: Tous les dossiers et fichiers

Posté : 03 août 2010, 18:18
par stealth35
si si il y a un fichier htacess.

je dois le supprimer ???

merci
non il mais il est peu être mal formé, essaye de le renommer pour tester, sinon montre nous le contenu :wink:

Re: Tous les dossiers et fichiers

Posté : 03 août 2010, 20:49
par 63renaud
Voici le contenu du htacess

Code : Tout sélectionner

#a mettre ds le httpd.conf d'apache #SetEnv SESSION_USE_TRANS_SID 0 // OVH RewriteEngine on #options all -followsymlinks // 1&1 #RewriteBase / // 1&1 RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(..)/?$ index.php?lg=$1 [L,QSA] RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(..)/([^/]*)/?$ index.php?lg=$1&keyRubrique=$2 [L,QSA] RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(..)/([^/]*)/([^.]*)\.html?$ index.php?lg=$1&keyRubrique=$2&keyMessage=$3 [L,QSA] ErrorDocument 401 /templates/error/HTTP_UNAUTHORIZED.php ErrorDocument 403 /templates/error/HTTP_FORBIDDEN.php ErrorDocument 404 /templates/error/HTTP_NOT_FOUND.php ErrorDocument 500 /templates/error/HTTP_INTERNAL_SERVER_ERROR.php
bonne lecture =D> :lol: #-o

Re: Tous les dossiers et fichiers

Posté : 03 août 2010, 20:53
par 63renaud
si je le renomme voilà ce que cela donne

Code : Tout sélectionner

Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 229 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 230 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 231 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 232 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 229 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 230 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 231 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 232 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 229 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 230 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 231 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 232 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 229 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 230 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 231 Deprecated: Function eregi_replace() is deprecated in C:\wamp\www\library\lib.handler.php on line 232 et cela continue encore sur 20 lignes
merci

Re: Tous les dossiers et fichiers

Posté : 03 août 2010, 21:00
par xTG
eregi_replace est déprécié depuis PHP 5.3.0 (si ma mémoire ne fait pas défaut).
Il te faut donc la remplacer par preg_replace ou bien désactiver les warnings pour la durée du script :

Code : Tout sélectionner

ini_set('error_reporting','E_ALL & ~E_NOTICE'); // désactivation des warnings mais activations des erreurs

Re: Tous les dossiers et fichiers

Posté : 03 août 2010, 21:08
par 63renaud
ok mais je la trouve dans quel fichier cette fonction.

merci