Phantomjs - 有没有办法将参数传递给th

时间:2013-06-10 14:21:28

标签: php phantomjs

假设我在PHP中使用此代码来调用Phantomjs

shell_exec("phantomjs a-phantomjs-file.js");

有没有办法将数据从PHP传递到phantomjs文件?也许某种命令行参数?

3 个答案:

答案 0 :(得分:3)

这里有一个phantomjs的命令行参数列表:https://github.com/ariya/phantomjs/wiki/API-Reference

你可以使用字符串连接或插值来从PHP传递它们,只要知道并注意防止注入攻击,如果参数可能来自用户输入。

答案 1 :(得分:1)

你可能会做这样的事情。

 $array = array("option1"=>"Test", "option2"=>"test2"); // this is what you want in phantom
 $tmp = tempnam("/path/to/tempDir/", "PHANTOM_");
 file_put_contents($tmp, "var params = ".json_encode($array)."; ".file_get_contents("a-phantomjs-file.js"));
 shell_exec("phantomjs ".escapeshellarg($tmp));
 unlink($tmp);

然后在幻像文件中,您可以访问属性

 params.option1

答案 2 :(得分:1)

我使用PHP发送和接收来自PhantomJS的数据,如:

$command = '/path/to/phantomjs /path/to/my/script.js ' . escapeshellarg($uri);
$result_object = json_decode(shell_exec($command));

警告:请务必取消用户输入,以防止其他人在您的服务器上执行代码!

在javascript中,此URI变量可用作system.args数组的第二个元素(第一个元素是您正在调用的脚本的名称):

var system = require('system');
var uri = system.args[1];

当你的javascript完成后,你可以在退出PhantomJS之前输出一个JSON变量:

console.log(JSON.stringify({
  "status": "success"
}));
phantom.exit();

在本示例的PHP代码的第一行中,我们已经使用json_decode()将纯文本JSON返回值解码为对象,因此从PHP中我们可以使用以下命令访问status变量:

print $result_object->status;