Не могу найти скрипт Perl из PHP / Apache

Из PHP-скрипта я хочу запустить Perl-скрипт. Я могу сделать это нормально из терминала (как пользователь root), но при запуске из моего приложения (пользователь www-данных) я не могу.

При разработке приложения на локальном хосте у меня тоже все получалось, но проблема возникла, когда я переключился на другой сервер.

Моя веб-страница вызывает PHP-скрипт с запросом AJAX POST, который отлично работает для моих других PHP-скриптов, которые не делают вызовов Perl.

Я пробовал следующие команды в моем PHP-скрипте безуспешно:

system("/filepath/file.pl");
exec("/filepath/file.pl");
passthru("/filepath/file.pl");

Журналы Apache на сервере, на котором размещено мое приложение, показывают следующую ошибку:

sh: /file.pl: not found

После запуска следующего кода на моем сервере я вижу, что веб-пользователь рассматривается как www-данные:

ps aux | grep apache

Для тестирования я также установил разрешения для всех файлов и каталогов, используемых моим приложением, чтобы разрешить любой тип доступа любому пользователю, используя chmod 777.

Обратите внимание: мое приложение доступно только определенным пользователям (я использую файл .htaccess для установки этих разрешений и требую, чтобы пользователь входил в систему), поэтому, если есть способ изменить то, как сервер видит этого пользователя (из www-data, в учетные данные вошедшего в систему пользователя) тогда, возможно, это поможет — как бы я это сделал?

2

Решение

Попробуйте что-то вроде этого

exec("/usr/bin/perl /full-path/script.pl",$output);
0

Другие решения

Спасибо за все предложения! В итоге возникла проблема с настройками безопасности в файле php.ini в каталоге Apache на сервере, на котором размещено мое приложение:

/etc/php5/apache2/php.ini

Безопасный режим был установлен на «on», что не позволяло php-файлам получать доступ / выполнять любые локальные файлы. (Сбой PHP-скрипта при попытке доступа к другому файлу, не являющемуся скриптом: other.html).

Чтобы решить эту проблему, не удаляя параметр безопасного режима для всех приложений на моем сервере, я изменил приведенный выше файл php.ini, добавив в него следующее:

safe_mode: on
safe_mode_include_dir: /filepath
safe_mode_exec_dir: /filepath

Более подробную информацию об этих переменных конфигурации можно найти здесь:
http://php.net/manual/en/ini.sect.safe-mode.php

0

По вопросам рекламы [email protected]