работает - php дописать в файл




file_put_contents не создает файл txt (4)

Вероятно, ваша проблема связана с тем, что apache не имеет прав на запись в указанное вами местоположение файла. Перейдите в этот каталог и проверьте разрешения и групповое владение с помощью команды ls :

cd "My working file location"
ls -l .

На выходе есть три столбца, которые показывают разрешения, владельца и группу для каталога. Скорее всего, они принадлежат root и не имеют разрешений для apache для записи в каталог.

Если это так, вы увидите, что в вашем Apache-журнале появляется ошибка, когда он пытается создать файл. Попробуйте закрыть свои журналы при запуске скрипта в вашем браузере:

tail -f /var/log/apache2/error.log

В настоящее время у меня есть php-скрипт, который запускается, когда браузер браузера просматривает веб-страницу. То, что я пытаюсь сделать, это написать текстовый файл при запуске скрипта, в котором хранится переменная. Владелец папки - apache, но каждый читает запись, строго для целей тестирования. (Я думал, что это может быть проблема с разрешениями) SELINUX включен на сервере, и когда я запускаю скрипт с консоли, он создает текстовый файл просто отлично и находится в правильном каталоге.

file_put_contents("My working file location", $myString);

Я использую эту строку, чтобы попытаться написать и создать текстовый файл, я знаю, что мое местоположение файла работает, потому что я могу запустить его и создать в автономном режиме, IE запускает его через консоль. Проблема в том, что переменная, которую я пытаюсь написать, заполняется через HTTP Post, и когда я запускаю скрипт через браузер или когда apache запускает скрипт, он не пишет и не создает файл. Что мне нужно сделать, чтобы разрешить доступ к написанию / изменению синтаксиса, чтобы этот скрипт написал этот текстовый файл?


Вы пробовали chmodding в каталоге до 777 ?

Попробуй это:

if(file_put_contents('file.txt', 'text')){
    die('yes');
} else {
    die('no');
}

Возможно, что-то написано неправильно. ^


Я уверен, что если мое решение действительно ясно, но это сработало:

cd /mydir/
setsebool -P allow_httpd_anon_write true 

С наилучшими пожеланиями


Я столкнулся с этой проблемой. В моем случае я обнаружил, что право собственности на каталог было неправильным. Для типичной установки Apache каталог должен принадлежать www-data: www-data, а не root: root.





selinux