Предоставление PHP разрешения на запись в Apache - PullRequest
5 голосов
/ 19 марта 2011

Я относительно новичок в настройке Apache.

У меня есть скрипт PHP, который записывает JSON-файл на основе значений, извлеченных из $_GET.

<?php

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

    echo "Success";

?>

Я запускаю этот код, создавая запрос XHR.

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

На странице, которую он возвращает, написано 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>

Это права доступа к папке корневого сервера.

Что мне нужно изменить, чтобы позволить PHP писать файл?

(Я почти не знаю, что означает блок выше.)

Ответы [ 5 ]

13 голосов
/ 19 марта 2011

Вам необходимо проверить, есть ли у пользователя, под которым работает apache, разрешение на запись в каталог.

Вот так:

Ваш сервер Apache является процессом. Процесс выполняется под некоторым пользователем (скажем, www). PHP работает под Apache. Поэтому, если вы попытаетесь записать в каталог на PHP, это будет так же, как если бы пользователь www зашел на сервер и попытался создать файл в том же каталоге. Так что проверьте, кто является владельцем этого каталога и какое разрешение он имеет. Вы можете сделать это, например с помощью команды ls -la. Если www будет владельцем этого каталога, вы будете на 100% в безопасности ...

1 голос
/ 19 марта 2011

Вы можете попытаться установить разрешения с помощью

chmod функция для php и установите ваш каталог на / var / www, там у вас обычно достаточно прав.

0 голосов
/ 19 марта 2011

Знайте, что иногда нет абсолютно никакого способа обойти это, используя только PHP.

Два решения для этого:

  1. Настройте разрешения PHP и Apache вручную (предупреждение: может очень быстро испачкаться).
  2. Используйте FTP, чтобы изменить владельца на 0777 (полный доступ), а затем вернуться после выполнения изменений.

Я часто находил, что последний вариант работает лучше всего.

0 голосов
/ 19 марта 2011

Проверьте права доступа к файлу / каталогу, в которые он пытается записать. Убедитесь, что пользователь и / или группа могут записывать, что процесс Apache запущен как.

Также проверьте, включен ли SELinux, проверив содержимое / selinux / empce. Если это так, либо отключите его, либо убедитесь, что на пути, по которому вы пишете, установлены правильные метки.

0 голосов
/ 19 марта 2011

Проверьте разрешение файла в командной строке, используя:

ls -l /path/filename

Или через ваш FTP-клиент, если у вас есть FTP-доступ к файлу / dir.Если нет, вы можете изменить местоположение, как сказал Стони выше.

...