Новые строки не интерпретируются при передаче в php через командную строку
У меня есть сценарий PHP, который я вызываю из другого сценария оболочки, который отправляет автоматическое письмо с сообщением, созданным из сценария оболочки. Проблема в том, что когда я отправляю сообщение, все символы новой строки печатаются в сообщении. Как мне их интерпретировать?
sendmail.sh:
/path/to/phpscript/sendmail.php "Some Message With Newlines\nHello World.\n"
sendmail.php:
$message = $argv[1] . "\nNewline";
$smtp->send($to, $from, $message);
Странно то, что \ n после того, как переменная $ argv интерпретируется и фактически печатает Newline на новой строке, но переводы строки в переменной $ argv этого не делают, я пытался заключить переменную в двойные кавычки, но пока что но безрезультатно.
1 ответ
Как насчет вызова вашего сценария с реальными символами новой строки:
$ php temp.php "Some Message With Newlines
> Hello World.
> "
С temp.php
содержащий это:
var_dump($argv[1]);
Получает мне следующий вывод:
string(40) "Some Message With Newlines
Hello World.
"
Изменить: другое решение может быть использовать что-то вроде этого для вызова вашего сценария PHP:
$ echo -e "Some Message With Newlines\nHello World.\n" | php temp.php
И измените ваш PHP-скрипт так, чтобы он читал из stdin
вместо $argv
:
var_dump(file_get_contents('php://stdin'));