2011-10-04 68 views
28

我有一个Symfony任务,它会生成一些调用exec的文件,然后解析输出。该jar可以在命令行中正常运行,该任务可以在命令行中正常运行。Java 1.6当被后台调用时被破坏Symfony任务

问题:

我调用任务的基础上表单提交的动作。我有动作在后台启动一个新的php进程来运行任务,而不管它现在产生的页面是什么。

当它到达java调用时,说exec(java -version);它输出这样的:

Error occurred during initialization of VM 
Unable to load native library: libjava.jnilib 

我觉得它有,当我开始任务与我称之为PHP的方式做,但我迷路了,为什么它不会有相同的库,当我使用命令行。

如何让java从'背景'Symfony任务运行?

注意

它使用,直到我upraded甲基苯丙胺从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的方式导致了这个问题。

这里的环境信息:

  • 变量值
  • SHELL /斌/庆典
  • TMPDIR的/ var /文件夹/ YH/YH + uW3hDHZyxQ5AiUtr0T ++++ TI/-Tmp-/
  • Apple_PubSub_Socket_Render的/ tmp /发射-3rr9ZI /渲染
  • 用户myuser的
  • COMMAND_MODE unix2003
  • SSH_AUTH_SOCK/TMP /发射-zinaMI /听众
  • __CF_USER_TEXT_ENCODING 0x1F5:0:0
  • 路径/ usr /斌:/ bin中:/ usr/sbin目录:/ sbin目录
  • PWD/
  • HOME /用户/ myuser的
  • SHLVL 2
  • DYLD_LIBRARY_PATH /应用/甲基苯丙胺/库/ lib目录下:
  • LOGNAME myuser的
  • 显示/tmp/launch-FYrw70/org.x:0
  • _/Applications/MAMP/Library/bin/httpd

Dyld似乎出现在这里。我需要找到一种方法来解除麻烦的环境。

解决

,我想出了一个解决方案。它看起来像一个黑客,但它的工作。我会在这里发布它,以防其他人遇到同样的问题。

由于Broken Java Mac 10.6提到DYLD_LIBRARY_PATH必须未设置。不知道为什么,它似乎需要在Unix系统上,而不是MacOSX上。

如果MAMP设置为/应用/甲基苯丙胺/库/ lib目录下面介绍如何禁用它: 编辑/应用/甲基苯丙胺/库/斌/ 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

回复:“我看过:[破碎的Java Mac 10.6](http://stackoverflow.com/questions/1482450/broken-java-mac-10-6)...” - >检查你的'phpinfo(INFO_ENVIRONMENT)'检查环境你的PHP过程。它可能与您用来手动检查是否可以启动Java的命令shell的环境不同。 – Barend

+0

我在具体查看环境信息的哪一部分?Java在命令行中可以很好地从php中调用:'php -r'exec(“java -version”,$ o); echo $ o;''echoes:'java version“1.6.0_26”...'这是我从PHP衍生出的PHP进程,它无法运行java。我会试着去看看这条路是不一样的。 – paaat

+0

我注意到一些奇怪的事情,environement将PWD作为symfonyroot/web返回,但getcwd只返回symfonyroot。不知道这是否意义重大。 – paaat

回答

12

这是@paaat添加的解决方案。我只是张贴从没有答案的列表中得到这个问题。

我已经想出了一个解决方案。它看起来像一个黑客,但它的工作。我会 发布它在这里只是incase其他人遇到同样的问题。

由于破碎的Java Mac 10.6提到DYLD_LIBRARY_PATH必须未设置。 不知道为什么,它似乎需要在Unix系统上,而不是MacOSX上。

如果MAMP设置为/应用/甲基苯丙胺/库/ lib目录下面是如何禁用 它:编辑/应用/甲基苯丙胺/库/斌/ 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的安装以使更改生效。

3

这工作!我跑,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 
0

这为我工作:

<?php 
    exec('export DYLD_LIBRARY_PATH=""; java -version'); 
?> 

参考文献:
- https://drupal.org/node/1257654
- Calling java from PHP exec

+0

请不要[发布相同的**答案](http://stackoverflow.com/search?q=user%3A1130803+DYLD_LIBRARY_PATH)。这意味着问题是重复的,请选择最好的问题来发布您的答案,并将其他答案标记为重复的答案。 – brasofilo

+0

会做。谢谢。 –

相关问题