通过exec或shell_exec执行java会产生错误

时间:2012-10-16 10:34:37

标签: java php linux exec java-7

我在服务器(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脚本时,它一直给我这些权限被拒绝或命令未找到错误。任何个人经历或线索?

3 个答案:

答案 0 :(得分:3)

如果您的操作系统是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

中的更多细节

它解决了我的问题。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

看来你有两个不同的问题:

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

关于路径,除非正确设置权限,否则它将无效。但是,您在哪里设置了环境路径?是在用户档案中吗?