1

LinuxサーバーでPHPを実行しており、PHPのfopen/fwriteを使用してMacコンピューターで使用するbashスクリプトを生成しています。行末が\nではなく\r\ nとして書き込まれていることを除いて、正常に機能しています。これにより、Macでスクリプトを実行しようとするとエラーが発生します。

行末に\r\nの代わりに\nを使用するようにfwriteを強制するにはどうすればよいですか?テキストを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 に答える