在BASH中运行"java -version"会产生正确的结果.但是,当我在apache上使用PHP脚本中的shell_exec()命令尝试相同的命令时,我得到:
"VM初始化期间发生错误无法加载本机库:libjava.jnilib"
我已经尝试了所有常见的修复此问题(更改符号链接,取消设置env变量).
我也很确定BASH和脚本都使用相同的二进制文件."哪个java"产生相同的结果.
关于如何让"java -version"工作的任何想法?
您可以通过将 DYLD_LIBRARY_PATH 环境变量设置为 shell 执行的一部分,向 OSX 提示在哪里可以找到该库。这与它们使用相同的二进制文件无关,而是在 apache 耗尽时该二进制文件是否可以找到它链接到的库。您可以通过运行以下命令查看二进制文件链接的库:
otool -L <binary>
Run Code Online (Sandbox Code Playgroud)
您将看到 libjava.jnilib 所在的位置并将该路径添加到 DYLD_LIBRARY_PATH 中。您可能需要为许多库添加路径。
祝你好运!
免责声明:围绕 DYLD_LIBRARY_PATH 的使用存在各种阵营,它可能(像许多事情一样)存在安全风险。然而,由于在这种情况下 shell_exec() 用于执行二进制文件并且在不使用绝对路径的情况下执行此操作,因此 DYLD_LIBRARY_PATH 的安全问题最少。
| 归档时间: |
|
| 查看次数: |
4649 次 |
| 最近记录: |