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.
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.
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);
Artículos relacionados:
Bastaría con:
$oldumask = umask(0);
mkdir($upload_path, 0777);
umask($oldumask);
No tienes porque asignarle una variable.
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
De todas formas muchas gracias