denegado - mkdir php permisos
PHP mkdir: problema de permiso denegado (11)
Intento crear un directorio con la función mkdir de PHP pero obtengo un error de la siguiente manera: Warning: mkdir() [function.mkdir]: Permission denied in ...
¿Cómo resolver el problema?
No establezca permisos en 777 cuando use mkdir en PHP
Las respuestas de enlace único no se consideran buenas prácticas en , pero el consejo que se da aquí generalmente NO se debe seguir.
Me gustaría volver a esta gran respuesta sobre una pregunta similar . Yo cito:
Deje de sugerir que use 777. Todos los usuarios pueden grabar el archivo, lo que significa que usted pierde toda la seguridad para la que se diseñó el sistema de permisos. Si sugiere esto, piense en las consecuencias que puede tener en un servidor web mal configurado: sería increíblemente fácil "piratear" el sitio web sobrescribiendo los archivos. Entonces, no lo hagas
Última respuesta para las personas que encuentran esto a través de google en el futuro. Tuve el mismo problema.
NOTA: ESTOY EN MAC OSX LEÓN
Lo que sucede es que apache se está ejecutando como el usuario "_www" y no tiene permisos para editar ningún archivo. Notarás que NINGUNAS funciones del sistema de archivos funcionan a través de php.
Como arreglar:
Abra una ventana del buscador y, en la barra de menús, elija Ir> Ir a la carpeta> / privado / etc / apache2
ahora abre httpd.conf
encontrar:
User _www
Group _www
cambiar el nombre de usuario:
User <YOUR LOGIN USERNAME>
Ahora reinicie Apache ejecutando este terminal de formulario:
sudo apachectl -k restart
Si todavía no funciona, sucede que hago lo siguiente antes de hacer lo anterior. Podría estar relacionado.
Abra el terminal y ejecute los siguientes comandos: (tenga en cuenta que los archivos de mi servidor web se encuentran en / Library / WebServer / www. Cambie según la ubicación de su sitio web)
sudo chmod 775 /Library/WebServer/www
sudo chmod 775 /Library/WebServer/www/*
Como estás en un mac, puedes agregarte al grupo _www (el grupo de usuarios de apache) en tu mac:
sudo dseditgroup -o edit -a $USER -t user _www
y agregue _www user al grupo wheel, que parece ser lo que el mac crea archivos como:
sudo dseditgroup -o edit -a _www -t user wheel
Corrige los permisos del directorio en el que intentas crear un directorio.
Lo que puedes hacer es ir a: / etc / sudoers
Añada la siguiente línea que da permiso a ese usuario www-data ALL = (ALL: ALL) ALL ¿Por qué www-data? esto es porque Apache se está ejecutando con este nombre de usuario.
En caso de que su usuario sea diferente, intente con el nombre de usuario ALL = (ALL: ALL) ALL
Esto funcionó para mí.
Necesita tener permiso del sistema de archivos para crear el directorio.
Ejemplo: en Ubuntu 10.04 apache (php) se ejecuta como usuario: www-data en el grupo: www-data
Lo que significa que el usuario www-data necesita acceso para crear el directorio.
Puede intentarlo usted mismo utilizando: ''su www-data'' para convertirse en el usuario de www-data.
Como una solución rápida, puedes hacer: sudo chmod 777 my_parent_dir
Sé que este es un hilo viejo, pero necesita una mejor respuesta. No debería necesitar establecer los permisos en 777, es un problema de seguridad ya que le da acceso de lectura y escritura al mundo. Puede ser que su usuario de apache no tenga permisos de lectura / escritura en el directorio.
Esto es lo que haces en Ubuntu
Asegúrese de que todos los archivos sean propiedad del grupo y usuario de Apache. En Ubuntu, es el grupo y usuario de www-data
chown -R www-data:www-data /path/to/webserver/www
A continuación, habilitó a todos los miembros del grupo www-data para leer y escribir archivos
chmod -R g+rw /path/to/webserver/www
La función php mkdir()
debería funcionar ahora sin devolver errores
Sé que este hilo es viejo, pero quizás esto ayude a alguien, algún día.
El problema de por qué PHP dice "Permiso denegado" para mkdir () - ruta incorrecta de la url. Entonces, para solucionarlo, todo lo que necesita es obtener la ruta correcta. Lo hice de esta manera:
<?php
$root = filter_input(INPUT_SERVER, ''DOCUMENT_ROOT'');
$dir = $root . ''/somefolder/'';
$old = umask(0);
if( !is_dir($dir) ) {
mkdir($dir, 0755, true);
}
umask($old);
?>
Si usa LINUX, primero revisemos al usuario de Apache, ya que en algunas distribuciones puede ser diferente:
egrep -i ''^user|^group'' /etc/httpd/conf/httpd.conf
Digamos que el resultado es "http". Haga lo siguiente, simplemente recuerde cambiar path_to_folder a la ruta de las carpetas:
chown -R http:http path_to_folder
chmod -R g+rw path_to_folder
Tengo este problema hace un momento, mi mejor solución que puedo darte ahora (a pesar de que no incluiste ninguno de tus códigos) sería:
- Compruebe cómo nombra su carpeta de destino, por ejemplo: new_folder (a veces esto puede causar un error de permiso ya que la mayoría de los hosts no permiten nombres usando guiones bajos, guiones, etc. que se crearán en tiempo de ejecución). Funcionó para mí
Si estaba utilizando el comando recursivo para crear subcarpetas, no olvide poner 0755 (recuerde incluir 0 al inicio) en el comando mkdir, por ejemplo:
if(!file_exists($output)){ if (!mkdir($output, 0755, true)) {//0755 die(''Failed to create folders...''); } }
Esto también me ha funcionado en este momento.
comprobar si no es un problema con umask
if (!function_exists(''mkdir_r'')) {
/**
* create directory recursively
* @param $dirName
* @param int $rights
* @param string $dir_separator
* @return bool
*/
function mkdir_r($dirName, $rights = 0744, $dir_separator = DIRECTORY_SEPARATOR) {
$dirs = explode($dir_separator, $dirName);
$dir = '''';
$created = false;
foreach ($dirs as $part) {
$dir .= $part . $dir_separator;
if (!is_dir($dir) && strlen($dir) > 0) {
$created = mkdir($dir, $rights);
}
}
return $created;
}
}
if (!function_exists(''ensure_dir'')) {
/**
* ensure directory exist if not create
* @param $dir_path
* @param int $mode
* @param bool $use_mask
* @param int $mask
* @return bool
*/
function ensure_dir($dir_path, $mode = 0744, $use_mask = true, $mask = 0002) {
// set mask
$old_mask = $use_mask && $mask != null
? umask($mask)
: null;
try {
return is_dir($dir_path) || mkdir_r($dir_path, $mode);
} finally {
if ($use_mask && $old_mask != null) {
// restore original
umask($old_mask);
}
}
}
}