Предположим, у меня есть этот код на PHP, чтобы позвонить Phantomjs
shell_exec("phantomjs a-phantomjs-file.js");
Есть ли способ передать данные из PHP в файл phantomjs? Возможно, какие-то аргументы командной строки?
Здесь приведен список аргументов командной строки для phantomjs: https://github.com/ariya/phantomjs/wiki/API-Reference
Вы можете использовать конкатенацию или интерполяцию строк, чтобы передать их с PHP, просто будьте осторожны и предохраняйте от инъекций, если аргументы могут возникать при вводе пользователя.
Возможно, вы сможете сделать что-то подобное.
$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
Я отправляю и получаю данные от PhantomJS и от PHP:
$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 будет выполнен, вы можете вывести переменную JSON перед выходом из PhantomJS:
console.log(JSON.stringify({ "status": "success" })); phantom.exit();
В первых строках кода PHP в этом примере мы уже использовали json_decode()
для декодирования возвращаемого значения JSON в текстовом json_decode()
, поэтому изнутри PHP мы можем получить доступ к переменной status
используя:
print $result_object->status;