2012-11-28 8 views
10

corro il seguente codice:Perché l'mkdir fallisce con l'opzione ricorsiva impostata su true?

mkdir('mnt/1',0777,true); 
mkdir('mnt/a',0777); 

Directory "a" viene creato, mentre directory "1" non è, stampe pagina di avviso.

Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 3 

Ho piena autorizzazioni sulla directory mnt per apache utente esegue: versione

drwxr-xr-x 1 bitrix bitrix 4096 Nov 28 10:10 mnt 

PHP - PHP 5.3.3. Apache versione 2.2.15.

Qualche idea, perché l'mkdir fallisce con l'opzione ricorsiva impostata su true?

Aggiornamento ! Beh ho cancellato la cartella, ha fatto il seguente script in php e corse di nuovo:

<?php 
     error_reporting(E_ALL); 
     mkdir('mnt/1',0777,true); 
     mkdir('mnt/2/',0777,true); 
     mkdir('./mnt/3',0777,true); 
     mkdir('./mnt/4/',0777,true); 

     mkdir('mnt/a',0777); 
     mkdir('mnt/b/',0777); 
     mkdir('./mnt/c',0777); 
     mkdir('./mnt/d/',0777); 
?> 

Ecco l'output:

Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 3 
Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 4 
Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 5 
Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 6 

Ecco il contenuto della mnt cartella dopo l'esecuzione dello script:

drwxr-xr-x 1 bitrix bitrix 4096 Nov 28 2012 . 
drwxrwx--- 11 bitrix bitrix 12288 Nov 28 11:10 .. 
drwxr-xr-x 1 bitrix bitrix  0 Nov 28 2012 a 
drwxr-xr-x 1 bitrix bitrix  0 Nov 28 2012 b 
drwxr-xr-x 1 bitrix bitrix  0 Nov 28 2012 c 
drwxr-xr-x 1 bitrix bitrix  0 Nov 28 2012 d 

ho anche provato percorso assoluto per mkdir ricorsiva - ancora senza fortuna, mentre mkdir non ricorsiva funziona bene non importa quanto il percorso è impostato. Cosa c'è di sbagliato con mkdir ricorsivo? Non ho ancora idee ..

Aggiornamento! Ulteriori indagini hanno rivelato che queste cose accadono perché mnt è una cartella, montato da comando

mount -t cifs -o username=***user***,password=***password***,uid=bitrix,gid=bitrix,iocharset=utf8,codepage=866 //192.168.1.6/folder /home/bitrix/www/mnt 

In tutte le altre directory mkdir ricorsiva funziona bene, mentre in quella directory opere mkdir unico non-ricorsive!

Aggiornamento ! As femtoRgon assunto mkdir, quando eseguito da script nella cartella mnt, funziona bene sia ricorsivo che non ricorsivo. Ma ancora non riesco a capire, perché non riesce, quando viene eseguito da/home/bitrix/www? Ho anche provato a montare con le opzioni file_mode=0775,dir_mode=0775 - senza fortuna. Il mio sistema operativo = CentOS 6.3, se è importante.

+0

Avete già una directory '1' in' mnt'? – Arjan

+0

No. Le directory "a" e "1" non esistono prima dell'esecuzione dello script –

+0

Qual è il proprietario/gruppo e le autorizzazioni della directory "a" una volta creata? Un'altra idea è che la chiamata ricorsiva * potrebbe * provare a cambiare i permessi della directory 'mnt', che l'utente di apache non possiede. – mkilmanas

risposta

2

Dopo un po 'googling ho trovato la risposta su php.net. Si tratta dell'opzione di montaggio serverino. Quando ho montato la cartella con noserverino tutti i problemi erano spariti. Comunque grazie ragazzi per cercare di aiutare!

0

Si può provare ad aggiungere un carattere di barra al primo parametro.

mkdir('./mnt/1/',0777,true); 
0

Questo è il modo giusto di directory creazione:

mkdir('/test1/test2', 0777, true); 

mkdir("test1/test2",0777,true); 

Quindi l'errore è probabilmente su alcune delle linee mancanti .. Non nel modo in cui si creano le directory.

Per maggiori dettagli è possibile controllare qui: http://php.net/manual/en/function.mkdir.php

Problemi correlati