[SOLUCIONADO] Warning: mkdir(): Permission denied

Iniciado por Riojas, Enero 03, 2019, 07:35:22 PM

Tema anterior - Siguiente tema

0 Miembros y 2 Visitantes están viendo este tema.

Enero 03, 2019, 07:35:22 PM Ultima modificación: Enero 04, 2019, 06:42:43 AM por HATI
Buenas gente, estoy siguiendo un tutorial de CRUD en PHP y tengo el siguiente codigo:
Código: php

$directorio = "vistas/img/usuarios".$_POST["nuevoUsuario"];

mkdir($directorio, 0755);

El cual me tira el siguiente error:
Warning: mkdir(): Permission denied in /opt/lampp/htdocs/pos/controladores/usuarios.controlador.php on line 65

Estoy en una MacBook Pro y entiendo que es por los permisos de las carpetas.
Como podria solucionarlo??
Gracias anticipadas y Saludos desde Mexico!!

Buenas tardes No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Simplemente pon en tu terminal lo siguiente:

chmod -R +777 /opt/lampp/htdocs/

Cuéntanos cómo te fue.

Un saludo.
Become the change you seek in the world. -Gandhi.


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Buenas tardes No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Simplemente pon en tu terminal lo siguiente:

chmod -R +777 /opt/lampp/htdocs/

Cuéntanos cómo te fue.

Un saludo.

Gracias bro, se soluciono pero puse esto:
Código: php
sudo chmod 777 /Users/riojas/.bitnami/stackman/machines/xampp/volumes/root/htdocs/

Ya que como tu me lo pusiste me decia
Código: php
chmod: Invalid file mode: +777

Saludos y de nuevo gracias!!

Enero 03, 2019, 09:55:49 PM #3 Ultima modificación: Enero 03, 2019, 09:57:39 PM por WHK
Hola, hay dos cosas acá que son importantes destacar, lo primero es que tienes claramente un problema de permisos de archivos y directorios de lo cual no te recomiendo dar un 777 porque estarás arriesgando la seguridad de tu equipo, a la carpeta donde se crearán. Según tu trozo de código dice:

Código: php
mkdir($directorio, 0755);


Intenta reemplazarlo por:

Código: php
mkdir($directorio, 0755, true);


Esto hará que haga los directorios que no existen, probablemente la ruta que le estás dando no existe, y si existe, quiere decir que apache se está ejecutando con permisis totalmente distintos al directorio public_html, o has creado directorios de manera manual y se han creado con permisos de autoría de tu usuario del sistema operativo cuando apache funciona con un usuario totalmente distinto.

Código: php
chmod -R +777 /opt/lampp/htdocs/


Si realmente quieres solucionar el problema de una manera muy rápida, basta con quitar el signo más y volverlo a intentar, pero el permiso 777 quiere decir que cualquier usuario dentro del sistema tendrá permisos para acceder, modificar y ejecutar archivos, esto quiere decir que alguien sin privilegios en tu pc (ya sea por un hackeo o un pariente que use prestado tu lap) tendrá acceso absoluto a ese directorio.

Lo normal primeramente es que el directorio solo tenga permisos para si mismo, esto quiere decir chmod 644, luego de eso debes decirle al sistema a que usuario le pertenece el archivo, para esto hay que darle un vistazo al directorio de lampp para saber que usuario está utilizando y para ello debes ingresar a tu terminal y ejecutar:

Código: php
ls -lah /opt/lampp/htdocs


Este te dirá quien es el propietario. Por ejemplo, si el usuario es lampp, entonces debes ejecutar un cambio de propietario de manera recursiva de esta manera:

Código: php
chown -r lampp:lampp /opt/lampp/htdocs/


Ahora, una ves que hayas solucionado tu problema actual debes asegurarte que no vuelva a suceder y para esto debes trabajar siempre manteniendo los permisos originales de cada archivo y directorio o corregirlos cada ves que haces un cambio. Si no tienes experiencia te recomiendo corregir los permisos en cada modificación, pero si tienes deseos de meter manos a tu sistema entonces debes modificar el archivo de configuración del apache y decirle que cambie los permisos de usuario al arrancar y que en ves de que se ejecute como lampp, que lo haga utilizando tu usuario principal del sistema, sino, también puedes agregar el grupo de lampp a tu usuario y eso se hace utilizando el comando usermod.

Acá te daré algunos enlaces para que investigues un poco más:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

En un futuro para prevenir estos engorrosos problemas, puedes hacer uso de un servidor virtual utilizando la aplicación llamada VirtualBox. Te recomiendo el uso de un Sistema Operativo acorde a tus proyectos, en este caso CentOS7 + httpd + mysql, de esta manera no ensuciarás tu sistema operativo principal. Acá algunos tutoriales:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Si tienes más dudas, puedes volver y preguntarnos nuevamente. Saludos.
- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta - No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Es totalmente cierto lo que puso @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, de hecho, podrías concederle permisos de www-data para que no tenga permisos de /bin/bash y que la aplicación se ejecute con los mismos. Cuando le das esos permisos(777 - que son prácticamente todos) cualquiera puede leer/ejecutar/modificar/ cualquier archivo desde ahí y por ende, es un hueco que tendrías(y grave).

Cuando te respondí, fue para solucionar rápidamente el problema pero @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta te ha dado una respuesta más acertada y cuidado con los permisos, ya que cualquiera de este tipo de cosas en un servidor, puede ocasionar más de un problema.


Un saludo. 
Become the change you seek in the world. -Gandhi.


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola, hay dos cosas acá que son importantes destacar, lo primero es que tienes claramente un problema de permisos de archivos y directorios de lo cual no te recomiendo dar un 777 porque estarás arriesgando la seguridad de tu equipo, a la carpeta donde se crearán. Según tu trozo de código dice:

Código: php
mkdir($directorio, 0755);


Intenta reemplazarlo por:

Código: php
mkdir($directorio, 0755, true);


Esto hará que haga los directorios que no existen, probablemente la ruta que le estás dando no existe, y si existe, quiere decir que apache se está ejecutando con permisis totalmente distintos al directorio public_html, o has creado directorios de manera manual y se han creado con permisos de autoría de tu usuario del sistema operativo cuando apache funciona con un usuario totalmente distinto.

Código: php
chmod -R +777 /opt/lampp/htdocs/


Si realmente quieres solucionar el problema de una manera muy rápida, basta con quitar el signo más y volverlo a intentar, pero el permiso 777 quiere decir que cualquier usuario dentro del sistema tendrá permisos para acceder, modificar y ejecutar archivos, esto quiere decir que alguien sin privilegios en tu pc (ya sea por un hackeo o un pariente que use prestado tu lap) tendrá acceso absoluto a ese directorio.

Lo normal primeramente es que el directorio solo tenga permisos para si mismo, esto quiere decir chmod 644, luego de eso debes decirle al sistema a que usuario le pertenece el archivo, para esto hay que darle un vistazo al directorio de lampp para saber que usuario está utilizando y para ello debes ingresar a tu terminal y ejecutar:

Código: php
ls -lah /opt/lampp/htdocs


Este te dirá quien es el propietario. Por ejemplo, si el usuario es lampp, entonces debes ejecutar un cambio de propietario de manera recursiva de esta manera:

Código: php
chown -r lampp:lampp /opt/lampp/htdocs/


Ahora, una ves que hayas solucionado tu problema actual debes asegurarte que no vuelva a suceder y para esto debes trabajar siempre manteniendo los permisos originales de cada archivo y directorio o corregirlos cada ves que haces un cambio. Si no tienes experiencia te recomiendo corregir los permisos en cada modificación, pero si tienes deseos de meter manos a tu sistema entonces debes modificar el archivo de configuración del apache y decirle que cambie los permisos de usuario al arrancar y que en ves de que se ejecute como lampp, que lo haga utilizando tu usuario principal del sistema, sino, también puedes agregar el grupo de lampp a tu usuario y eso se hace utilizando el comando usermod.

Acá te daré algunos enlaces para que investigues un poco más:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

En un futuro para prevenir estos engorrosos problemas, puedes hacer uso de un servidor virtual utilizando la aplicación llamada VirtualBox. Te recomiendo el uso de un Sistema Operativo acorde a tus proyectos, en este caso CentOS7 + httpd + mysql, de esta manera no ensuciarás tu sistema operativo principal. Acá algunos tutoriales:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Si tienes más dudas, puedes volver y preguntarnos nuevamente. Saludos.

Lo hice así como comentas para evitar  problemas y funciona
Muchas gracias por los consejos!!