2010-06-24 22 views
8

Il mio codicemkdir() non funziona

mkdir("/some/absolute/path",0777); 

e

mkdir("relative/path", 0777); 

non funziona, il modo sicuro è spento, e ho anche provato a installare tutte le cartelle principali a 777.

Qualche idea?

EDIT: Ho segnalazioni di errore attivate, nella mia frustrazione ho 777'd l'intero percorso solo per assicurarsi che, questo non è il problema. Deve essere qualcosa di stupidamente semplice da fare.

MODIFICA MODIFICA: Upvotes per tutti coloro che hanno risposto con suggerimenti ... Ma non selezionerò una risposta poiché questo non è ancora risolto, ma poi penso che questo sarà uno di quelli rimasti aperto per sempre.

EDIT x 3: Quindi ho la risoluzione più insoddisfacente a questa domanda ... Ho iniziato con una pulita immagine VM, ritentato e funziona ora. Nessun scherzo.

+4

Che errore restituisce? – enricog

+0

Nessuno, passa solo fa la cosa e non sputa errori. Ho anche provato a vedere se in qualche modo stava erroneamente posizionando la nuova directory da qualche altra parte e ho potuto trovare se dovunque. –

+5

Un paio di cose: il processo che esegue questo codice ha il permesso di scrivere nella directory superiore? Se stai eseguendo questo attraverso un server web, hai controllato i log per i messaggi di errore? – GreenMatt

risposta

0

Mancano le virgolette attorno al parametro del nome del percorso.

+0

Il codice ha effettivamente quello lì dentro ... Scusa per la mia frustrazione ho dimenticato di aggiungerlo, farò una modifica. Altre idee? –

+0

Assicurati di aver attivato la segnalazione degli errori, in modo che tu possa vedere se fornisce avvisi quando chiama la funzione. –

+43

perché questa risposta è accettata? – fartagaintuxedo

13

Esistono tutte le directory principali?

In caso contrario, sarà necessario abilitare la ricorsione (supponendo PHP5 qui):

mkdir('/path/to/your/dir',0777,true); 

EDIT: Non ho visto il commento nascosta dire che ogni directory da var verso il basso è stato fissato per il mondo-scrivibili, quindi sto scommettendo che il percorso della directory esiste e quanto sopra non sarà utile. Scusate!

+0

Va tutto bene, avevo paura che ciò accadesse, quindi ho appena apportato una modifica alla domanda originale. –

+0

Questo funziona per me. Molte grazie! –

+0

È bello vedere una risposta di sette anni che aiuta ancora le persone! – ajm

-3

Si deve prendere l'attributo tra virgolette:

mkdir('path/to/your/dir','0777'); 
+8

no, il parametro '$ mode' è definito come un ottale int in modo che ** non debba ** mettere virgolette attorno ad esso. – jordanstephens

+0

Realizzo una directory in questo modo. E tutto funziona. – pltvs

2

Stai cercando di creare queste directory ricorsivamente, come si farebbe con mkdir -p sulla riga di comando? In tal caso, specificare true come terzo parametro su mkdir.

E solo per fare eco ai suggerimenti precedenti, PER FAVORE specificare i messaggi di errore che si stanno ottenendo. Se non ne hai, usa questo prima della chiamata: error_reporting(-1); // ALL messages e ini_set('display_errors', 'On');.

+0

Questo è praticamente il codice che avevo all'inizio dello script. Tranne il -1 invece ho avuto questo. Dovrebbe essere il -1? Avevo ini_set ('display_errors', 1); error_reporting (E_ALL | E_STRICT) Dovrei usare -1 invece? 1 ha sempre funzionato in passato nella visualizzazione degli errori. –

+0

È un bit mask, quindi -1 essenzialmente è uguale a "all bits set" per unsigned int. L'effetto sarà lo stesso. Se, in alcune versioni future, aggiungono un'altra costante 'E_XXX' che non è inclusa in' E_ALL', '-1' la includerà comunque. Dipende da ciò che preferisci, in pratica. – janmoesen

0

Hai provato con il test più breve possibile?

mkdir ('directory', 0777);

Se questo non funziona vorrei provare a creare con un CHMOD standard come 0755 (questa è una supposizione del tutto casuale, forse il server non consentirà la creazione di 0777 tramite PHP)

se questo non funziona io direi che il server probabilmente ha bisogno di setup diversi/php non fa il diritto di scrittura sulla cartella, forse potresti chiedere al tuo fornitore host?

1

Ho un problema simile e ho scoperto che non ho spazio libero lasciato sul mio disco. Verifica con il comando df (su linux) quanto è piena la tua unità. È possibile che a root sia permesso creare file e cartelle in questa situazione, perché ha uno spazio pre-riservato.Se si esegue lo script da riga di comando come utente root, non si verifica alcun errore, ma se lo script viene eseguito da apache, si verifica un errore.