Новые строки не интерпретируются при передаче в 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'));
Другие вопросы по тегам