2010-06-18 3 views
80

Мой код:Дать новую строку в файл в PHP

$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'ing он говорит мне использовать \r\n, но \r - это возврат каретки, который, похоже, не является тем, что я хочу сделать. Я просто хочу, чтобы файл выглядел так:

40119 
40122 
40120 
42155 
36925 
45881 
42145 
45880 

Спасибо.

ответ

219

Заменить '\n' на "\n". Управляющая последовательность не распознается при использовании '.

См. manual.

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

+0

Спасибо очень много, надо было думать о том, что сам :) Я могу только принять ваш ответ в 9 минут, но когда Я могу я сделаю. –

+0

Я изменил «\ r \ n» на «\ n» для моей строки, заканчивающейся и работая. Благодарю. – csonuryilmaz

18

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

file_put_contents('ids.txt', implode("\n", $gemList) . "\n", FILE_APPEND); 
50

Использование PHP_EOL, который выводит \r\n или \n в зависимости от операционной системы.

+4

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

44

PHP_EOL является предопределенной константой в PHP с PHP 4.3.10 и PHP 5.0.2. См. Сообщение manual:

Используя это, вы сэкономите дополнительное кодирование в кросс-платформенных разработках.

IE.

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

Если вы петельные через это дважды вы увидите в «некий-файл»:

some data 
some data 
Смежные вопросы