Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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 вставляет дополнительный разрыв строки в конце