Zapis nowej linii do pliku w PHP (nowy wiersz)

109

Mój kod:

$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);

Z jakiegoś powodu zapisuje \njako ciąg, więc plik wygląda następująco:

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

Z Google mówi mi, żebym użył \r\n, ale \rjest to powrót karetki, który nie wydaje się być tym, co chcę zrobić. Chcę tylko, żeby plik wyglądał tak:

40119
40122
40120
42155
36925
45881
42145
45880

Dzięki.

VIVA LA NWO
źródło

Odpowiedzi:

278

Wymień '\n'się "\n". Sekwencja ucieczki nie jest rozpoznawana podczas używania' .

Zobacz instrukcję .

Aby dowiedzieć się, jak pisać zakończenia linii, zobacz uwagę tutaj . Zasadniczo różne systemy operacyjne mają różne konwencje dotyczące zakończeń linii. Windows używa "\ r \ n", systemy operacyjne oparte na Uniksie używają "\ n". Powinieneś trzymać się jednej konwencji (wybrałbym „\ n”) i otworzyć plik w trybie binarnym ( fopenpowinien otrzymać „wb”, a nie „w”).

Artefacto
źródło
Zmieniłem „\ r \ n” na „\ n” dla zakończenia linii i zadziałało. Dzięki.
csonuryilmaz
teraz mój kod używa obu "i 'i przeszkadza mi to
Mr PizzaGuy
W rzeczywistości możesz zauważyć, że \ n zostaje podświetlone podczas używania "", ale nie podczas używania "". (To znaczy, jeśli twój edytor używa podświetlania składni, mój to Sublime Text 3)
DarkVeneno
68

Użyj PHP_EOLktórych wyjść \r\nlub w \nzależności od systemu operacyjnego.

Aldarien
źródło
4
Nie wpadaj w kłopoty, zawsze używaj, \nchyba że chcesz otworzyć plik w określonym systemie operacyjnym - jeśli tak, użyj kombinacji nowego wiersza tego systemu operacyjnego, a nie systemu operacyjnego, na którym uruchamiasz PHP ( PHP_EOL).
Alix Axel
60

PHP_EOL jest predefiniowaną stałą w PHP od wersji PHP 4.3.10 i PHP 5.0.2. Zobacz instrukcję publikowanie:

Użycie tego pozwoli Ci zaoszczędzić dodatkowego kodowania podczas opracowywania wielu platform.

TO ZNACZY.

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

Jeśli przejdziesz przez to dwukrotnie, zobaczysz w 'somefile':

some data
some data
user1649798
źródło
23

Możesz również użyć file_put_contents():

file_put_contents('ids.txt', implode("\n", $gemList) . "\n", FILE_APPEND);
Alix Axel
źródło