我需要把一个实际的crlf作为参数传递给一个程序。
如果我这样做:
shell_exec('echo "Hello World" >t.txt');
它工作得很好。但当我这么做的时候:
shell_exec('echo "Hello
World" >t.txt');
它坏了。我需要一种方法来传递一个实际的crlf作为参数,因为
ffmpeg
在使用-headers时需要它。我需要一个windows/linux的解决方案。
最佳答案
尝试使用PHP_EOL
而不是转义的换行符和/或回车符。
<?php
shell_exec('echo "Hello' . PHP_EOL . 'World" >t.txt');
?>
这在Linux和OSX上对我很有效-我没有一个Win系统来尝试它。
另外请注意,可能是cmd.exe实现的
echo
不喜欢换行符——其他程序可能会按您的预期处理它,因此值得尝试ffmpeg
。(编辑:正如Tom所指出的,Windows Powershell没有CMD.exe那样的问题)
如果您所做的只是创建
t.txt
作为ffmpeg的输入,那么您可以直接从php创建它。