Я относительно новичок в настройке 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.
Двумя решениями этого являются:
Я часто считаю, что последний вариант лучше работает.