从PHP / Apache运行时Rhino失败

时间:2014-04-22 15:36:03

标签: java php apache rhino

为了在PHP Web应用程序中使用JavaScript进行一些基本的自定义,我试图使用PHP-SpiderMonkey库。我的一些开发盒没有最新的,运行正常的SpiderMonkey软件包。因此,为了保持开发的进展,我编写了一个非常简单的包装器rhino来完成这项工作 - 再次,用于开发和测试目的。

这似乎是在一台机器上工作。当从命令行运行PHP脚本时,它适用于所有计算机。但是,当通过Apache运行时,它会产生以下错误:

Exception in thread "main" java.lang.NullPointerException at 
java.lang.VMClassLoader.defineClass(libgcj.so.10) at 
java.lang.ClassLoader.defineClass(libgcj.so.10) at 
java.security.SecureClassLoader.defineClass(libgcj.so.10) at 
java.net.URLClassLoader.findClass(libgcj.so.10) at 
gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.10) at 
java.lang.ClassLoader.loadClass(libgcj.so.10) at 
java.lang.ClassLoader.loadClass(libgcj.so.10) at 
gnu.java.lang.MainThread.run(libgcj.so.10)

我是否需要以权限方式执行某些操作或$PATH - 从Apache / httpd进程中使rhino在PHP中正确执行? (在CentOS 6上)


从控制台通过Apache,java --version产生:

java version "1.5.0"
gij (GNU libgcj) version 4.4.7 20120313 (Red Hat 4.4.7-4)

Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

1 个答案:

答案 0 :(得分:0)

我有几点建议。

首先,考虑使用gcj以外的Java虚拟机实现。这可能很容易成为一个gcj错误,如果不完全匹配您的环境,我们就无法追查。您是否还在命令行上使用gcj或使用其他一些Java实现?这可能是关键的区别。

如果这对你来说不是一个真正的选择,我没有证据支持我的信念,但我会尝试将Rhino优化级别设置为-1,如果你还没有。当使用0或1运行时,Rhino会在类级别尝试一些积极的优化技术,这些可能会让gcj混淆。