Schreiben einer neuen Zeile in eine Datei in PHP (Zeilenvorschub)

109

Mein Code:

$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 wird \nals Zeichenfolge geschrieben, sodass die Datei folgendermaßen aussieht:

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

Von Google'ing sagt es mir, dass ich es verwenden soll \r\n, aber es \rist ein Wagenrücklauf, der nicht das zu sein scheint, was ich tun möchte. Ich möchte nur, dass die Datei so aussieht:

40119
40122
40120
42155
36925
45881
42145
45880

Vielen Dank.

VIVA LA NWO
quelle

Antworten:

278

Ersetzen '\n'durch "\n". Die Escape-Sequenz wird bei Verwendung nicht erkannt '.

Siehe das Handbuch .

Informationen zum Schreiben von Zeilenenden finden Sie im Hinweis hier . 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 hätte "\ n" gewählt) und Ihre Datei im Binärmodus öffnen ( fopensollte "wb" erhalten, nicht "w").

Artefakt
quelle
Ich habe "\ r \ n" für mein Zeilenende in "\ n" geändert und es hat funktioniert. Vielen Dank.
Csonuryilmaz
Jetzt verwendet mein Code beides "und 'es stört mich
Mr PizzaGuy
Tatsächlich können Sie feststellen, dass \ n bei Verwendung von "" hervorgehoben wird, nicht jedoch bei Verwendung von ''. (Wenn Ihr Editor Syntaxhervorhebungen verwendet, ist mein Text Sublime Text 3)
DarkVeneno
68

Verwenden Sie PHP_EOLwelche Ausgänge \r\noder \nje nach Betriebssystem.

Aldarien
quelle
4
Keine Probleme, verwenden \nSie immer, es sei denn, Sie möchten die Datei in einem bestimmten Betriebssystem öffnen. Wenn ja, verwenden Sie die Newline-Kombination dieses Betriebssystems und nicht das Betriebssystem, auf dem Sie PHP ausführen ( PHP_EOL).
Alix Axel
60

PHP_EOL ist eine vordefinierte Konstante in PHP seit PHP 4.3.10 und PHP 5.0.2. Siehe die manuelle Veröffentlichung:

Wenn Sie dies verwenden, sparen Sie zusätzliche Codierung bei plattformübergreifenden Entwicklungen.

IE.

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

Wenn Sie dies zweimal durchlaufen würden, würden Sie in 'somefile' sehen:

some data
some data
user1649798
quelle
23

Sie können auch verwenden file_put_contents():

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