Intereting Posts
Laravel 4 Аутентификация не работает с субдоменами Форма HTML не меняет URL как ожидалось phpMyAdmin «Невозможно загрузить или сохранить конфигурацию» Делает ini_set ('session.save_path', 'custom path'); Эффект уборщика мусора? PHP. Неверные данные POST отправляются через форму после эха? php / ajax REMOTE_ADDR установлен на IP-адрес фиктивного сетевого адаптера Не удается получить предыдущий месяц из DateTime в PHP. Является ли это (довольно большой) ошибкой? Phalcon PhP – как изменить вид динамически Печатать файлы, которые не доступны из www-root? Laravel RoleMiddleware, роль класса не найдена Как я могу пригласить людей из MSN, Yahoo в мое приложение? Как я могу сказать PHP, чтобы давать исключение в качестве исходного текста вместо HTML? Попытка проверить, существует ли уже письмо с таким же значением SQL-дизайн и / или класс PHP для хранения динамических двумерных массивов? Как получить информацию о группе вместе с деталями участников и общими друзьями (присутствующими в группе)

Предоставление разрешения на запись PHP в Apache

Я относительно новичок в настройке 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 мог писать файл?

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

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

Так вот так:

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

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

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

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

 ls -l /path/filename 

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

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

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

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

Двумя решениями этого являются:

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

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