(PHP) fwrite не пишет, а перезаписывает

Я хочу открыть файл .xml и записать в него содержимое переменной $xml_doc. Проблема в том, что когда файл пустой, он отказывается записывать. Он пишет только тогда, когда уже есть какой-то текст (например, abc123). Я попытался изменить режим функции fopen на a, a +, w, w + и w, w + просто стирают содержимое файла, но ничего не записывают.

if ($telecharger) {
    // Creation du fichier
    $nom = "PRELEVEMENT";
    $filename= "/home/alc/alcg_si/alcgroup/intranet/documents/prelevement_xml/".$nom."__".$date_prev.".xml";
    try {
        $file = fopen($filename, 'r+') or die("Error: can't open file.");
        chmod($filename, 0777);

        fwrite($file, '$xml_doc') or die("Error: can\'t write in file.");
        fclose($file);
    } catch (Exception $e) {
        echo "MERDEEEE<br>";
        echo 'Caught exception: ',  $e->getMessage(), "\n";
    } 

Что такое '$xml_doc' ???

AbraCadaver 17.12.2018 22:46

Вы получаете сообщение об ошибке, используя опубликованный вами код?

Dave 17.12.2018 22:46

@AbraCadaver $ xml_doc - это просто контент. Даже если я изменю содержимое на «123abc», это не сработает.

Nguyen Doan Nhat 17.12.2018 22:57

@Dave Я получил сообщение «Ошибка: не могу записать в файл», которое я написал. Это даже не дошло до исключения.

Nguyen Doan Nhat 17.12.2018 22:58

Режим w, безусловно, должен работать, учитывая то, что вы нам показали. Что вы получите, если использовать режим w вместо r+?

Dave 17.12.2018 23:09

В режиме w я получаю пустой файл, все предварительно записанное содержимое стирается.

Nguyen Doan Nhat 17.12.2018 23:20

Избавьтесь от цитат вокруг $xml_doc. Переменные не заключаются в одинарные кавычки, только в двойные кавычки.

Barmar 17.12.2018 23:47

@Barmar не работает.

Nguyen Doan Nhat 17.12.2018 23:51

Что не работает? Это не было задумано как решение, это не связанная с этим проблема в вашем коде.

Barmar 17.12.2018 23:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
9
241
1

Ответы 1

Права доступа к файлу проверяются при открытии файла. Если права доступа к файлу не разрешают запись, вам необходимо вызвать chmod()до, вызывая fopen().

Вы также можете заменить весь код, вызывающий fopen, fwrite и fclose, одним вызовом file_put_contents().

И не помещайте переменную $xml_doc в одинарные кавычки, это не позволит расширить переменную. Он запишет буквальную строку $xml_doc в файл.

if ($telecharger) {
    // Creation du fichier
    $nom = "PRELEVEMENT";
    $filename= "/home/alc/alcg_si/alcgroup/intranet/documents/prelevement_xml/".$nom."__".$date_prev.".xml";
    try {
        if (file_exists($filename)) {
            chmod($filename, 0644) or die("Error: can't change file permissions");
        }
        file_put_contents($filename, $xml_doc) or die("Error: can\'t write in file.");
    } catch (Exception $e) {
        echo "MERDEEEE<br>";
        echo 'Caught exception: ',  $e->getMessage(), "\n";
    } 

Ради хорошего примера, я бы предпочел там 0664 вместо 0777!

miken32 17.12.2018 23:59

@Barmar Файл не был создан, поэтому он не мог изменить режим файла, в первую очередь Error: can't change file permissions.

Nguyen Doan Nhat 18.12.2018 11:25

Я добавил проверку, существует ли файл, прежде чем пытаться изменить разрешения. Кроме того, у вас есть разрешение на запись в каталог? В противном случае вы не сможете создать там новый файл.

Barmar 18.12.2018 17:42

@Barmar Разрешение каталога также 777.

Nguyen Doan Nhat 18.12.2018 18:16

У вас включен error_reporting(E_ALL);? Если какая-либо из функций выйдет из строя, должно появиться предупреждающее сообщение о том, что пошло не так.

Barmar 18.12.2018 18:33

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