Я не знаю, как я собираюсь это сделать, но …
У меня есть сценарий CLI на сервере, PHP. Он будет запущен из командной строки. Мой скрипт PHP должен вызывать функцию в библиотеке JavaScript и отображать возвращаемое значение. Мне нужно найти способ запустить сервер JavaScript. Как я могу это достичь?
Используя Rhino , вы можете запускать JavaScript как скрипт командной строки . Сначала загрузите и извлеките Rhino . Затем, предполагая, что ваши сценарии выглядят следующим образом:
PHP:
<?php # myscript.php $pathToRhinoJar = './rhino1_7R2/js.jar'; $javascriptFile = './test.js'; $output = shell_exec("java -jar $pathToRhinoJar $javascriptFile command line arguments"); echo "Response from javascript:\n $output";
JavaScript:
/* test.js */ for (i in arguments) { print(arguments[i]) }
Это было бы результатом:
$ php ./myscript.php Response from javascript: command line arguments
Ну, технически вы могли бы делать то, что хотите.
$output = system('./jsInterpreter -param value', $retval);
или похожие EDIT: Rhino, кажется, идеально подходит для ваших нужд:
Предопределенные свойства
Скрипты, выполняемые в оболочке, имеют доступ к некоторым дополнительным свойствам объекта верхнего уровня. аргументы
Объект arguments – это массив, содержащий строки всех аргументов, заданных в командной строке при вызове оболочки.
Если вы не говорите о какой-либо форме на стороне клиента на стороне PHP или на стороне сервера, то то, о чем вы говорите, не будет работать.
PHP выполняется на стороне сервера.
JavaScript выполняется на стороне клиента.
Нельзя «вызывать метод» на другом, потому что PHP уже выполнен до того, как JavaScript может быть вызван клиентом.
Единственный способ сделать что-то вроде этой работы – предоставить какой-то способ для выполнения JavaScript, а затем отправить результат метода обратно на сервер с помощью вызова AJAX.
Я думаю, что это то, что вы ищете http://devzone.zend.com/article/4704 . Использование JavaScript в PHP с помощью PECL и SpiderMonkey
Этот пример даже не близок к проверке, но я думаю, что он должен вести вас в правильном направлении.
-- funcs.js function add(a,b) { return a +b; } -- use-js-funcs.php <?php // create JavaScript context $js = new JSContext(); $js_code = file_get_contents('func.js'); // define Script code $js_code.= "\n add(5)"; // evaluate script and display result, // my guess is that evaluateScript returns the // result of the last statement that was executed echo $js->evaluateScript($script); ?>
PHP выполняется на вашем сервере, и вывод отправляется в браузер. В браузере выполняется сценарий, предоставляемый PHP. Нет, PHP не может вызвать функцию JavaScript – он может обслуживать только страницу браузера, содержащую JavaScript, который будет выполняться браузером.
Этот скрипт может содержать обратный вызов AJAX, который сообщает браузеру инициировать новый запрос на PHP-скрипт сервера, но это представляет собой отдельный и отдельный запрос на сервер.
Должен ли скрипт работать на стороне клиента? Вы можете написать функцию, которая запускается и вызывает библиотеку JS сразу после загрузки страницы, а затем отправляет возвращаемое значение в ваш скрипт с помощью вызова XHR. Вы также можете установить тайм-аут для запуска функции и сделать это через определенный промежуток времени.
Если вы хотите, чтобы это сработало, вам придется инициировать вызов через JavaScript с помощью Ajax.
Вот что я делаю:
Во-первых, создайте PHP-файл, который выполняет всю работу, в которой вы нуждаетесь, и затем попросите его получить простой набор результатов. Что-то вроде:
echo 'true';
Ключ должен быть простым. Если вам нужно больше, чем просто очертить каждый результат пространством, трубой или комой, таким образом вы можете разбить его на массив позже.
Во-вторых, вам нужно сделать javascript-вызов с помощью ajax. Вот что я делаю:
var result = null; var scriptUrl = "your-php-page.php"; $.ajax({ url: scriptUrl, type: 'get', dataType: 'html', async: false, success: function(data) { result = data; } }); return result;
Затем вы можете делать все, что вам нужно, с возвращенными данными. Вы даже можете отправить его на другую страницу PHP, если вам нужно.
PHP может выполнять только предварительные процедуры, поэтому я считаю, что единственный способ вызвать функцию JavaScript на странице – это распечатать вызов JavaScript:
?> <script> functionToCall(); </script> <?PHP
В этой функцииToCall вы можете использовать функцию AJAX или отправить форму для отправки данных обратно в ваш PHP-код для обработки.