2011-02-10 13 views
8

Estoy recibiendo el siguiente error al intentar llamar mkdir() en un servidor ...ha denegado el permiso de mkdir()

Advertencia: mkdir() [function.mkdir]: Permiso denegado en /home/server/public_html/wp-content/themes/mytheme/catimages/cat-images.php en la línea 373

la función es a continuación. Está intentando crear una carpeta debajo de la "carpeta wp-content/uploads" del sitio. He verificado que la versión PHP es 5.2.15 y que los archivos dentro de la carpeta del tema son grabables, pero eso no significa necesariamente que la carpeta de carga sea editable, supongo.

¿Cómo puedo saber si la carpeta de carga puede escribirse?

protected function category_images_base_dir() 
{ 
    // Where should the dir be? Get the base WP uploads dir 
    $wp_upload_dir = wp_upload_dir(); 
    $base_dir = $wp_upload_dir[ 'basedir' ]; 
    // Append our subdir 
    $dir = $base_dir . '/cat-images'; 
    // Does the dir exist? (If not, then make it) 
    if (! file_exists($dir)) { 
     mkdir($dir); //THIS IS LINE 373 
    } 
    // Now return it 
    return $dir; 
} 
+0

Es posible que deba configurar el indicador de resurice de mkdir;) – NikiC

+0

:) esto es muy gracioso: ¿cómo puede averiguarlo? -> obtienes la Advertencia: ... Permiso denegado ..., para que sepas que la carpeta no puede escribirse por el usuario del servidor web. si tiene acceso ssh haga un chmod -R 777/home/server/public_html/wp-content, si no tiene acceso ssh puede abrir su cliente ftp favorito, navegar a la carpeta wp-content y luego hacer clic derecho en wp-content y la mayoría de los clientes de ftp tendrán una pestaña o recuadro de permisos en algún lugar que utilizará para cambiar los permisos. –

+6

@poelinca Si pudiera, rechazaría eso. ¿Estás sugiriendo seriamente que sus directorios sean legibles a nivel mundial, por lo que el "problema desaparece"? –

Respuesta

7

is_writable() es probablemente la función que está buscando.

http://cz.php.net/manual/en/function.is-writable.php dice:

devuelve verdadero si el fichero indicado existe y se puede escribir. El argumento de nombre de archivo puede ser un nombre de directorio que le permite verificar si un directorio es escribible.

Además, la siguiente línea directa es relevante aquí:

Tenga en cuenta que PHP puede estar accediendo al archivo bajo el id de usuario que el servidor web se ejecuta (a menudo 'nadie').

En otras palabras, verifique si su directorio puede escribirse mediante la identificación de usuario del servidor web, ¡esto puede ser una identificación de usuario diferente a la suya! Establezca los permisos apropiados, p. establezca el grupo de usuarios de la carpeta a la del usuario del servidor y otorgue lectura, escritura y ejecución al grupo. (chgrp somegroup uploads; chmod g+r uploads; chmod g+w uploads; chmod g+x uploads)

+0

Gracias por la excelente respuesta. Voy a insertar algunas comprobaciones de código adicionales para verificar el estado de is_writable() de la carpeta principal y agregar manejo de excepciones en ese evento. –

+0

@Scott B: De nada. – Piskvor

1

Asegúrese de que la carpeta principal se pueda escribir en el proceso que ejecuta el servidor web.

Editar: Vaya, respuesta prematura. ¿Su anfitrión le da un navegador de archivos GUI?