Вызов Perl из PHP? - PullRequest
       4

Вызов Perl из PHP?

8 голосов
/ 30 августа 2010

У меня есть скрипт php, который обрабатывает ввод формы.По причинам, связанным с дизайном, которые немного вышли из-под контроля, и которые я не хочу полностью менять, мне приходится вызывать сценарий perl с параметрами, указанными в форме HTML.

Я санировал все входные данные и затем выводил их в файл с именем input, который для краткости в этом вопросе script.pl читается скриптом perl с именем.Script.pl должен кое-что сделать, а затем записать все выходные данные в файл с именем output.

Я вызываю скрипт perl из php примерно так:

system('perl script.pl 2>errors');

Ничего хорошего, ничего не происходит.выходные данные не создаются, ошибки не создаются, и побочный эффект не возникает.

Мой apache работает как www-data user и group id.Мой каталог настроен с 775 настройками, владельцем которых является я: www-data.(Мое имя пользователя заменено на "я" ради конфиденциальности).

У меня вопрос в два раза: 1) Я делаю это неправильно?Если так, как я должен улучшить код?2) Есть ли более разумный способ отлавливать ошибки при выполнении системы?

После программирования на perl некоторое время PHP чувствует себя как задница.

ОС: Ubuntu server edition

Ответы [ 4 ]

1 голос
/ 02 сентября 2010

В прошлом я использовал для этого shell_exec () или backticks.

В документации по возвращаемому значению shell_exec указано, что оно идентично оператору обратного ключа:

Возвращаемые значения

Вывод выполненной команды.

Надеюсь, это поможет.

system () возвращает только код состояния.

$var = shell_exec ("ls");
print $var;
$var = `ls -l`;
print $var;
1 голос
/ 01 сентября 2010

popen может использоваться для получения ответа оболочки.это ваша лучшая ставка.Что может помочь вам отладить, почему система злится.также, если ваш pl говорит "привет" и "пока", popen может даже прочитать это.

Если команда, которую нужно выполнить, не может быть найдена, возвращается допустимый ресурс.Это может показаться странным, но имеет смысл;это позволяет вам получить доступ к любому сообщению об ошибке, возвращаемому оболочкой

В идеале, я бы взял данные из stdin и записал в stdout.popen разрешил бы аккуратный доступ к обоим.

popen('pwd;perl script.pl 2>errors;echo done');

, тогда вы можете увидеть, где вы находились (каталог), когда система была вызвана и выполнила это.

0 голосов
/ 01 сентября 2010

Ознакомьтесь с документацией PHP system () .Ниже приведен прототип функции system ():

string system  ( string $command  [, int &$return_var  ] )

Передайте второй аргумент, а затем распечатайте возвращаемую строку и вторую переменную.Посмотрите, что говорит ошибка.

0 голосов
/ 30 августа 2010

Perl в пути? Возможно, вам нужно указать его полностью (например, / usr / bin / perl). System () возвращает false, что указывает на ошибку? Если вы попробуете что-нибудь попроще, например, system('/usr/bin/true', $retval), будет ли $retval установлено в 1?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...