在BASH中运行“java -version”会产生正确的结果。但是,当我在apache上使用PHP脚本中的shell_exec()命令尝试相同的命令时,我得到:
“VM初始化期间发生错误无法加载本机库:libjava.jnilib”
我已尝试解决此问题的所有常规修补程序(更改符号链接,取消设置env变量)。
我也很确定BASH和脚本都使用相同的二进制文件。 “哪个java”产生相同的结果。
关于如何让“java -version”工作的任何想法?
答案 0 :(得分:1)
通过将DYLD_LIBRARY_PATH环境变量设置为该shell exec的一部分,您可以向OSX提供有关在何处找到该库的提示。它与使用相同的二进制文件无关,但无论该二进制文件是否能够在用完apache时找到它链接到的库。您可以通过运行以下命令查看二进制文件链接的库:
otool -L <binary>
您将看到libjava.jnilib所在的位置,并将该路径添加到您的DYLD_LIBRARY_PATH。您可能需要许多库来添加路径。
祝你好运!免责声明:使用DYLD_LIBRARY_PATH有各种各样的阵营,它可能(像许多事情一样)是一种安全风险。但是,由于在这种情况下shell_exec()被用于执行二进制文件而不使用绝对路径,因此DYLD_LIBRARY_PATH是最不安全的问题。
答案 1 :(得分:0)
这对我有用:
<?php
exec('export DYLD_LIBRARY_PATH=""; java -version');
?>
参考文献:
- https://drupal.org/node/1257654
- Calling java from PHP exec