File_put_contents и новая строка

У меня есть файл, который я пишу, и я не могу заставить file_put_contents добавлять следующую запись в новую строку, даже после символа новой строки. Что мне не хватает? Я нахожусь на машине с Windows.

$file = 'test.txt';
$message = "test\n\n";
file_put_contents($file, $message, FILE_APPEND);
6 ответов

как вы просматриваете содержимое $file? если вы используете блокнот, вы не можете видеть \n.


попробовать

$file = 'test.txt';
$message = "test".PHP_EOL;
file_put_contents($file, $message, FILE_APPEND);

или

$file = 'test.txt';
$message = "test\r\n";
file_put_contents($file, $message, FILE_APPEND);


Для PHP_EOL вы можете не видеть свою новую строку, потому что вы определяете конец строки после написания новой строки. Поэтому новая строка создается только после добавления нового содержимого в последнюю строку вашего текстового файла.

он должен выглядеть следующим образом:

$file = 'test.txt';
$message = 'some message that should appear on the last line of test.txt';
file_put_contents($file, PHP_EOL . $message, FILE_APPEND);


Просто дайте нормальную новую строку, и она работает

$file = 'test.txt';
$message = "test
";
file_put_contents($file, $message, FILE_APPEND);


Для тех, кто передает второй аргумент file_put_contents как массив, а не строку, он также работает, чтобы поставить PHP_EOL в качестве последнего элемента массива:

file_put_contents($file, array('value 1', 'value 2', PHP_EOL), FILE_APPEND);


Сначала прочитайте что-нибудь о символе новой строки. Для каждой операционной системы это различно... Есть LF, CR, CR + LF... Посмотрите здесь

В Windows вам понадобится CR + LF (\r\n), как уже сказал Матье. В Linux требуется только LF (\n)

Но, конечно, используйте PHP_EOL.

При использовании файлов вам, вероятно, нужно будет узнать больше о разделителях путей и каталогов. Они также разные. Используйте DIRECTORY_SEPARATOR вместо прямой косой черты или обратной косой черты;)

licensed under cc by-sa 3.0 with attribution.