Не удается найти сценарий Perl из PHP/Apache

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

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

Моя веб-страница вызывает сценарий 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 на учетные данные вошедшего в систему пользователя), то, возможно, это поможет - как мне это сделать?


person Lauragro    schedule 24.08.2015    source источник
comment
/filepath запустит КОРЕНЬ файловой системы вашего диска, например. c:\. если /filepath является корнем вашего веб-сайта, это не сработает. вам нужно включить весь путь: /home/user/sites/example.com/public_html/filepath/file.pl- тип вещь   -  person Marc B    schedule 24.08.2015
comment
Действительно ли 'not found' указывает на проблему с правами доступа?   -  person Don't Panic    schedule 24.08.2015


Ответы (2)


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

exec("/usr/bin/perl /full-path/script.pl",$output);
person Carlos Garcia    schedule 24.08.2015
comment
Почему ОП должен попробовать это? В хорошем ответе всегда будет объяснение того, что было сделано и почему это было сделано именно так, не только для OP, но и для будущих посетителей SO. - person Jay Blanchard; 25.08.2015

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

/etc/php5/apache2/php.ini

Безопасный режим был включен, что не позволяло 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

person Lauragro    schedule 25.08.2015