Я пишу скрипт 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_ _ _
Как получить эту функцию, чтобы добавить числа так, как я хочу, без пробелов?
Вы пытались с постоянной константой 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
вставляет дополнительный разрыв строки в конце