PHP:为什么shell cmd在shell中运行良好但在浏览器上执行的shell_exec()/ exec()中运行不正常?

时间:2016-03-23 15:03:00

标签: php shell-exec

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

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

  1. 我在命令
  2. 中指定了完整的java路径
  3. 我确保服务器上未禁用shell_exec()/ exec()函数,服务器未在安全模式下运行
  4. 我将jar文件的权限更改为可执行文件
  5. 我也尝试使用exec()
  6. 我像exec(“ls”,$ out)一样测试命令,并且工作正常
  7. 命令如下:

    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文件。

1 个答案:

答案 0 :(得分:1)

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

  

注意:当PHP以安全模式运行时,此功能被禁用。

尽管如此:文档还说,自PHP5.3以来,safe_mode已被弃用,所以希望这不会影响你的服务器。

此外,您应该检查是否允许php用户执行java二进制文件{。}}。