【问题标题】:Running php script to execute hadoop command via shell on browser在浏览器上运行 php 脚本以通过 shell 执行 hadoop 命令
【发布时间】:2023-03-28 09:50:01
【问题描述】:

我一直在尝试通过 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 来托管自己的服务器。

应该是什么问题?

【问题讨论】:

  • 您是否有权在/ 中创建目录?如果你从终端运行mkdir /test 会发生什么?
  • 是的,我拥有所有权限。当我尝试从终端执行 hadoop fs -mkdir /test 时,它只是在所需位置创建目录,即此处的 HDFS 根目录。

标签: php linux bash shell hadoop


【解决方案1】:

查看您的 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() ; ?>

【讨论】:

  • 我已经更新了包含 apache 日志文件错误的查询。抱歉回复晚了。
  • 看来 apache 找不到你的二进制文件的路径。更改 myscript.php 并添加 hadoop 命令的完整路径。 which hadoop可以帮你找到完整的路径。
  • 谢谢 确实是这样 :) 非常感谢,它现在正在显示输出 :)
猜你喜欢
  • 2013-08-25
  • 2010-10-07
  • 2012-09-26
  • 2016-05-25
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多