0

我有一个简单的两行脚本:

<?
        $str = '"<!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>"';
        exec('phantomjs '.escapeshellarg(dirname(__FILE__).'/render.js ').''.escapeshellarg($str));
?>

从控制台运行它时,我得到:

Can't open '/Users/me/render.js <!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>'

所以字符串没有像应该的那样封装在引号中。我在这里做错什么了吗?系统是 OSX 10.7, php 5.3.6 。

4

2 回答 2

1

当我在 OS X 10.7(相同的 php 版本)上尝试此操作时,我得到了按预期用单引号括起来的字符串。但是,输出可能不是您所期望的。我会先回显您传递给 exec 的命令,然后尝试将该命令复制粘贴到终端中以查看它是否有效。这样你会更好地看到这个问题。这是我根据您的代码所做的:

$str = '"<!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>"';
$command = 'phantomjs '.escapeshellarg(dirname(__FILE__).'/render.js ').
           ''.escapeshellarg($str);
echo "$command\n";

我懂了:

phantomjs '/Users/me/render.js ''"<!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>"'

如果它是正确的并且仍然不起作用,您应该检查您的路径并确保文件位于脚本认为它们所在的位置。

于 2012-05-18T13:35:39.183 回答
0

最后的工作命令:

$str = '"<!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>"';
$command = 'phantomjs '.dirname(__FILE__).'/render.js '.$str;

exec($command);
于 2012-05-18T14:13:20.150 回答