【问题标题】:Executing java via exec or shell_exec gives error通过 exec 或 shell_exec 执行 java 会出错
【发布时间】:2012-10-06 10:32:00
【问题描述】:

我在服务器(linux)上安装了jdk1.7.0_07~/bin 文件的文件权限是可执行的 (755)。但是,当我尝试执行时,

$output = exec("/usr/java/jdk1.7.0_07/bin/java -version 2>&1");
echo $output;

它给出了权限被拒绝的错误,我已经尝试过了,

$output = exec("java -version 2>&1");
echo $output;

这给出了找不到命令的错误。在检查我的环境变量时。我已成功添加JAVA_HOME = /usr/java/jdk1.7.0_07PATH = /usr/java/jdk1.7.0_07/bin

但是,

当我运行上面提到的 PHP 脚本时,它一直给我那些权限被拒绝或命令未找到错误。有什么亲身经历或线索吗?

【问题讨论】:

  • @Tivie,不,这仍然不起作用:(
  • 我看到你接受了我的回答。这是否意味着您解决了问题?

标签: java php linux exec java-7


【解决方案1】:

如果您的操作系统是 CentOS,它可能来自 SELinux。

root@ls:~# /usr/sbin/getenforce 
Enforcing
root@ls:~# /usr/sbin/setenforce Permissive
root@ls:~# /usr/sbin/getenforce 
Permissive

更多详情见https://superuser.com/questions/455935/php-script-cant-run-bash-script-sh-permission-denied

它为我解决了问题。

【讨论】:

  • 谢谢你,谢谢你,谢谢你,谢谢你!整晚都在为此苦苦挣扎。再次感谢。
【解决方案2】:

如果您从命令行运行这些命令,您可能会使用自己的用户权限执行它们。但是,当您通过 Web 应用程序中的 PHP 脚本执行这些相同的命令时,它们将使用 Apache 用户(通常是 www-data)权限执行。这意味着您不能依赖命令行输出来调试权限错误,除非您可以以运行 PHP 脚本的完全相同的用户身份登录。

【讨论】:

    【解决方案3】:

    您似乎有两个明显的问题:

    如果在您提供 Java 可执行文件的完整路径时出现权限被拒绝错误,则您的权限可能不正确。最常见的原因是,在路径的某个地方,Apache 用户(通常是 www-data)没有读取权限。例如,如果 www-data 没有 jdk1.7.0_07 目录的读取权限,它就无法看到(或打开)它的子目录 bin。

    关于路径,除非权限设置正确,否则它将不起作用。但是,您在哪里设置环境 PATH?它在用户个人资料中吗?

    【讨论】:

      猜你喜欢
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      相关资源
      最近更新 更多