Estoy tratando de crear un directorio con la función mkdir PHP, pero me da un error de la siguiente manera: Warning: mkdir() [function.mkdir]: Permission denied in .... ¿Cómo solucionar el problema?
Sé que este es un hilo antiguo, pero necesita una mejor respuesta. No debería necesitar establecer los permisos en 777, ese es un problema de seguridad ya que brinda 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 del usuario de Apache. En Ubuntu es el grupo de datos www y el usuario
chown -R www-data:www-data /path/to/webserver/www
Luego habilitó a todos los miembros del grupo www-data para leer y escribir archivos
chmod -R g+rw /path/to/webserver/www
La mkdir()función php ahora debería funcionar sin devolver errores
Apache necesita permiso para escribir cosas como caché y registros ... es solo una cuestión de ajuste.
Manatax
@simpleengine Hola, me di cuenta de tu respuesta ... Estoy enfrentando el mismo problema con un proyecto que estoy tratando de crear en CodeIgnter y que estoy desarrollando en Ubuntu 14.14 Lts ... ¿Podrías explicarme más detenidamente los pasos que necesito para hacer para corregir este error ??? Para brindarle información adicional: la ruta absoluta es /opt/lampp/htdocs/www/my-app/public/uploads... Básicamente, lo que estoy tratando de hacer es que cada usuario que haya iniciado sesión cargue archivos dentro de la carpeta de cargas y también cree carpetas de álbumes (esto se hará con php) para almacenar fotos ..
ltdev
5
No me gustan los usuarios que siguen diciendo "es inseguro" sin mostrar la forma segura de hacerlo.
che-azeh
38
Respuesta tardía para las personas que encuentren esto a través de Google en el futuro. Tuve el mismo problema.
NOTA: ESTOY EN MAC OSX LION
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 NO hay funciones del sistema de archivos que funcionen a través de php.
Como arreglar:
Abra una ventana del buscador y en la barra de menú, elija Ir> Ir a carpeta> / private / 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 formulario de terminal:
sudo apachectl -k restart
Si aún no funciona, 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)
Esta solución funciona, pero permite que Apache cause estragos en su sistema si alguien consigue que ejecute código malicioso (por ejemplo, a través del exploit Shellshock). Una alternativa sería dejar Apache ejecutándose como _wwwy crear un grupo para usted y Apache. Haga un nuevo grupo, diga llamado trusted, y colóquese _wwwen él. Luego, confíe en el propietario del grupo de todos los archivos en el directorio de documentos de su servidor. Finalmente, haga lo chmod g+rwxque sea necesario solo en los archivos a los que Apache necesita acceder, de modo que el trustedgrupo tenga permiso para editar los archivos.
Chris Middleton
3
simplemente repicando para volver a enfatizar que esta respuesta es una mala idea. Hay muchas muy buenas razones por las que los procesos de Apache son propiedad de sus propios usuarios con fines especiales.
danyamachine
15
No configure los permisos en 777 cuando use mkdir en PHP
Las respuestas de solo enlace no se consideran una buena práctica en StackOverflow, pero los consejos que se dan aquí generalmente NO deben seguirse.
Deje de sugerir el uso de 777. Está haciendo que todos puedan escribir en su archivo, lo que significa que perderá toda la seguridad para la que fue diseñado 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.
Acabo de resolver el problema en la pregunta original cambiando los permisos de archivo a 755 de forma recursiva, usando Filezilla. Haga clic derecho en la carpeta principal, asumiendo que es algún tipo de carpeta de repositorio de archivos general en la que está bien establecer 755 permisos, luego Atributos de archivo -> Valor numérico -> 755, luego marque "Recurrir a subdirectorios". Tarda un par de minutos en propagarse a través de los subdirectorios si tiene muchos archivos. Vuelva a intentarlo.
TARKUS
7
Sé que este hilo es antiguo, pero quizás esto ayude a alguien, algún día.
El problema por el que PHP dice "Permiso denegado" para mkdir () - ruta URL incorrecta. Entonces, para solucionarlo, todo lo que necesita es obtener la ruta correcta. Lo hice de esta manera:
Me pasó al transferirme a un nuevo host (que tiene mysqlnd lol). Olvidé cambiar a la nueva ruta completa del directorio de inicio. Resulta que en realidad no fue un problema de permisos.
JSG
2
Debe 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 solución rápida, puede hacer: sudo chmod 777 my_parent_dir
chmod 0777le dará acceso de lectura y escritura al mundo! No deberías aconsejar algo así. Sin embargo, el consejo con el grupo de usuarios es actualmente el mejor aquí :)
KingCrunch
1
Si el mundo tiene acceso al sistema operativo, seguro. La mejor manera sería: sudo chown www-data: www-data my_parent_dir
Jon Skarpeteig
O deje los permisos solo y agregue www-data al grupo del directorio principal.
Marc B
0
La otra cosa que puede hacer es ir a: / etc / sudoers
Añada la siguiente línea que le da permiso a ese usuario www-data ALL = (ALL: ALL) ALL ¿Por qué www-data? esto se debe a que apache se ejecuta con este nombre de usuario.
En caso de que su usuario sea diferente, pruebe el nombre de usuario TODOS = (TODOS: TODOS) TODOS
no edite sudoersdirectamente, inicie sesión como root y use el visudocomando te : que verifica cualquier cambio para evitar ediciones defectuosas, que pueden causar errores de análisis cuando se carga el archivo sudoers, lo que puede dejarlo impotente (como en cambiar algo)
Elias Van Ootegem
Cómo encontrar el nombre de usuario. como www-data? Estoy usando nginx pero no trabajo
robspin
1
@robspin prueba esto: ps aux | egrep '(nginx)'
maxwells
0
Ya que está en una Mac, puede agregarse al grupo _www (el grupo de usuarios de Apache) en su Mac:
sudo dseditgroup -o edit -a $USER -t user _www
y agregue _www user al grupo de la rueda que parece ser lo que la mac crea archivos como:
Tengo este problema en este momento, mi mejor solución que puedo darte ahora mismo (a pesar de que no incluiste ninguno de tu código) sería:
Verifique 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 que se creen nombres con guión bajo, guión, etc. en tiempo de ejecución). Funcionó para mí.
Si estaba utilizando un comando recursivo para crear subcarpetas, no olvide poner 0755 (recuerde incluir 0 al principio) en el comando mkdir, por ejemplo:
if(!file_exists($output)){if(!mkdir($output,0755,true)){//0755die('Failed to create folders...');}}
Después de instalar el servidor ftp sudo apt-get install vsftpd, tendrá que configurarlo. Para habilitar el acceso de escritura, debe editar el /etc/vsftpd.confarchivo y descomentar el
#write_enable=YES
línea, por lo que debería leer
write_enable=YES
Guarde el archivo y reinicie vsftpdcon sudo service vsftpd restart.
Respuestas:
Sé que este es un hilo antiguo, pero necesita una mejor respuesta. No debería necesitar establecer los permisos en 777, ese es un problema de seguridad ya que brinda 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 del usuario de Apache. En Ubuntu es el grupo de datos www y el usuario
chown -R www-data:www-data /path/to/webserver/www
Luego habilitó a todos los miembros del grupo www-data para leer y escribir archivos
chmod -R g+rw /path/to/webserver/www
La
mkdir()
función php ahora debería funcionar sin devolver erroresfuente
/opt/lampp/htdocs/www/my-app/public/uploads
... Básicamente, lo que estoy tratando de hacer es que cada usuario que haya iniciado sesión cargue archivos dentro de la carpeta de cargas y también cree carpetas de álbumes (esto se hará con php) para almacenar fotos ..Respuesta tardía para las personas que encuentren esto a través de Google en el futuro. Tuve el mismo problema.
NOTA: ESTOY EN MAC OSX LION
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 NO hay funciones del sistema de archivos que funcionen a través de php.
Como arreglar:
Abra una ventana del buscador y en la barra de menú, elija Ir> Ir a carpeta> / private / etc / apache2
ahora abre httpd.conf
encontrar:
cambiar el nombre de usuario:
Ahora reinicie Apache ejecutando este formulario de terminal:
Si aún no funciona, 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)
fuente
_www
y crear un grupo para usted y Apache. Haga un nuevo grupo, diga llamadotrusted
, y colóquese_www
en él. Luego, confíe en el propietario del grupo de todos los archivos en el directorio de documentos de su servidor. Finalmente, haga lochmod g+rwx
que sea necesario solo en los archivos a los que Apache necesita acceder, de modo que eltrusted
grupo tenga permiso para editar los archivos.No configure los permisos en 777 cuando use mkdir en PHP
Las respuestas de solo enlace no se consideran una buena práctica en StackOverflow, pero los consejos que se dan aquí generalmente NO deben seguirse.
Me gustaría volver a esta gran respuesta sobre una pregunta similar . Yo cito:
fuente
Fijar los permisos del directorio intenta crear un directorio en .
fuente
Sé que este hilo es antiguo, pero quizás esto ayude a alguien, algún día.
El problema por el que PHP dice "Permiso denegado" para mkdir () - ruta URL incorrecta. Entonces, para solucionarlo, todo lo que necesita es obtener la ruta correcta. Lo hice de esta manera:
fuente
Debe 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 solución rápida, puede hacer: sudo chmod 777 my_parent_dir
fuente
chmod 0777
le dará acceso de lectura y escritura al mundo! No deberías aconsejar algo así. Sin embargo, el consejo con el grupo de usuarios es actualmente el mejor aquí :)La otra cosa que puede hacer es ir a: / etc / sudoers
Añada la siguiente línea que le da permiso a ese usuario www-data ALL = (ALL: ALL) ALL ¿Por qué www-data? esto se debe a que apache se ejecuta con este nombre de usuario.
En caso de que su usuario sea diferente, pruebe el nombre de usuario TODOS = (TODOS: TODOS) TODOS
Esto funcionó para mí.
fuente
sudoers
directamente, inicie sesión como root y use elvisudo
comando te : que verifica cualquier cambio para evitar ediciones defectuosas, que pueden causar errores de análisis cuando se carga el archivo sudoers, lo que puede dejarlo impotente (como en cambiar algo)Ya que está en una Mac, puede agregarse al grupo _www (el grupo de usuarios de Apache) en su Mac:
y agregue _www user al grupo de la rueda que parece ser lo que la mac crea archivos como:
fuente
Tengo este problema en este momento, mi mejor solución que puedo darte ahora mismo (a pesar de que no incluiste ninguno de tu código) sería:
Si estaba utilizando un comando recursivo para crear subcarpetas, no olvide poner 0755 (recuerde incluir 0 al principio) en el comando mkdir, por ejemplo:
Esto también me funcionó en este momento.
fuente
Si está usando LINUX, primero verifiquemos al usuario de apache, ya que en algunas distribuciones puede ser diferente:
Digamos que el resultado es "http". Haga lo siguiente, solo recuerde cambiar path_to_folder a la ruta de las carpetas:
fuente
compruebe si no es un problema con umask
fuente
Después de instalar el servidor ftp
sudo apt-get install vsftpd
, tendrá que configurarlo. Para habilitar el acceso de escritura, debe editar el/etc/vsftpd.conf
archivo y descomentar ellínea, por lo que debería leer
Guarde el archivo y reinicie
vsftpd
consudo service vsftpd restart
.Para otras opciones de configuración, consulte esta documentación o
man vsftpd.conf
fuente
Este error ocurre si está utilizando la ruta incorrecta.
Por ejemplo:
Estoy usando el sistema ubuntu y el nombre de la carpeta de mi proyecto es 'myproject'
Supongamos que tengo el directorio myproject / public / report y quiero crear una nueva carpeta llamada orders
Entonces necesito un camino completo donde existe mi proyecto. Puede obtener la ruta mediante el comando PWD
Entonces mi ruta raíz será = '/ home / htdocs / myproject /'
$ dir = '/ home / htdocs / myproject / public / report / Orders';
¡Funcionará para ti! Disfruta !!
fuente