Menulis baris baru ke file dalam PHP (feed baris)

109

Kode saya:

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

Untuk beberapa alasan, itu menulis \nsebagai string, jadi filenya terlihat seperti ini:

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

Dari Google, itu memberitahu saya untuk menggunakan \r\n, tetapi \rmerupakan pengembalian kereta yang sepertinya bukan yang ingin saya lakukan. Saya hanya ingin file tersebut terlihat seperti ini:

40119
40122
40120
42155
36925
45881
42145
45880

Terima kasih.

VIVA LA NWO
sumber

Jawaban:

278

Ganti '\n'dengan "\n". Urutan pelolosan tidak dikenali saat Anda menggunakan '.

Lihat manual .

Untuk pertanyaan tentang bagaimana menulis akhir baris, lihat catatan di sini . Pada dasarnya, sistem operasi yang berbeda memiliki konvensi yang berbeda untuk akhiran baris. Windows menggunakan "\ r \ n", sistem operasi berbasis unix menggunakan "\ n". Anda harus tetap berpegang pada satu konvensi (saya memilih "\ n") dan membuka file Anda dalam mode biner ( fopenharus mendapatkan "wb", bukan "w").

Artefacto
sumber
Saya telah mengubah "\ r \ n" menjadi "\ n" untuk akhir baris saya dan berhasil. Terima kasih.
csonuryilmaz
sekarang kode saya menggunakan keduanya "dan 'dan itu mengganggu saya
Tn PizzaGuy
Nyatanya, Anda sebenarnya dapat melihat bahwa \ n disorot saat menggunakan "" tetapi tidak saat menggunakan ''. (Ini, jika editor Anda menggunakan penyorotan sintaks, milik saya adalah Sublime Text 3)
DarkVeneno
68

Gunakan PHP_EOLkeluaran yang mana \r\natau \ntergantung pada OS.

Aldarien
sumber
4
Jangan mendapat masalah, selalu gunakan \nkecuali Anda ingin membuka file di OS tertentu - jika demikian, gunakan kombinasi baris baru dari OS itu, dan bukan OS tempat Anda menjalankan PHP ( PHP_EOL).
Alix Axel
60

PHP_EOL adalah konstanta standar dalam PHP sejak PHP 4.3.10 dan PHP 5.0.2. Lihat posting manual :

Menggunakan ini akan menghemat pengkodean tambahan pada pengembangan lintas platform.

YAITU.

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

Jika Anda mengulang ini dua kali, Anda akan melihat di 'somefile':

some data
some data
pengguna1649798
sumber
23

Anda juga bisa menggunakan file_put_contents():

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