Apache не позволяет PHP создавать файлы

Я пытаюсь сохранить данные, используя HTML и PHP в localhost в Ubuntu. Мои файлы HTML и PHP работают отлично, но когда я использую команды для открытия файла на локальном хосте с помощью

$myfile = fopen("testfile.txt", "w")

, он не позволяет ему его создать, но файл PHP работает и когда установлен с Команды для вывода переменных из PHP это хорошо работает.

Как разрешить PHP создавать файлы в Apache в localhost Ubuntu.

2
задан 31 May 2015 в 23:05

4 ответа

Необходимо позволить пользователю Apache (обычно www-data) создавать файлы в том каталоге. Это может быть выполнено путем создания Apache владельцем каталога, например, если бы каталог назвали my-dir, то Вы открыли бы терминал и выполнили бы это:

sudo chown www-data my-dir
4
ответ дан 1 June 2015 в 09:05
  • 1
    Только для добавления этот определенный CVE еще не был зафиксирован ни в каких выпусках, таким образом обновив до 16,04 won' t помогают в этом случае. – gQuigs 12 August 2016 в 03:07

как указано на Странице Значения по умолчанию Apache2 Ubuntu: По умолчанию, Ubuntu не предоставляет доступ через веб-браузер ни в какой файл независимо расположенных в/var/www... . Это означает, что любой каталог или файл, в который Вы хотите записать, должны находиться под/var/www. Пропущенный эта информация самостоятельно и получила мои волосы, вытягивающие некоторое время пытающийся записать в/tmp и т.д.

0
ответ дан 4 October 2019 в 16:04

Если Вы хотите изменить все папки, и файлы в рамках того каталога и не только каталога, добавляют-R как так

sudo chown -R www-data my-dir
1
ответ дан 2 December 2019 в 01:59

Если вы создаете файл на лету , и вы не хотите сохранять его на сервере , а вместо этого загрузите его на клиентский компьютер после запуска действия со стороны клиента, например как нажатие кнопки пользователем веб-браузера , вы можете написать код 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 (, как предлагается в предыдущих ответах здесь и других связанных вопросах в Интернете ), чтобы разрешить запись файлов в папку, из которой обслуживаются их серверные веб-страницы. Я почти уверен, что им было бы непросто согласиться, но, к счастью, приведенный выше код сработал для меня.

-1
ответ дан 1 May 2020 в 18:21

Другие вопросы по тегам:

Похожие вопросы: