web-dev-qa-db-ja.com

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

ありがとう。

96
VIVA LA NWO

'\n'"\n"に置き換えます。 'を使用する場合、エスケープシーケンスは認識されません。

manual を参照してください。

行末の書き方の質問については、注記 here を参照してください。基本的に、オペレーティングシステムごとに行末の表記規則が異なります。 Windowsは「\ r\n」を使用し、unixベースのオペレーティングシステムは「\ n」を使用します。 1つの規則( "\ n"を選択した)に固執し、バイナリモードでファイルを開く必要があります(fopenは "w"ではなく "wb"を取得する必要があります)。

249
Artefacto

OSに応じてPHP_EOLまたは\r\nを出力する\nを使用します。

59
Aldarien

PHP_EOLは、PHP 4.3.10およびPHP 5.0.2以降のPHPの定義済み定数です。 manual の投稿を参照してください:

これを使用すると、クロスプラットフォーム開発での余分なコーディングを節約できます。

IE。

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

これを2回ループすると、「somefile」に表示されます。

some data
some data
56
user1649798

file_put_contents() を使用することもできます:

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