File_put_contents, file_append и разрывы строк
Я пишу PHP script, который добавляет числа в текстовый файл. Я хочу иметь один номер в каждой строке, например:
1
5
8
12
Если я использую file_put_contents($filename, $commentnumber, FILE_APPEND)
, результат выглядит так:
15812
Если я добавлю разрыв строки, например file_put_contents($filename, $commentnumber . "\n", FILE_APPEND)
, пробелы добавляются после каждого номера и одной пустой строки в конце (подчеркивание представляет пробелы):
1_
5_
8_
12_
_
_
Как мне получить эту функцию, чтобы добавить числа так, как я хочу, без пробелов?
Ответы
Ответ 1
Вы пытались с постоянной константой EOL?
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);
}
... сложно
Ответ 2
pauls отвечает правильно, но у него есть ошибка.
вам нужно следующее:
file_put_contents($filename, trim($commentnumber).PHP_EOL, FILE_APPEND);
константа PHP_EOL гарантирует правильную линию, заканчивающуюся на Mac, Windows и Unix-системах
функция trim удаляет любую новую строку или пробел с обеих сторон строки.
преобразование в целое было бы огромной ошибкой, потому что
1. вы можете в конечном итоге иметь нуль, прежде всего из-за пробела или специальных символов (где бы они ни рождались...)
2. Иды не обязательно должны быть целыми числами
Ответ 3
О, ребята! Просто используйте
\г\п
insted \n
Ответ 4
annoyingregistration, то, что у вас там, абсолютно нормально.
PHP_EOL и "\n" точно совпадают.
Код, который вы предоставили, не имеет ничего плохого в этом, поэтому это должно быть значение $commentnumber, у которого есть пробел в конце. как указано, запустите свой $commentnumber с помощью функции trim().
file_put_contents($filename, trim($commentnumber . "\n"), FILE_APPEND);
Удачи.
Ответ 5
В коде, который вы предоставили, ничего не было, чтобы сгенерировать эти пробелы, если $commentnumber
уже не содержит пробела для начала. Если это так, просто используйте trim($commentnumber)
.
В коде нет ничего, что объясняло бы пустые строки в нижней части файла, если $commentnumber
не может быть пустой строкой. Если это так, и вы хотите, чтобы он выводил число 0
вместо этого, используйте intval($commentnumber)
.
Конечно, вам нужен только один из этих двух. Если вы хотите сохранить строковый контент, используйте trim()
; если вы всегда хотите целые числа, используйте intval()
, который уже автоматически обрезает его.
Также возможно, что вы случайно написали " \n"
вместо "\n"
в своем действительном коде, но в коде, который вы там разместили, это правильно.
Ответ 6
Прочитав свой код и ответы, я придумал теорию...
Так как я не вижу, что что-то не так с вашим кодом, как вы открыли и прочитали файл? Вы действительно открыли его в текстовом редакторе? Используете ли вы 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 />";
не будет иметь те же проблемы, что и в первом примере, и все пробелы в конце строк исчезнут.
Ответ 7
потому что каждый раз, когда вы пишете файл, файл заканчивается, file_put_contents
вставляет дополнительный разрыв строки в конце