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

在PHP中强制fwrite使用\n而不是\r\n,php,linux,fopen,fwrite,Php,Linux,Fopen,Fwrite,我在Linux服务器上运行PHP,并生成bash脚本,以便在Mac计算机上使用PHP的fopen/fwrite。它工作正常,只是行尾被写为\r\n而不是\n,这在我尝试在Mac上运行脚本时会导致错误 如何强制fwrite对行结尾使用\n而不是\r\n?我尝试了utf8_编码我的文本并强制使用二进制模式,但我似乎无法理解 $scriptFile = "/path/to/my/script.sh"; $fh = fopen($scriptFile, 'w'); fwrite($fh

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

如何强制fwrite对行结尾使用\n而不是\r\n?我尝试了utf8_编码我的文本并强制使用二进制模式,但我似乎无法理解

   $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"

在代码中的某个地方,您正在自己编写行结尾,因为fwrite()并没有为您编写它们。将代码改为使用PHP\u EOL,而不是编写“\r”或“\n”或“\r\n”。。。这将为运行PHP脚本的操作系统编写适当的行尾。

在代码中的某个地方,您自己编写行尾,因为fwrite()不为您编写。将代码改为使用PHP\u EOL,而不是编写“\r”或“\n”或“\r\n”。。。这将为运行PHP脚本的操作系统写入适当的行尾。

fwrite()
不会向文本添加换行符。Windows行馈送之所以存在,是因为您可以直接编写它们:

fwrite($fp, "Foo\r\nBar");
。。。或间接地:

fwrite($fp, "Foo\r\nBar");
// Source code saved on Windows
fwrite($fp, 'Foo
Bar');
因此,您唯一的选择基本上是将换行符更改为所需的样式

即使您以文本形式打开文件(我认为您的意思是文本,而不是二进制),换行符转换也仅在PHP在Windows上运行时有效(请参阅中的说明)。

fwrite()
不会将换行符添加到文本中。Windows行馈送之所以存在,是因为您可以直接编写它们:

fwrite($fp, "Foo\r\nBar");
。。。或间接地:

fwrite($fp, "Foo\r\nBar");
// Source code saved on Windows
fwrite($fp, 'Foo
Bar');
因此,您唯一的选择基本上是将换行符更改为所需的样式


即使您以文本形式打开文件(我想您的意思是文本,而不是二进制),换行翻译也只在PHP在Windows上运行时才有效(请参见中的注释)。

这将是一种方法:

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

这将是一条道路:

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

你能分享一些代码吗?我假设您正在使用硬编码值来描述线端约定?因为fwrite本身直接向流写入它接收到的内容。
fwrite($fh,str_replace(“\r\n”,“\n”,$script))?@DaanTimmer实际上我就是这么做的,它完全起作用了。谢谢@尼克提供了一个答案:-)我刚刚看到问题的更新。使用Windows换行符存储bash代码没有多大意义。你应该考虑解决这个问题,而不是增加一个工作区。你能分享一些代码吗?我假设您正在使用硬编码值来描述线端约定?因为fwrite本身直接向流写入它接收到的内容。
fwrite($fh,str_replace(“\r\n”,“\n”,$script))?@DaanTimmer实际上我就是这么做的,它完全起作用了。谢谢@尼克提供了一个答案:-)我刚刚看到问题的更新。使用Windows换行符存储bash代码没有多大意义。你应该考虑解决这个问题,而不是增加一个解决办法。这应该是正确的答案。这在代码中的某个地方。这应该是正确的答案,fwrite与行尾对流无关。这在代码的某个地方。所以,好奇的是,三年后谁否决了这一点?那么,让人好奇的是,三年后谁否决了这一点?除息的