如果我犯了任何错误,请原谅我,因为这是我第一次发布问题。
我正在开发一个使用 Resin 嵌入式库的 Web 应用程序——它在很大程度上取决于 Resin 中包含的 PHP 引擎(Quercus)。经过 3 天的编码后,当我遇到 Quercus 的一个奇怪问题时,我决定是时候制作我的第一个可运行 jar 以在我的 Web 服务器上进行测试了——我想。当从我从服务器请求的 PHP 文件中调用基本 PHP 函数(例如 date、count 和 var_dump)时,它们作为未知函数返回。
但是在我的 IDE(Eclipse 3.8)中,我从来没有遇到过任何问题。所以回到我使用的第一个文档,我使用最少的代码和库制作了一个小型测试应用程序。我按照http://www.caucho.com/resin-3.1/doc/resin-embedding.xtp上第一个教程的说明进行操作,我似乎也像以前一样得到了确切的问题。
测试应用程序的主要代码
public class Main
{
public static void main( String[] args )
{
ResinEmbed resin = new ResinEmbed();
HttpEmbed http = new HttpEmbed( 8080 );
resin.addPort( http );
WebAppEmbed webapp = new WebAppEmbed( "/", "/var/www" );
resin.addWebApp( webapp );
resin.start();
resin.join();
}
}
我用于测试的 PHP 文件
<?php var_dump( "Hello World" ); echo date("Y"); ?>
例外
com.caucho.quercus.QuercusErrorException: 'date' is an unknown function.
at com.caucho.quercus.env.Env.error(Env.java:6885)
at com.caucho.quercus.env.Env.error(Env.java:6408)
at com.caucho.quercus.expr.CallExpr.evalImpl(CallExpr.java:188)
at com.caucho.quercus.expr.CallExpr.eval(CallExpr.java:141)
at com.caucho.quercus.statement.EchoStatement.execute(EchoStatement.java:55)
at com.caucho.quercus.statement.BlockStatement.execute(BlockStatement.java:105)
at com.caucho.quercus.program.QuercusProgram.execute(QuercusProgram.java:414)
at com.caucho.quercus.env.Env.evalCode(Env.java:4201)
所以我知道我的问题不是我的代码中的问题,我尝试使用项目属性和不同的库版本但没有运气。马上,我正在使用最新版本的 4.0.36 和 Java 版本 1.7_25。我什至在多台计算机上都尝试过(所有计算机都运行 Linux,因为这就是我现在使用的所有计算机)。我一直在互联网上寻求帮助,但似乎没有现有的线程可以解决我的问题。有谁知道这会导致什么?我希望我的问题足够详细,而不会太长或太详细。
如果有兴趣,我也可以发布我的应用程序的存储库,但即使我的应用程序和上面的示例以稍微不同的方式执行代码,上面的代码也会遇到与我的应用程序相同的问题。
更新:
在广泛搜索和测试 Quercus 的源代码后,我发现问题似乎与并非所有模块加载有关——即。模块添加了缺少的功能——所以我发现,如果我使用“将所需库复制到生成的 JAR 旁边的子文件夹”选项导出我的项目,它就像在 IDE 中一样工作。现在,由于这至少是让我的项目运行的临时解决方案,我仍然想知道如何正常编译而不会出现问题。(IDE 中加载了 58 个模块,编译时仅加载了 2 个。)