2014-01-31 3 views
-1

Мне просто нужно выполнить скрипт «серверная сторона»/«без http», чтобы генерировать зашифрованные HASH, которые могут использоваться несколькими скриптами. Моя проблема заключается в том, что я не могу представить команду PHP exec, чтобы добиться этого.Как выполнить внутренний PHP-скрипт с результатами?

Я пробовал пять разных форматов, предложенных несколькими потоками в StackOverflow, и никто не видит, чтобы вернуть результат, и почти половина из них заморозит браузер без выходного канала.

Я не понимаю, как делать ARG или метод, в котором параметры выполнения порядка входят в команду exec(). Вот мои переменные:

$filename = "/home/me/serverside_scripts/myScript.php"; 
$options = "value=999"; // I've also tried the Array('value' => 99) to avail 

MyScript возвращается в JSON строку, которая должна быть расшифрованы, так что все, что я хочу обратно это строка или массив с [0] сравнявшись строку.

Что делать> & & 2> & 1 означает?

Причина, по которой я использую exec(), заключается в проверке результатов, так как этот скрипт будет выполняться скриптами Java (NOT JavaScript).

Спасибо вам за помощь!

+0

вы говорите «не HTTP лица», но вы пытаетесь выполнить его из сценария, который в настоящее время запускается из браузера, так как вы говорите, ваш браузер зависает при выполнении вашего скрипта. Почему бы просто не включить сценарий в сценарий, который вы выполняете из браузера, и использовать функции/код? –

+0

Извините, это было странно, не так ли. Я использую (временно) веб-скрипт для exec(), который находится за каталогом public_html. Этот скрипт является унифицированным способом создания php HASH, который может быть запрошен скриптом на стороне сервера Java, а затем передан внешнему скрипту PHP для дешифрования. –

ответ

1

Если вы хотите, чтобы выполнить этот сценарий из PHP, а также от Java, то я бы этот подход:

  • поместить свой код, который делает работу в функции в файле «myfunc.php "(дайте ему более значимое имя). Сделать функцию принимать все необходимые ей аргументы, но она не должна пытаться accss $ _GET параметров, потому что они будут существовать только при вызове через Интернет.
  • теперь создайте файл PHP, который включает в себя «myfunc.php» и вызывает функцию. Этот файл может получить доступ к $ _GET и другим переменным в Интернете, передавая их в качестве параметров вашей функции.
  • Чтобы выполнить Java, создайте третий файл с именем mycommand.php, который вы можете выполнить из командной строки. Если вам нужно передать аргументы командной строки, см. documentation on $argv. Этот скрипт должен включать «myfunc.php» и вызывать функцию, передавая все необходимые параметры.

Разработка и тестирование этого последнего сценария, запустив скрипт из командной строки:

$ php5 mycommand.php <args go here> 

После вы получите его работы, как это, то вы можете вызвать его из Java с помощью this solution.

Нет причин для вызова команды PHP в качестве подпроцесса из сценария PHP - использование «include», как я описал выше, проще и эффективнее. Однако вот пример для целей тестирования:

test.php (вызвать это через браузер):

<? 
exec("php5 test2.php", $ret); 
foreach ($ret as $line) { 
    print $line . '<br>'; 
} 
?> 

Этот скрипт запускает второй скрипт под названием «test2.php» (в том же каталоге) , и выводит результат из этой команды.

тест2.PHP просто производит некоторый вывод:

<? 
print "foo\n"; 
print "bar\n"; 
print "glorp\n"; 
?> 
+0

Спасибо, хорошая информация. То, что я ищу, является точной строкой exec(), которая учитывает мои потребности, основанные на vars выше. –

+0

Хорошо, я использовал ваш telnet-метод тестирования, и он отлично работает. Спасибо за трюк. Все еще не работает через PHP, но это конформация, что мастер-скрипт отлично выводит JSON HASH. –

+0

Re: «все еще не работает через PHP», можете ли вы опубликовать часть своего кода? – jdhildeb

1

Если вы подаете команду EXEC PHP с переменным, и этим переменным приходят от некоторой формы пользовательского ввода, вы можете получить себе в кучу неприятностей. Пользователь может ввести команду, которая действительно испортит вашу систему.

Что касается & & 2> & 1 см

In the shell, what does " 2>&1 " mean?

Этих перенаправлений команды, используемой в Борна оболочке (не яваскрипт, что я не знаю), чтобы послать стандартный вывод или STDERR к назначенному , не-нормальное место.

R

+0

Я пытался понять страницы руководства exec на PHP, но им не хватает всего локализованного командного канала UNIX и т. Д. –

+0

Я мог бы упростить свою цель: как я могу передать оператор печати в переменную $ output в exec команда? Ничего не работает. –

Смежные вопросы