Page 1 sur 1

Création de répertoire et de fichier

Posté : 31 oct. 2010, 10:47
par Castor Gaspard
Bonjour,

J'aurai besoin de vos lumières, même si le jour s'est levé plus tôt ce matin, en raison du passage à l'heure d'hiver. :mrgreen:

Je veux écrire un script qui écrit un fichier config;ini dans un répertoire admin. Si ce répertoire n'existe pas, il doit être créé.

Voici ma portion de code :
if (!(is_file(''.$_POST['client'].'/admin/config.ini')))
{

	$create_client = mkdir('../'.$_POST['client'].'', 0705);
	$create_admin = mkdir('../'.$_POST['client'].'/admin', 0705);

}
$file = ''.$_POST['client'].'.ini';
$handle = fopen(''.$_POST['client'].'/admin/config.ini', 'w');
...
(Ma version de Php ne me permet pas de créer des répertoires récursivement.)

Or, je rencontre deux problèmes...

1. Lorsque le fichier n'existe pas, les répertoires sont créés, mais je rencontre l'erreur...
Warning: fopen(foo/admin/config.ini) [function.fopen]: failed to open stream: No such file or directory in /home/site/admin/settings_site.php on line 370
,
le fichier n'étant pas écrit.

2. Lorsque le fichier existe déjà, Php me dit avant ce message d'erreur...
Warning: mkdir() [function.mkdir]: File exists in /home/climax/site/settings_site.php on line 352
,

comme si ma condition if (!(is_file(''.$_POST['client'].'/admin/config.ini'))) n'était pas opérante.

J'ai essayé avec is_dir pour tester uniquement l'existence du répertoire, mais ça ne fonctionne pas non plus.

Merci beaucoup pour votre aide. :D

Cordialement,

Gaspard

Re: Création de répertoire et de fichier

Posté : 31 oct. 2010, 12:44
par Ryle
Pour ton premier problème, c'est simplement une question de chemin. Si ton fichier n'existe pas tu créer le dossier de l'utilisateur dans le répertoire parent (../) :
 $create_client = mkdir('../'.$_POST['client'].'', 0705);
Donc forcément, si tu vas ensuite le chercher dans le dossier local, tu auras du mal à le trouver :
$handle = fopen(''.$_POST['client'].'/admin/config.ini', 'w');
(A noter soit dit en passant, qu'il ne sert à rien ce concaténer des chaines vides à tes variables, si ce n'est rendre ton code moins lisible :))
$file = $_POST['client'] . '.ini'; // marche tout aussi bien que "$file = ''.$_POST['client'].'.ini';", et est plus facile à comprendre

Ton second problème vient effectivement de la logique de tes tests. Si le fichier n'existe pas, cela ne veut pas dire pour autant que le dossier dans lequel tu le cherches n'existe pas non plus. Il te suffit donc d'ajouter un test avec is_dir sur chacun des répertoire que tu t’apprêtes à créer :
if (!is_dir('../'.$_POST['client']))
        $create_client = mkdir('../'.$_POST['client'], 0705);
        
if (!is_dir('../'.$_POST['client'] . '/admin'))
        $create_admin = mkdir('../'.$_POST['client'].'/admin', 0705);

Re: Création de répertoire et de fichier

Posté : 31 oct. 2010, 19:39
par Castor Gaspard
Bonsoir,

Merci, Ryle : tes yeux étaient plus grands ouverts que les miens, tu es plus intelligent que moi, car je n'avais pas vu ma grossière erreur dans les chemins vers les répertoires. :mrgreen:

Je note ton conseil sur la concaténation : j'ai longtemps eu du mal à prendre le pli et, désormais, je concatène inutilement. ^^

Pour la création des répertoires, en les testant un à un leur existence avant création, en effet, ça fonctionne.

Merci encore.

Bien à toi,

Gaspard