Phantomjs – Есть ли способ передать параметры

Предположим, у меня есть этот код на 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;