通过命令行传递给php时,不会解释换行符

时间:2010-04-14 18:02:09

标签: php email command-line command-line-arguments

我有一个PHP脚本,我从另一个shell脚本调用,该脚本发送一个自动电子邮件,其中包含从shell脚本生成的消息。问题是,当我发送消息时,所有换行符都被打印到消息中。如何解释它们?

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);

奇怪的是在解释$ argv变量之后的\ n并且实际上在新行上打印了Newline,但是$ argv变量中的换行没有,我尝试用双引号括起变量等等但到目前为止无济于事。

1 个答案:

答案 0 :(得分:3)

如何使用真实的换行符调用脚本:

$ 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'));