强制fwrite在PHP中使用\ n而不是\ r \ n

时间:2012-04-10 16:22:00

标签: php linux fopen fwrite

我在Linux服务器上运行PHP,并且我正在生成bash脚本,以便在使用PHP的fopen / fwrite的Mac计算机上使用。它的工作正常,除了行结尾被写为\ r \ n而不仅仅是\ n,这会在我尝试在Mac上运行脚本时导致错误。

如何强制fwrite使用\ n代替\ r \ n进行行结尾?我已经尝试过utf8_encoding我的文本和强制二进制模式,但我似乎无法搞清楚!

   $scriptFile = "/path/to/my/script.sh";
   $fh = fopen($scriptFile, 'w');
   fwrite($fh, "$script");
   fclose($fh);

$ script是mysql中文本字段的内容,看起来有点像这样,通常是:

   # comment
   echo "numphotos 1"

   # comment
   /opt/local/bin/gphoto2 --capture-image-and-download -F 1 

   # comment
   echo "696969"

3 个答案:

答案 0 :(得分:7)

在你的代码中的某个地方,你自己编写了行结尾,因为fwrite()不会为你编写它们。而不是编写“\ r”或“\ n”或“\ r \ n”,而是更改代码以使用PHP_EOL ...这将为运行PHP脚本的操作系统编写适当的行结尾。< / p>

答案 1 :(得分:1)

fwrite()不会在您的文字中添加换行符。 Windows换行是因为你自己编写,直接写:

fwrite($fp, "Foo\r\nBar");

......或间接地:

// Source code saved on Windows
fwrite($fp, 'Foo
Bar');

因此,您唯一的选择就是将换行符更改为所需的样式。

即使您将文件作为文本打开(我假设您的意思是而不是二进制文件),换行符转换仅适用于在Windows上运行PHP的情况(请参阅http://es2.php.net/manual/en/function.fopen.php处的说明)。

答案 2 :(得分:0)

这是要走的路:

fwrite($fh, str_replace("\r\n", "\n", $script));