我有一个Symfony任务,它生成一些文件调用exec到jar然后解析输出。 jar从命令行运行正常,任务从命令行运行正常。
问题:
我在基于表单提交的操作中调用该任务。我有动作在后台启动一个新的php进程来运行任务,无论它现在生成的页面是什么。
当它进入java调用时,比如说exec(java -version);它输出:
Error occurred during initialization of VM
Unable to load native library: libjava.jnilib
我觉得这与我在启动任务时调用php的方式有关,但我很遗憾为什么它与我使用命令行时没有相同的库。
如何从'后台'Symfony任务中运行java?
备注:
在我将mamp从1.9.6升级到2.0.3之前,它曾经毫无障碍地工作。
我看过: Broken Java Mac 10.6 但由于我可以从命令行运行它,这似乎是一个不同的问题。
我也看过Execute symfony task command from the shell_exec() permission denied,但我不认为权限是这里的问题。
更新
我已经将问题缩小到MAMP并从浏览器转到php。
<?php
echo exec("java -version")
...
从命令行调用时可以工作,但通过浏览器打开php文件时不会工作。因此,配置MAMP的方式导致了问题。
这是环境信息:
Dyld似乎出现在这里。我需要找到一种方法来摆脱mamp的环境。
解决
我找到了解决方案。这似乎是一个黑客,但它的工作原理。我会在这里发布,只是因为其他人遇到同样的问题。
如Broken Java Mac 10.6所述,必须取消设置DYLD_LIBRARY_PATH。不知道为什么,它似乎需要在Unix系统上,而不是MacOSX。
如果MAMP设置为/ Applications / MAMP / Library / lib,则如何禁用它: 修改 / Applications / MAMP / Library / bin / envvars 并注释掉以下行
DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH
所以它看起来像这样:
#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH
这应解决问题,java 1.6可以正常运行。
这是一个黑客吗?或者这是MAMP中的错误?如果您知道解决此问题的更好方法,请回答。
答案 0 :(得分:12)
这是@paaat添加的解决方案。我只是张贴以从未答复的列表中获取此问题。
我找到了解决方案。这似乎是一个黑客,但它的工作原理。生病 在这里张贴它只是因为其他人遇到同样的问题。
由于Broken Java Mac 10.6提到必须取消设置DYLD_LIBRARY_PATH。 不知道为什么,它似乎需要在Unix系统上,而不是MacOSX。
如果MAMP设置为/ Applications / MAMP / Library / lib,则如何禁用 它:编辑/应用程序/ MAMP / Library / bin / envvars并注释掉 以下几行
DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH
所以它看起来像这样:
#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH
这应解决问题,java 1.6可以正常运行。
请务必重新启动MAMP的安装,以使更改生效。
答案 1 :(得分:3)
这很有效!我运行的MAMP版本2.1.3在文件中有不同的内容:
#if test "x$DYLD_LIBRARY_PATH" != "x" ; then
# DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#else
# DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib"
#fi
#export DYLD_LIBRARY_PATH
答案 2 :(得分:0)
这对我有用:
<?php
exec('export DYLD_LIBRARY_PATH=""; java -version');
?>
参考文献:
- https://drupal.org/node/1257654
- Calling java from PHP exec