我在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"
答案 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));