Apache не позволяет PHP создавать файлы
Я пытаюсь сохранить данные, используя HTML и PHP в localhost в Ubuntu. Мои файлы HTML и PHP работают отлично, но когда я использую команды для открытия файла на локальном хосте, используя
$myfile = fopen("testfile.txt", "w")
он не позволяет создавать его, но PHP-файл работает, и когда он установлен с помощью команд для вывода переменных из PHP, он работает хорошо.
Как разрешить PHP создавать файлы в Apache в localhost Ubuntu.
3 ответа
Вы должны разрешить пользователю Apache (обычно www-data
) для создания файлов в этом каталоге. Это можно сделать, сделав Apache владельцем каталога, например, если каталог был вызван my-dir
, вы бы открыли терминал и запустили это:
sudo chown www-data my-dir
Как указано на странице Apache2 Ubuntu по умолчанию: Ubuntu по умолчанию не разрешает доступ через веб-браузер к какому-либо файлу, кроме тех, которые находятся в /var/www .... Это означает, что любой каталог или файл, в который вы хотите записать, должен находиться в /var/www . Я сам пропустил эту информацию и на некоторое время потянул меня за волосы, пытаясь писать в / tmp и т. Д.
Если вы хотите изменить все папки и файлы в этом каталоге, а не только каталог, добавьте -R, например, так
sudo chown -R www-data my-dir
Если вы создаете файл на лету и не хотите сохранять его на сервере, а вместо этого загружаете его на клиентский компьютер после того, как действие запускается со стороны клиента, например, как нажатие кнопки из пользовательского веб-браузера, вы можете написать Код PHP следующим образом:
<?php
$dataToWriteToFile = "This Text has been saved in this Text File and Downloaded for you to View !";
$fileName = "TxtFilename.txt";
$file = fopen($fileName,"wb");
fwrite($file, $dataToWriteToFile);
fclose($file);
header('Content-Type: charset=utf-8');
header("Content-disposition: attachment; filename=$fileName");
print $dataToWriteToFile;
?>
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: это не сработает для тех, кто намеревается записать файл на сервер для архивирования, но для всех, кто создает файл на лету с целью заставить своих клиентов-пользователей загружать его в свои веб-браузеры, этого может быть достаточно для этой цели.
Я собирался поговорить со своим клиентом, чтобы попросить их разрешить пользователю Apache добавить дополнительные права пользователю Apache (как предлагается в предыдущих ответах здесь и других связанных вопросах в Интернете), чтобы разрешить запись файлов в папку, где их сервер веб страницы обслуживаются из. Я почти уверен, что им было бы непросто согласиться, но, к счастью, приведенный выше код сработал для меня.