1

我在 Linux 服务器上运行 PHP,并且正在使用 PHP 的 fopen/fwrite 生成 bash 脚本以在 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"
4

3 回答 3

7

在您的代码中的某处,您正在自己编写行尾,因为 fwrite() 不会为您输入它们。不要写“\r”或“\n”或“\r\n”,而是将代码更改为使用 PHP_EOL...这将为运行 PHP 脚本的操作系统编写适当的行尾。

于 2012-04-10T16:28:03.757 回答
1

fwrite()不会在您的文本中添加换行符。存在 Windows 换行符是因为您自己编写它们,或者直接:

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

...或间接:

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

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

即使您将文件作为文本打开(我假设您的意思是二进制文件),换行翻译也仅在 PHP 在 Windows 上运行时才有效(请参阅http://es2.php.net/manual/en/function 上的注释。 fopen.php)。

于 2012-04-10T16:33:04.850 回答
0

这将是要走的路:

fwrite($fh, str_replace("\r\n", "\n", $script));
于 2012-04-10T16:44:46.857 回答