Я пытался выполнить команду hadoop на терминале через shell_exec () в PHP и пытается запустить этот скрипт через URL в браузере. Я столкнулся с серьезной проблемой:
Когда я пытаюсь запустить следующий скрипт в терминале:
<?php
echo "Begin";
echo shell_exec('hadoop fs -ls /');
echo "End";
?>
Он показывает желаемый результат, список всех элементов, доступных в корне HDFS. Но при попытке запустить следующий скрипт через URL, он показывает следующий результат:
url: localhost/myscript.php
BeginEnd
Ничего больше! скрипт работает в терминале, но не в браузере.
Когда я меняю скрипт на:
<?php
echo "Begin";
echo shell_exec('ls /');
echo "End";
?>
Он показывает все элементы, доступные в корневом каталоге локальной файловой системы как в терминале, так и в браузере.
Я попытался изменить команду, чтобы проверить, работает скрипт или нет.
<?php
echo "Begin";
echo shell_exec('hadoop fs -mkdir /test');
echo "End";
?>
Когда я запускаю его через терминал, используя php myscript.php, он работает и создает каталог в корневом каталоге HDFS. но когда я пытаюсь запустить его через браузер через URL с другим именем каталога в скрипте, он просто печатает BeginEnd без создания каталога в корне HDFS.
[ОБНОВЛЕНО]
Когда я получаю доступ к файлам журнала apache, после загрузки URL-адреса появляется следующая строка локальный / myscript.php :
[Thu Apr 07 10:04:07.187673 2016] [core:notice] [pid 1540] AH00094: Command line: '/usr/sbin/apache2'
sh: 1: hadoop: not found
Когда я пытаюсь выполнить тот же скрипт на Python, используя Flask. Обе команды «mkdir» и «ls» отлично работают и показывают желаемый результат в браузере.
НОТА: Когда я выполняю скрипт Python для желаемой работы, я не использую apache, я использовал Flask для размещения своего собственного сервера.
В чем должна быть проблема?
Загляните в свои лог-файлы apache (error.log / access.log). Php.ini, используемый для apache, отличается от php.ini, используемого с php-cli. Возможно, у вас есть ограничение open_basedir и вы не можете запустить исполняемый файл за пределами этого каталога.
http://phpsec.org/projects/phpsecinfo/tests/open_basedir.html
Вы также можете проверить эту информацию, создав файл test.php с функцией phpinfo внутри и просмотрите его:
<? phpinfo() ; ?>
Других решений пока нет …