运行php脚本在浏览器上通过shell执行hadoop命令

时间:2016-04-06 16:09:54

标签: php linux bash shell hadoop

我一直试图通过php中的 shell_exec()在终端上执行hadoop命令,并试图通过浏览器中的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 localhost / 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

当我尝试使用Flask通过Python执行相同的脚本时。两个命令“mkdir”和“ls”都很完美,并在浏览器中显示所需的结果。

注意:当我执行所需工作的python脚本时,我不使用apache,我使用Flask来托管自己的服务器。

应该是什么问题?

1 个答案:

答案 0 :(得分:0)

查看您的apache日志文件(error.log / access.log)。用于apache的php.ini与用于php-cli的php.ini不同。也许你有一个open_basedir限制,你不能在这个目录之外运行可执行文件。

http://phpsec.org/projects/phpsecinfo/tests/open_basedir.html

您还可以通过在其中创建带有phpinfo函数的test.php文件来验证这些信息并浏览它:

<? phpinfo() ; ?>