begin process at 2012 02 09 11:01:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > MY_MKDIR

MY_MKDIR


 Information sur la source

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Niveau :Débutant Date de création :27/02/2005 Date de mise à jour :14/06/2005 14:53:08 Vu :3 805

Auteur : Naixn

Ecrire un message privé
Site perso
Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

 Description

Bon. Dans un script de galerie que j'ai fait, j'avais besoin de créer multiples sous dossiers.
Et c'est à ce moment là que j'ai remarqué que la fonction mkdir était incaple de créer le dossier " sousdossier " dans le dossier " machin " ( machin/sousdossier ), si le dossier " machin " en question n'existe pas ...
Il faut donc faire :
mkdir('machin', 0700);
mkdir('machin/sousdossier', 0700);
Ce qui est un peu galère, d'où mon besoin de créer la fonction my_mkdir, qui fera ça automatiquement.

Source

  • function my_mkdir($dir, $chmod = 0700)
  • {
  • // Si $dir ne contient rien
  • if (!empty($dir))
  • {
  • $array = explode('/', $dir);
  • $base_dir = '';
  • foreach ($array as $key => $value)
  • {
  • if ($key)
  • $base_dir .= '/' . $value;
  • else
  • $base_dir .= $value;
  • // Si le dossier à créer existe déjà, on ne fait rien ( ça évite que php retourne une erreur ).
  • // Le !empty($value) est là pour éviter de faire tourner le code, dans cet exemple là :
  • // $dir = 'test/truc/';
  • // on aurait : $array[2] = '';
  • // Inutile donc de faire tourner le code pour ça :)
  • if (!file_exists($base_dir) && !empty($value))
  • if (!mkdir($base_dir, $chmod))
  • echo 'Unable to create folder "' . $base_dir . '"<br />';
  • }
  • }
  • else
  • echo '$dir is not set.';
  • }
function my_mkdir($dir, $chmod = 0700)
{
        // Si $dir ne contient rien
        if (!empty($dir))
        {
                $array = explode('/', $dir);
                $base_dir = '';
                
                foreach ($array as $key => $value)
                {
                        if ($key)
                                $base_dir .= '/' . $value;
                        else
                                $base_dir .= $value;

                        // Si le dossier à créer existe déjà, on ne fait rien ( ça évite que php retourne une erreur ).
                        // Le !empty($value) est là pour éviter de faire tourner le code, dans cet exemple là :
                        // $dir = 'test/truc/';
                        // on aurait : $array[2] = '';
                        // Inutile donc de faire tourner le code pour ça :)
                        if (!file_exists($base_dir) && !empty($value))
                                if (!mkdir($base_dir, $chmod))
                                        echo 'Unable to create folder "' . $base_dir . '"<br />';
                }
        }
        else
                echo '$dir is not set.';
}

 Conclusion

normalement, il vous suffit de faire :
my_mkdir('test/machin/truc');
pour créer ces trois dossier avec un CHMOD 0700
vous pouvez aussi choisir vous même ce CHMOD :
my_mkdir('test/machin/truc', 0777);


 Historique

14 juin 2005 14:53:08 :
Changement du CHMOD. Anciennement décimal, il est maintenant aux normes en étant octal.

 Sources du même auteur

[PHP5] FACTORY ET PARAMÈTRES CONSTRUCTEURS
Source avec Zip Source avec une capture GALERIE SIMPLE MAIS EFFICACE

 Sources de la même categorie

Source avec Zip COMPTEUR DE CLIQUE PHP AVEC JQUERY par devgoneti
Source avec Zip LIVRE D'OR SIMPLE (POUR DÉBUTANT) par devgoneti
Source avec Zip SCRIPT TRAVAUX POUR VOTRE SITE par FleuryK
Source avec Zip Source avec une capture EL COYOTOS LIVRE D'OR PHP 5 par elcoyotos
COMPTEUR DE VISITE - FICHIER TXT - CODE MINIMAL par SuperChouquette

Commentaires et avis

Commentaire de LuckyLuck le 27/02/2005 13:17:34

Je trouve cette fonction parfaitement programmée, il n'y a franchement rien à dire. Joli :)

Commentaire de Anthomicro le 27/02/2005 13:49:50

Salut ;-)

Pareil que le commentaire de LuckLuck, c'est bien programmé, tu peux pour optimiser remplacer dans les echo les points par des virgules, m'enfin ça changera pas grand chose.

9/10 pour moi également ;-)

Commentaire de sjon le 27/02/2005 17:46:28

Sael og blesud

Je suis d'accord sur le fait que cela soit bien programmé cependant vous pouvez utiliser mkdir et créer un dossier avec plusieurs sous dossiers en une seule fois. Il suffit d'ajouter l'option -p à mkdir (sous *nix sous Windows ce n'est pas nécéssaire de mémoire)

exec('mkdir -p toto/titi/tata');

puis eventuellement

exec('chmod -R 700 toto')

Le -R pour la récursivité

Sigurjon Birgir Sigurdsson aka Sjon

Commentaire de Anthomicro le 27/02/2005 17:49:56

Le problème est que exec est désactivée chez la plupart des hébergeurs.

a +

Commentaire de sjon le 27/02/2005 18:02:32

Sael og blesud

C'est vrai mais les vieilles habitudes auto-hébergements ne sont pas si simples à oubliées ;-)

Sigurjon Birgir Sigurdsson aka Sjon

Commentaire de sjon le 27/02/2005 18:06:56

Sael og blesud

C'est vrai mais les vieilles habitudes auto-hébergements ne sont pas si simples à oubliées ;-)

Par ailleurs ce n'est pas forcément la commande exec qui est désactivée mais comme l'utilisateur est chrooté il ne dispose pas forcément des fonctions systems telles que mkdir. Cependant cela peut se négocier avec l'hébergeur en question ...

Sigurjon Birgir Sigurdsson aka Sjon

Commentaire de coucou747 le 27/02/2005 18:33:46 administrateur CS

salut

pour la source : super

pour sjon : avec exec, on a pas de messages d'erreur... Ici, on peut en metr un pour les dossiers dont on a pas les droits d'accès par exemple...

Commentaire de sjon le 27/02/2005 18:39:19

Coucou 747

Il est vrai qu'exec ne renvoi pas d'erreur maintenant vous etes libre d'utiliser system par exemple ... ;-)

Sigurjon Birgir Sigurdsson aka Sjon

Commentaire de coucou747 le 27/02/2005 18:43:03 administrateur CS

je suis bien daccord avec toi, mais quand on peut utiliser autre chose, c'est mieux... pour des raisons de compatibilitée, et de fiabilitée (à cause de ces messages d'erreurs cachés...)

cette fonction nous permet de nous en passer, et c'est très bien

Commentaire de gamemonde le 07/06/2005 22:53:48

pourquoi quand j'ai crée un dossier avec le mode 700 et celui du 777 je ne peux pas y aller je recevois une erreur 403 je ne suis pas autoriser à entrer

Commentaire de Anthomicro le 07/06/2005 23:29:15

pourquoi tes questions ne devraient pas se trouver ici ?

Commentaire de coucou747 le 08/06/2005 10:59:56 administrateur CS

l'utilisateur apache n'est pas le même que php...

Commentaire de gheger le 25/11/2005 13:54:03

Cette fonction m'a posé des problèmes...premièrement je ne comprend par cette ligne:

function my_mkdir($dir, $chmod = 0700)
(...)

Quelle est l'utilité de créer une fonction qui recoit des paramètres si un des ces paramètres est réinitialisé dans la signature de la fonction??? (je pense à $chmod = 0700)

ensuite je dirais que l'idée de la fonction est tout a fait bonne mais l'utilisation de la fonction mkdir() pose problème car l'utilisateur propriétaire est "apache" ce qui ne permet plus d'effacer le dossier crée par la suite... j'utiliserais plutot ftp_mkdir()...

Qu en pensez-vous???

Commentaire de Anthomicro le 25/11/2005 20:13:51

"Quelle est l'utilité de créer une fonction qui recoit des paramètres si un des ces paramètres est réinitialisé dans la signature de la fonction??? (je pense à $chmod = 0700)"

si ce paramètre n'est pas renseigné lorsque tu appelles la fonction la valeur par défaut sera 0700

donc tu peux appeler ta fonction comme ça :

my_mkdir($repertoire);

ou encore my_mkdir($repertoire,0777); par exemple.

"l'utilisateur propriétaire est "apache" ce qui ne permet plus d'effacer le dossier crée par la suite".

Je n'ai jamais essayé, mais je ne pense pas que ça pose de problèmes. Si t'essaies de supprimer un dossier non vide en revanche t'en auras.

a +

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales