Pregunta Permiso file_put_contents denegado


Estoy intentando escribir una consulta en un archivo para la depuración. El archivo está en database/execute.php. El archivo en el que quiero escribir es database/queries.php.

Estoy tratando de usar file_put_contents('queries.txt', $query)

Pero estoy recibiendo

file_put_contents (queries.txt) [function.file-put-contents]:   no se pudo abrir la secuencia: Permiso   negado

Tengo queries.txt archivo chmod'd a 777, ¿cuál podría ser el problema?


74
2018-02-07 03:14


origen


Respuestas:


Intenta ajustar los permisos del directorio.

desde una terminal, ejecuta chmod 777 database (desde el directorio que contiene la carpeta de la base de datos)

apache y nadie tendrá acceso a este directorio si se ha modificado correctamente.

La otra cosa que hacer es repetir "getcwd ()". Esto le mostrará el directorio actual, y si esto no es '/ something.database /', necesitará cambiar 'query.txt' a la ruta completa de su servidor.


62
2018-02-07 04:09



La otra opción

es que puedes hacer Apache (www-data), el dueño de la carpeta

sudo chown -R www-data:www-data /var/www

eso debería hacer file_put_contents trabaja ahora. Pero para mayor seguridad, mejor también configura los permisos como a continuación

find /var/www -type d -print0 | xargs -0 chmod 0755 # folder
find /var/www -type f -print0 | xargs -0 chmod 0644 # files
  • cambio /var/www a la carpeta raíz de tus archivos php

8
2018-05-23 14:42



Tenga en cuenta que esto ya es bastante viejo, pero no es necesario escribir consultas manualmente en un archivo como este. MySQL tiene soporte de registro incorporado, solo necesita habilitarlo dentro de su entorno de desarrollo.

Eche un vistazo a la documentación para el 'registro general de consultas':

http://dev.mysql.com/doc/refman/5.1/en/query-log.html


7
2018-03-17 12:41



Chicos, tuve este problema por 1 mes e hice todo pero no pude solucionarlo, pero ahora sé la solución.

Utilizo un alojamiento compartido de Linux, cuando mi administrador cambió el php a 5.3. Obtuve muchos errores para el código "file_put_contents". intenta probar mi plan:

En su host, cree un archivo como mytest.php, y coloque este código y guárdelo:

<?php        mail('Your-EMail','Email-Title','Email-Message');        ?>

Abra la URL "www.your-domain.com/mytest.php" una vez y luego revise su correo electrónico. debe recibir un correo electrónico de su anfitrión con la información que ingresó en mytest.php, verifique el nombre del remitente. si es de Nadie tiene un problema sobre "Permiso denegado" porque algo no está definido y si el nombre del remitente es como mi id: iietj8qy@hostname5.netly.net no tiene problema.

Mi administrador cambió el servidor e instaló el host nuevamente. Creo que el problema se resolvió, le digo a la administración de su servidor lo que le dije y quizás encuentren la respuesta.

Espero que te ayude!


3
2018-02-06 15:57



Sé que es una pregunta muy antigua, pero quería agregar la buena solución con algunas explicaciones en profundidad. Tendrás que ejecutar dos instrucciones en Ubuntu como sistemas y luego funciona como un encanto.

Los permisos en Linux se pueden representar con tres dígitos. El primer dígito define el permiso del propietario de los archivos. El segundo dígito los permisos de un grupo específico de usuarios. El tercer dígito define los permisos para todos los usuarios que no son el propietario ni miembro del grupo.

Se supone que el servidor web debe ejecutar con una identificación que sea miembro del grupo. El servidor web nunca debe ejecutarse con la misma identificación que el propietario de los archivos y directorios. En Ubuntu ejecuta apache bajo el id www-data. Esa identificación debe ser un miembro del grupo para el que se especifican los permisos.

Para dar al directorio en el que desea cambiar el contenido de los archivos los derechos adecuados, ejecute la instrucción:

find %DIR% -type d -exec chmod 770 {} \;

. Eso implicaría en la pregunta del OP que los permisos para el directorio% ROOT% / database deberían cambiarse en consecuencia. Por eso es importante no tener archivos dentro de ese directorio que nunca deberían cambiarse o eliminarse. Por lo tanto, es una buena práctica crear un directorio separado para los archivos cuyo contenido debe modificarse.

Leer los permisos (4) para un directorio significa poder recopilar todos los archivos y directorios con sus metadatos dentro de un directorio. Los permisos de escritura (2) dan el permiso para cambiar el contenido del directorio. Implica agregar y eliminar archivos, cambiar permisos, etc. Permiso de ejecución (1) significa que tiene derecho a acceder a ese directorio. Sin este último es imposible profundizar en el directorio. El servidor web necesita permisos de lectura, escritura y ejecución cuando se debe cambiar el contenido de un archivo. Por lo tanto, necesita el grupo el dígito 7.

La segunda declaración está en la pregunta del PO:

find %DOCUMENT_ROOT%/database -type f -exec chmod 760 {} \;

Es posible leer y escribir un documento, pero no es necesario para ejecutar el archivo. El 7 se le da al propietario de los archivos, el 6 al grupo. El servidor web no necesita tener el permiso para ejecutar el archivo para cambiar su contenido. Esos permisos de escritura solo se deben dar a los archivos en ese directorio.

No se debe dar ningún permiso a todos los demás usuarios.

Para los directorios que no requieren cambiar sus archivos son suficientes los permisos de grupo de 5. Documentación sobre permisos y algunos ejemplos:

https://wiki.debian.org/Permissions

https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions

http://www.linux.org/threads/file-permissions-chmod.4094/


3
2017-12-21 18:30



Recopilación de información de este enlace Stackoverflow-image save no funciona con chmod 777 y del usuario azerafati y Loek Bergman

si buscara en el archivo / etc / apache / envvars, verá algo como:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Apache se ejecuta con el nombre de usuario 'www-data'

'0755' significa que el propietario del archivo puede leer / escribir / ejecutar, pero el grupo y otros usuarios no pueden escribir. entonces en tu terminal, cd a la carpeta que contiene tu carpeta 'images'. luego escribe:

find images -type d -exec chmod 0755 {} \;
find images -type f -exec chmod 0755 {} \;
sudo chown -R www-data:www-data images

debe cambiar las persianas primero antes de cambiar de propietario. Introduzca su contraseña cuando se le solicite. esto hará que el propietario de 'www-data' de la carpeta de imágenes.

su carga ahora debería funcionar


2
2017-07-14 10:29



Para cualquiera que use Ubuntu y reciba este error al cargar la página localmente, pero no en un servicio de alojamiento web,

Acabo de arreglar esto abriendo nautilus (sudo nautilus) y haga clic derecho en el archivo que está tratando de abrir, haga clic en Propiedades> Configuración> y escriba "todos los demás"


0
2017-10-20 00:19



tuvo el mismo problema; mi problema fue que selinux se estableció para hacer cumplir.

Seguí obteniendo el error "No se pudo abrir la secuencia: Permiso denegado" incluso después de responder al 777 y asegurarse de que todas las carpetas principales tenían permisos de ejecución para el usuario de apache. Resulta que mi problema era que se implementó selinux (estoy en centos7), esto es un devbox, así que lo apagué.


0
2018-03-13 17:58



Hay 2 formas de resolver estos problemas
1. uso chmod 777 path-to-your-directory.
si no funciona, entonces
2. simplemente proporcione la ruta completa de su archivo query.txt.


-2
2018-01-12 05:47



Aquí la solución. Para copiar un img de una URL. esta URL: http://url/img.jpg

$image_Url=file_get_contents('http://url/img.jpg');

crea el camino deseado termina el nombre con .jpg

$file_destino_path="imagenes/my_image.jpg";

file_put_contents($file_destino_path, $image_Url)

-3
2018-06-20 02:33



Además, como se dijo en file_put_contents man page en php.net, tenga cuidado con los problemas de nombres.

file_put_contents($dir."/file.txt", "hello");

puede no funcionar (aunque es correcto en sintaxis), pero

file_put_contents("$dir/file.txt", "hello");

trabajos. Experimenté esto en diferentes servidores instalados de php.


-10
2017-11-17 06:33