2010-06-18 8 views
80

Mein Code:eine neue Zeile in PHP-Datei schreiben

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

Aus irgendeinem Grund es \n als String schreibt, so dass die Datei wie folgt aussieht:

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

Von Google'ing es sagt mir, \r\n zu verwenden, aber \r ist ein Wagenrücklauf, der nicht zu sein scheint, was ich tun möchte. Ich möchte nur die Datei wie folgt aussehen:

40119 
40122 
40120 
42155 
36925 
45881 
42145 
45880 

Dank.

Antwort

219

Ersetzen Sie '\n' durch "\n". Die Escape-Sequenz wird nicht erkannt, wenn Sie ' verwenden.

Siehe manual.

Die Frage, wie Zeilenenden geschrieben werden, finden Sie im Hinweis here. Grundsätzlich haben unterschiedliche Betriebssysteme unterschiedliche Konventionen für Zeilenenden. Windows verwendet "\ r \ n", Unix-basierte Betriebssysteme verwenden "\ n". Sie sollten sich an eine Konvention halten (ich würde "\ n" wählen) und Ihre Datei im Binärmodus öffnen (sollte "wb", nicht "w" erhalten).

+0

Vielen Dank, hat von mir gedacht, dass sollte :) Ich kann nur die Antwort in 9 Minuten akzeptieren, aber wenn Ich kann ich werde. –

+0

Ich habe "\ r \ n" in "\ n" für meine Zeilenendung geändert und es funktionierte. Vielen Dank. – csonuryilmaz

18

Sie können auch file_put_contents() verwenden:

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

Verwenden PHP_EOL die \r\n oder \n gibt je nach Betriebssystem.

+4

In Schwierigkeiten geraten, verwenden Sie immer '\ n', es sei denn, Sie möchten die Datei in einem bestimmten Betriebssystem öffnen - wenn dies der Fall ist, verwenden Sie die Newline-Kombination dieses Betriebssystems und nicht das Betriebssystem, auf dem Sie PHP ausführen (' PHP_EOL '). –

44

PHP_EOL ist eine vordefinierte Konstante in PHP seit PHP 4.3.10 und PHP 5.0.2. Siehe manual Beitrag:

Verwenden Sie dies sparen Sie zusätzliche Codierung auf Cross-Plattform-Entwicklungen.

IE.

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

Wenn Sie durch diese Schleife zweimal würden Sie in ‚somefile‘ sehen:

some data 
some data