【问题标题】:PHP: Why shell cmd runs fine in shell but not in shell_exec()/exec() executed on a browser?PHP:为什么 shell cmd 在 shell 中运行良好,但在浏览器上执行的 shell_exec()/exec() 中却不行?
【发布时间】:2016-03-23 15:03:00
【问题描述】:

我尝试使用 php 的 shell_exec() 来执行一个 jar 文件。 pgp 文件在服务器上运行。

我研究了这个问题并尝试了以下方法,但到目前为止没有成功:

  1. 我在命令中指定了完整的 java 路径
  2. 我确保服务器上没有禁用 shell_exec()/exec() 功能,服务器没有在安全模式下运行
  3. 我将jar文件的权限改为可执行
  4. 我也尝试使用 exec()
  5. 我测试了类似 exec("ls", $out) 的命令,它运行良好

命令如下:

shell_exec("/usr/lib/jvm/java-7-oracle/bin/java -jar PATH_TO_MY_JAR_FILE.jar");

我将命令复制并粘贴到 shell 中,它运行良好。

--------------更新------------------ -------------------

我在调试方面取得了一些进展,想稍微更新一下问题。

我尝试使用调试

exec("command from above", $output, $exit_code)
echo $output;
echo $exit_code;

并做了一些修复,现在我确定 php 脚本已执行,但它没有做我想要的。

所以jar文件的目的是在系统中创建一个json文件。我指定了这个 json 的绝对路径。

现在,在我运行 php 文件后,$output 显示

Array ( [0] => {"balance":"c","num":"b","is_vip":true,"name":"a"} ) 

这与我在 shell 中运行命令时的输出相同

$exit_code 的值为 10

但是我在系统中找不到json文件。

【问题讨论】:

    标签: php shell-exec


    【解决方案1】:

    你检查过服务器是否开启了php安全模式? http://php.net/manual/en/function.shell-exec.php 的文档说:

    注意:当 PHP 在安全模式下运行时,该功能被禁用。

    尽管如此:文档还说,自 PHP5.3 起已弃用 safe_mode,因此希望这不会影响您的服务器。

    另外你应该检查是否允许php用户执行+xjava二进制文件。

    【讨论】:

    • 谢谢!刚查了一下,安全模式关闭了,我也把jar文件的权限改成了可执行
    猜你喜欢
    • 1970-01-01
    • 2017-12-18
    • 2014-08-14
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多