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_ _ _ 

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

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

Вы пытались с постоянной константой EOL?

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

— Добавлено —

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

 Файл с EOL после последнего номера выглядит так:
 1_
 2_
 3_
 EOF

 но файл без этого последнего символа выглядит так:

 1_
 2_
 3
 EOF

 где _ означает пробельный символ

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

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

… сложно

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

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

константа PHP_EOL гарантирует правильную линию, заканчивающуюся на Mac, Windows и Unix-системах. Функция trim удаляет любую новую строку или пробел с обеих сторон строки. преобразование в целое число было бы огромной ошибкой, потому что 1. у вас может получиться нуль, особенно из-за пробела или специальных символов (где бы они ни рождались …) 2. Идентификаторы не обязательно должны быть целыми

Ох, ребята! Просто используйте

\ г \ п

insted of \ n

annoyingregistration, то, что у вас там, абсолютно нормально. PHP_EOL и "\ n" точно такие же.

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

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

Удачи.

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

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

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

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

Прочитав ваш код и ответы, я придумал теорию …

Поскольку я не вижу, что что-то не так с вашим кодом, как вы открыли и прочитали файл? Вы действительно открыли его в текстовом редакторе? Вы использовали 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 />"; 

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

потому что каждый раз, когда вы пишете файл, файл заканчивается, file_put_contents вставляет дополнительный разрыв строки в конце