Запись новой строки в файл в PHP (перевод строки)

109

Мой код:

$i = 0;
$file = fopen('ids.txt', 'w');
foreach ($gemList as $gem)
{
    fwrite($file, $gem->getAttribute('id') . '\n');
    $gemIDs[$i] = $gem->getAttribute('id');
    $i++;
}
fclose($file);

По какой-то причине он записывается \nкак строка, поэтому файл выглядит так:

40119\n40122\n40120\n42155\n36925\n45881\n42145\n45880

От Google он говорит мне использовать \r\n, но \rэто возврат каретки, который, похоже, не то, что я хочу делать. Я просто хочу, чтобы файл выглядел так:

40119
40122
40120
42155
36925
45881
42145
45880

Спасибо.

VIVA LA NWO
источник

Ответы:

278

Заменить '\n'на "\n". При использовании escape-последовательность не распознается '.

См. Руководство .

По вопросу о том, как писать окончания строк, см. Примечание здесь . По сути, в разных операционных системах используются разные обозначения окончаний строк. Windows использует "\ r \ n", операционные системы на основе unix используют "\ n". Вы должны придерживаться одного соглашения (я бы выбрал «\ n») и открывать файл в двоичном режиме ( fopenдолжно получиться «wb», а не «w»).

Artefacto
источник
Я изменил "\ r \ n" на "\ n" в конце строки, и это сработало. Спасибо.
csonuryilmaz
теперь мой код использует оба, "и 'это меня беспокоит
Mr PizzaGuy
Фактически, вы можете заметить, что \ n выделяется при использовании "", но не при использовании "". (Это, если ваш редактор использует подсветку синтаксиса, мой - Sublime Text 3)
DarkVeneno
68

Какие PHP_EOLвыходы использовать \r\nили в \nзависимости от ОС.

Алдариен
источник
4
Не создавайте проблем, всегда используйте, \nесли вы не хотите открывать файл в определенной ОС - в таком случае используйте комбинацию новой строки этой ОС, а не ОС, в которой работает PHP ( PHP_EOL).
Аликс Аксель
60

PHP_EOL - это предопределенная константа в PHP, начиная с PHP 4.3.10 и PHP 5.0.2. Смотрите ручную публикацию:

Использование этого избавит вас от лишнего кода при кроссплатформенных разработках.

IE.

$data = 'some data'.PHP_EOL;
$fp = fopen('somefile', 'a');
fwrite($fp, $data);

Если вы пропустите это дважды, вы увидите в somefile:

some data
some data
user1649798
источник
23

Вы также можете использовать file_put_contents():

file_put_contents('ids.txt', implode("\n", $gemList) . "\n", FILE_APPEND);
Аликс Аксель
источник