Я хочу открыть файл .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";
}
Вы получаете сообщение об ошибке, используя опубликованный вами код?
@AbraCadaver $ xml_doc - это просто контент. Даже если я изменю содержимое на «123abc», это не сработает.
@Dave Я получил сообщение «Ошибка: не могу записать в файл», которое я написал. Это даже не дошло до исключения.
Режим w
, безусловно, должен работать, учитывая то, что вы нам показали. Что вы получите, если использовать режим w
вместо r+
?
В режиме w я получаю пустой файл, все предварительно записанное содержимое стирается.
Избавьтесь от цитат вокруг $xml_doc
. Переменные не заключаются в одинарные кавычки, только в двойные кавычки.
@Barmar не работает.
Что не работает? Это не было задумано как решение, это не связанная с этим проблема в вашем коде.
Права доступа к файлу проверяются при открытии файла. Если права доступа к файлу не разрешают запись, вам необходимо вызвать 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
!
@Barmar Файл не был создан, поэтому он не мог изменить режим файла, в первую очередь Error: can't change file permissions
.
Я добавил проверку, существует ли файл, прежде чем пытаться изменить разрешения. Кроме того, у вас есть разрешение на запись в каталог? В противном случае вы не сможете создать там новый файл.
@Barmar Разрешение каталога также 777.
У вас включен error_reporting(E_ALL);
? Если какая-либо из функций выйдет из строя, должно появиться предупреждающее сообщение о том, что пошло не так.
Что такое
'$xml_doc'
???