2011-03-18 12 views
5

Soy relativamente nuevo en la configuración de Apache.Dar permiso de escritura de PHP en Apache

Tengo un script PHP que escribe un archivo JSON basado en valores recuperados de $_GET.

<?php 

    file_put_contents('State.json', "{ do: '" . $_GET['do'] . "' }"); 

    echo "Success"; 

?> 

Ejecuto ese código creando una solicitud XHR.

Ally.xhr('/Cream/Foam?do=someCommand'); 

La página que devuelve dice failed to open stream: Permission denied on line 3.

<Directory "~/Dropbox/Web"> 
    Options Indexes FollowSymLinks MultiViews 

    AllowOverride None 

    Order allow,deny 
    Allow from all 
</Directory> 

Esos son los permisos otorgados a la carpeta del servidor raíz.

¿Qué debo cambiar para permitir que PHP escriba el archivo?

(tengo casi ni idea de lo que el bloque por encima de los medios.)

+0

¿Qué pasa con los permisos chmod del archivo/directorio al que está escribiendo? – Kit

+0

No es una buena idea colocar una carpeta web en la carpeta raíz. Ponlo en/var/www/como los otros archivos. Ahí no tienes problemas con los derechos. – Stony

+0

..chmod? No tengo idea de qué es eso. Tal vez eso es lo que me estoy perdiendo. – Kayla

Respuesta

13

Es necesario comprobar si el usuario con la que se ejecuta Apache tiene permiso para escribir en el directorio.

así que es como esto:

Su servidor Apache es proceso. El proceso se ejecuta bajo un usuario (por ejemplo, www). El PHP se ejecuta bajo apache. Por lo tanto, si intenta escribir en un directorio en PHP, es lo mismo que si el usuario www inicia sesión en el servidor e intenta crear un archivo en el mismo directorio. Por lo tanto, compruebe quién es el propietario de ese directorio y qué permiso tiene. Puedes hacerlo, por ej. a través del comando ls -la. Si www habrá propietario del mismo, que será 100% segura ...

+0

Se ejecuta con el valor predeterminado _www. Entonces, si le doy permiso, ¿debería funcionar? – Kayla

+0

Una vez, actualizaré la respuesta –

+2

chown www-data: www-data ~/Dropbox/Web y chmod 777 ~/Dropbox/Web – Stony

1

Usted puede tratar de establecer los permisos con

chmod función de php y establezca el directorio/var/www ahí lo tienen normalmente suficientes permisos.

0

Comprobar el permiso de archivo, ya sea en la línea de comandos usando:

ls -l /path/filename 

O a través de su cliente FTP si tiene acceso ftp para el archivo/dir. Si no, puedes cambiar la ubicación como Stony dijo anteriormente.

0

Compruebe los permisos de archivo/directorio que está intentando escribir. Asegúrese de que el usuario y/o grupo con el que se está ejecutando el proceso Apache pueda escribir.

También verifique si SELinux está habilitado al verificar los contenidos de/selinux/enforce. Si es así, deshabilítelo o asegúrese de que las etiquetas adecuadas estén establecidas en la ruta en la que está escribiendo.

0

Tenga en cuenta que a veces no hay absolutamente ninguna forma de evitar esto usando solo PHP.

Las dos soluciones a este son:

  1. Configurar PHP y Apache permisos manualmente (advertencia: puede ensuciarse muy rápidamente).
  2. Use FTP para cambiar la propiedad a 0777 (acceso completo) y luego revierta después de ejecutar los cambios.

A menudo he encontrado que la última opción funciona mejor.

Cuestiones relacionadas