2015-08-24 5 views
2

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

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

На моей веб-странице вызывается 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.

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

+0

'/ filepath' запускает ROOT файловой системы вашего диска, например '' C: \ ''. если '/ filepath' является корнем вашего сайта, это не сработает. вам нужно включить весь путь: '/home/user/sites/example.com/public_html/filepath/file.pl'- type вещь –

+0

« 'not found» действительно указывает на проблему с разрешениями? –

ответ

0

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

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

Зачем ПП «попробовать это»? Хороший ответ всегда будет объяснять, что было сделано, и почему это было сделано именно так, не только для OP, но и для будущих посетителей SO. –

0

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

/etc/php5/apache2/php.ini 

Безопасный режим был установлен в «на», мешающая PHP файлы доступ/выполнение любых локальных файлов. (Сценарий PHP также терпел неудачу при попытке доступа к другому, не-скрипту, file: 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