Мне нужно передать фактический 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 и OS X — у меня нет системы Win, чтобы попробовать это.
Также обратите внимание, что это может быть реализация CMD.EXE echo
что не нравится перевод строки — другие программы может разберитесь с этим, как вы ожидаете, так что стоит примерить ffmpeg
,
(редактировать: как отмечает Том, в Windows PowerShell нет проблемы, которая есть у cmd.exe)
Если все, что вы делаете, это создает t.txt
использовать как вход вместо ffmpeg вы можете создать его прямо из PHP.
shell_exec('echo "Hello \n World" >t.txt');
$ cat t.txt
Hello
World