在PHP中将新行写入文件(换行符)

129

我的代码:

$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

我通过谷歌搜索得知要使用\r\n,但\r是回车符,似乎不是我想要的。我只想让文件看起来像这样:

40119
40122
40120
42155
36925
45881
42145
45880

感谢。

4个回答

316

'\n'替换为"\n"。当使用'时,转义序列无法识别。

请参阅手册

关于如何编写行尾的问题,请参阅此处的注释。基本上,不同的操作系统有不同的行尾约定。Windows使用"\r\n",Unix类操作系统使用"\n"。您应该坚持一个约定(我会选择"\n"),并在二进制模式下打开文件(fopen应该得到"wb",而不是"w")。


我已经将我的行尾符从"\r\n"改为"\n",并且它起作用了。谢谢。 - csonuryilmaz
现在我的代码同时使用了 "',这让我很烦恼。 - Mr PizzaGuy
事实上,当你使用""时,你会注意到\n被高亮显示,但是当你使用''时并不会。(这是如果你的编辑器使用语法高亮功能,我的是Sublime Text 3) - DarkVeneno

76

2
你应该在文件使用完毕后使用fclose函数关闭它:https://www.php.net/manual/zh/function.fclose.php - hendr1x
对于像我这样没有看到任何变化的人来说,问题出在a(追加)而不是w(写入)上。 $fp = fopen('somefile', 'a'); - Lepy

73

使用PHP_EOL输出换行符,它会根据操作系统输出\r\n\n


5
使用\n可以避免麻烦,除非你想在特定操作系统中打开文件,否则请始终使用\n。如果要在特定操作系统上使用换行符,请使用该操作系统的换行符组合,而不是运行PHP的操作系统上的换行符(PHP_EOL)。 - Alix Axel

44

你也可以使用file_put_contents()

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

1
这是最好的答案。更加动态,并且自己处理 fopen(),fwrite(),fclose()。 - Sami Haroon
1
这对于少量写入来说是不错的,但当你想要进行大量写入时(例如在循环中),出于性能原因,你可能会考虑使用fopen/fwrite/fclose。https://grobmeier.solutions/performance-ofnonblocking-write-to-files-via-php-21082009.html - Christian
当文件在ramdisk上时,性能可能会更好。 - cachius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接