Problemas con PHP, umask, mkdir y permisos

Publicidad

Supongamos que se tiene la siguiente situación:

Una aplicación Web provee al usuario la funcionalidad de subir archivos. Los archivos son guardados en disco utilizando el siguiente formato /uploads/user_<ID> donde ID es un identificador de usuario.

Desactivar safe_mode

Puede ser que la opción safe_mode de PHP esté previniendo el acceso a la carpeta, ya que puede pasar que el usuario que accede sea distinto al que lo crea.

La solución podría estar en deshabilitar safe_mode. Para esto hay que modificar el archivo php.ini y poner la entrada safe_mode=Off.

Si usas Plesk, puedes probar deshabilitar safe mode desde el panel de control de Plesk.

Usar umask

Otra razón del problema puede estar en que el usuario que crea la carpeta, tenga configurado umask con algún valor distinto de cero. Esto hace que al usar funciones como mkdir, se aplique la máscara para asignar los privilegios de lectura, escritura o ejecución.

Ejemplo, si el usuario que crea el directorio tiene por defecto un umask de 022 entonces por más que uses mkdir($upload_path, 0777), se creará una carpeta con permisos 755 en lugar de 777.

En PHP es fácil sobre-escribir provisoriamente el umask. Lo recomendable es que luego de sobreescribirlo y crear la carpeta, vuelvas a dejarlo como estaba. Esto se puede hacer de la siguiente manera:


$oldumask = umask(0);
mkdir($upload_path, 0777);
$result4 = umask($oldumask);
Related Posts Plugin for WordPress, Blogger...

Artículos relacionados:

  1. Deshabilitar safe_mode en Plesk
    En la versión 8 de Plesk, es posible deshabilitar safe_mode...
  2. La solución a los problemas de tildes y caracteres especiales con PHP y SQL Server
    Si estás teniendo problemas con el charset, encoding type, etc....
  3. SQLServer 2000 problemas con TCP/IP
    connection refused, error establishing socket, … mensajes que parecen ser...
  4. Archivos Temporales de Internet Explorer en XP
    Un problema común para quienes utilizan navegadores de Internet y...

Problemas con PHP, umask, mkdir y permisos se encuentra en Otros usa los siguientes tags:

 

3 comentarios to “Problemas con PHP, umask, mkdir y permisos”

  1. ZiTAL dice:

    Bastaría con:

    $oldumask = umask(0);
    mkdir($upload_path, 0777);
    umask($oldumask);

    No tienes porque asignarle una variable.

  2. Sí, tienes razón. No hay por qué asignarle la variable $result al final (quedó del código que justo estaba picando al momento de probar el “snippet”). =)
    Saludos

  3. ZiTAL dice:

    De todas formas muchas gracias :)

Dejar un comentario