在PHP中运行shell_exec('which java')什么都不返回

时间:2010-09-24 19:32:14

标签: java php linux which

如果我跑

which java

从命令行我得到正确的输入(/usr/java/.../bin/java)。但是如果我在php脚本中运行它:

<?
  echo 'java. ' . shell_exec('which java');
  echo 'ls. ' . shell_exec('which ls');
?>

没有打印出来的java,但我得到了正确的结果ls ...

2 个答案:

答案 0 :(得分:2)

需要做两件事:

  • JVM的完整路径(未在环境中设置)
  • 命令行末尾的“2&gt;&amp; 1”。

例如:

echo shell_exec('/usr/java/jdk6/bin/java -cp myJars.jar MyMainClass arg1 2>&1");

答案 1 :(得分:1)

我也遇到了这个问题。我试图确定qrencode实用程序是否安装在(任何)服务器上,如果没有,则优先注册/警告/退出。

考虑到程序应始终位于标准路径中,我将which命令作为二进制文件的可能位置的前缀,同时仍然尊重$PATH可能以某种方式在系统上定义。我认为您也可以将此方法用于常见的Java路径:

shell_exec('PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" '.
           'which qrencode');