假设我在PHP中使用此代码来调用Phantomjs
shell_exec("phantomjs a-phantomjs-file.js");
有没有办法将数据从PHP传递到phantomjs文件?也许某种命令行参数?
答案 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;