2010-06-24 29 views
8

Mi códigomkdir() no funciona

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

y

mkdir("relative/path", 0777); 

no está funcionando, el modo seguro está apagado, e incluso he tratado de configurar todos los carpetas principales a 777.

¿Alguna idea?

EDITAR: Tengo el informe de errores activada, en mi frustración que he 777'd todo el camino sólo para asegurarse de que, ese no es el problema. Tiene que ser algo estúpidamente simple.

EDITAR EDITAR: votos a favor de todos los que respondieron con sugerencias ... Pero no voy a seleccionar una respuesta, ya que todavía no se resuelve, pero creo que esta será una de esas que quedan abierto para siempre

EDITAR x 3: Así que tiene la resolución más satisfactoria a esta pregunta siempre ... empecé una imagen de máquina virtual limpia con, vuelve a intentar y funciona ahora. No es broma.

+4

¿Qué error devuelve? – enricog

+0

Ninguno, simplemente pasa, es una cosa y no escupe ningún error. Incluso traté de ver si, de alguna manera, estaba colocando el nuevo directorio en otro lugar por error y podía encontrarlo en cualquier parte. –

+5

Un par de cosas: ¿el proceso que ejecuta este código tiene permiso para escribir en el directorio principal? Si está ejecutando esto a través de un servidor web, ¿ha revisado los registros en busca de mensajes de error? – GreenMatt

Respuesta

0

Faltan citas sobre el parámetro del nombre de ruta.

+0

El código realmente tiene eso ahí ... Lo siento por mi frustración. Olvidé agregar eso, voy a hacer una edición. ¿Alguna otra idea? –

+0

Asegúrese de que haya activado los informes de errores para que pueda ver si da alguna advertencia al llamar a la función. –

+43

¿por qué se acepta esta respuesta? – fartagaintuxedo

13

¿Existen todos los directorios padre?

Si no es así, será necesario que habilite la recursividad (suponiendo PHP5 aquí):

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

EDIT: No ver el comentario diciendo que oculta todos los directorios de var la baja se establece en permiso de escritura universal, así que estoy apostando que la ruta del directorio existe y que lo anterior no será útil. ¡Lo siento!

+0

Todo está bien, tenía miedo de que eso sucediera, así que acabo de hacer una edición de la pregunta original. –

+0

Esto funciona para mí. ¡Muchas gracias! –

+0

¡Encantado de ver una respuesta de siete años todavía ayuda a la gente! – ajm

-3

Usted debe tener el atributo entre comillas:

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

no, el parámetro '$ mode' se define como un octal int por lo que ** no debe ** poner comillas alrededor de él. – jordanstephens

+0

Hago un directorio de esta manera. Y todo funciona – pltvs

2

¿Estás tratando de crear los directorios de forma recursiva, igual que lo haría con mkdir -p en la línea de comandos? Si es así, especifique true como el tercer parámetro en mkdir.

Y solo para repetir las sugerencias anteriores, POR FAVOR especifique los mensajes de error que está recibiendo. Si no obtiene ninguno, use esto antes de su llamada: error_reporting(-1); // ALL messages y ini_set('display_errors', 'On');.

+0

Eso es más o menos el código que tenía al comienzo del guión. Excepto en lugar del -1 tuve esto. ¿Se supone que es el -1? Tenía ini_set ('display_errors', 1); error_reporting (E_ALL | E_STRICT) ¿Se supone que debo usar -1 en su lugar? 1 siempre ha trabajado en el pasado al mostrar errores. –

+0

Es una máscara de bits, por lo que -1 esencialmente es lo mismo que "todos los bits establecidos" para unsigned int. El efecto será el mismo. Si, en alguna versión futura, agregan otra constante 'E_XXX' que no está incluida en' E_ALL', '-1' la incluirá de todos modos. Depende de lo que prefieras, básicamente. – janmoesen

0

¿Has probado con la prueba más corta posible?

mkdir ('directorio', 0777);

Si esto no funciona, me gustaría probar la creación de un estándar como CHMOD 0755 (esto es una suposición totalmente al azar, tal vez el servidor no permitirá la creación de 0777 a través de PHP)

si esto no funciona me diría que el servidor probablemente necesita una configuración diferente/php no tiene la escritura correcta en la carpeta, ¿tal vez podría preguntarle a su proveedor de host?

1

Tengo un problema similar y descubrí, que no tengo espacio libre en mi disco. Consulte con el comando df (en Linux) qué tan lleno está su disco. Es posible que root tenga permiso para crear archivos y carpetas en esta situación, porque tiene espacio reservado previamente.Si ejecuta el script desde la línea de comandos como usuario root, no hay ningún error, pero si el script se ejecuta con apache, se produce un error.