Как передать CRLF в качестве аргумента в программу командной строки?

Мне нужно передать фактический CRLF программе в качестве аргумента.

Если я сделаю:

shell_exec('echo "Hello World" >t.txt');

это работает отлично. Но, когда я делаю:

shell_exec('echo "Hello
World" >t.txt');

это ломает. Мне нужен способ передать фактический CRLF в качестве аргумента, потому что ffmpeg требует этого при использовании -headers.

Мне нужно решение для Windows / Linux.

1

Решение

Попробуйте использовать 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.

2

Другие решения

shell_exec('echo "Hello \n World" >t.txt');

$ cat t.txt
Hello
World
2

По вопросам рекламы [email protected]