file_put_contents, file_append и разрывы строк

Я пишу скрипт PHP, который добавляет числа в текстовый файл. Я хочу, чтобы в каждой строке было по одному числу, например:

1
5
8
12

Если я использую file_put_contents ($ filename, $ commentnumber, FILE_APPEND) , результат будет выглядеть следующим образом:

15812

Если я добавлю разрыв строки как file_put_contents ($ filename, $ commentnumber. "\ n", FILE_APPEND) , пробелы добавляются после каждого числа и одна пустая строка в конце (подчеркивание представляет пробелы):

1_
5_
8_
12_
_
_

Как получить это Функция для добавления чисел так, как я хочу, без пробелов?

33
задан hakre 14 January 2012 в 11:48
поделиться

5 ответов

Вы пробовали использовать константу EOL PHP?


file_put_contents($filename, $commentnumber . PHP_EOL, FILE_APPEND)

--- Добавлено ---

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

A file with EOL after the last number looks like:
1_
2_
3_
EOF

but a file without that last character looks like

1_
2_
3
EOF

where _ means a space character

Вы можете попробовать проанализировать содержимое файла с помощью php, чтобы увидеть, что внутри


$lines = explode( PHP_EOL, file_get_contents($file));
foreach($lines as $line ) {
    var_dump($line);
}

... сложно

56
ответ дан 27 November 2019 в 17:47
поделиться

досадная регистрация, то, что у вас есть, абсолютно нормально. PHP_EOL и "\ n" абсолютно одинаковы.

В предоставленном вами коде нет ничего неправильного, поэтому значение $ commentnumber должно иметь пробел в конце. как указано, запустите свой $ commentnumber с помощью функции trim ().

file_put_contents($filename, trim($commentnumber . "\n"), FILE_APPEND);

Удачи.

1
ответ дан 27 November 2019 в 17:47
поделиться

Прочитав ваш код и ответы, я пришел к теории ...

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

Например, если вы используете что-то вроде этого:

<?php
$lines = file($filename);
if($lines) // Error reading
  die();
foreach($lines as $line)
  echo $line."<br />";

Тогда вы всегда будете ставить пробел в конце строки из-за способа работы file () . Убедитесь, что в конце каждой $ line нет пробелов, таких как символ новой строки ).
Поскольку HTML обрабатывает все пробелы - пробелы, табуляции, новые строки и т. Д. - как пробелы, если в конце $ line есть пробел, то они будут отображаться как пробелы. в выводе HTML.

Решение: используйте rtrim ($ line) для удаления пробелов в конце строк. Использование следующего кода:

<?php
$lines = file($filename);
if($lines) // Error reading
  die();
foreach($lines as $line)
  echo rtrim($line)."<br />";

не будет иметь тех же проблем, что и в первом примере, и все пробелы в конце строк исчезнут.

0
ответ дан 27 November 2019 в 17:47
поделиться

Ответ pauls имеет правильный подход, но у него есть ошибка. Вам нужно следующее:

file_put_contents($filename, trim($commentnumber).PHP_EOL, FILE_APPEND);

константа PHP_EOL позволяет использовать правильное окончание строки на mac, windows и unix системах. функция trim удаляет любую новую строку или пробел с обеих сторон строки. Преобразование в целое число было бы огромной ошибкой, потому что 1. в итоге у вас может получиться ноль, особенно из-за пробелов или специальных символов (откуда бы они ни взялись...) 2. идентификаторы не обязательно должны быть целыми числами

16
ответ дан 27 November 2019 в 17:47
поделиться

В предоставленном вами коде нет ничего, что могло бы генерировать эти пробелы, кроме $ commentnumber уже содержит пробел. В таком случае просто используйте вместо него trim ($ commentnumber) .

В вашем коде также нет ничего, что объясняло бы пустые строки внизу файла, если только $ commentnumber не может быть пустой строкой. Если это так и вы хотите, чтобы вместо этого выводилось число 0 , используйте intval ($ commentnumber) .

Конечно, вам понадобится только один из этих двух. Если вы хотите сохранить строковый контент, используйте trim () ; если вам всегда нужны целые числа, используйте intval () , который уже автоматически обрезает его.

Также возможно, что вы случайно написали "\ n" вместо "\ n" в вашем фактическом коде, но в коде, который вы разместили здесь, это правильно.

1
ответ дан 27 November 2019 в 17:47
поделиться
Другие вопросы по тегам:

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