2012-11-12 91 views
2

我想從我的Java應用程序運行一些PHP代碼片段。在Java中運行Quercus PHP

我已經看到了這個問題: PHP Call from Java Using Quercus

這表明簡單:

import com.caucho.quercus.QuercusEngine; 

QuercusEngine engine = new QuercusEngine(); 
engine.setOutputStream(System.out); 
engine.executeFile("src/test.php"); 

,我已經看到http://wiki.caucho.com/Quercus%3a_Command_Line_Interface_%28CLI%29這表明:

QuercusEngine engine = new QuercusEngine(); 
engine.setIni("foo", "bar"); 
engine.execute("<?php var_dump(ini_get('foo')); ?>"); 

但在這樣做,我得到:

Exception in thread "main" com.caucho.quercus.QuercusErrorException: eval::1: Fatal Error: 'var_dump' is an unknown function. 
     at com.caucho.quercus.env.Env.error(Env.java:6559) 
     at com.caucho.quercus.env.Env.error(Env.java:6445) 
     at com.caucho.quercus.env.Env.error(Env.java:6109) 
     at com.caucho.quercus.expr.CallExpr.evalImpl(CallExpr.java:198) 
     at com.caucho.quercus.expr.CallExpr.eval(CallExpr.java:151) 
     at com.caucho.quercus.expr.Expr.evalTop(Expr.java:523) 
     at com.caucho.quercus.statement.ExprStatement.execute(ExprStatement.java:67) 
     at com.caucho.quercus.program.QuercusProgram.execute(QuercusProgram.java:413) 
     at com.caucho.quercus.QuercusEngine.execute(QuercusEngine.java:139) 
     at com.caucho.quercus.QuercusEngine.execute(QuercusEngine.java:100) 

我得到同樣的事情對任何功能 - strlen的,STRCMP,的phpinfo等

http://quercus.caucho.com/描述...

.war文件可以在Java應用程序服務器上運行的櫟如 Glassfish,即它可以在Resin外運行。這個.war文件 包括Quercus解釋器和PHP庫。

我已經下載了該網頁上war文件(http://caucho.com/download/quercus-4.0.25.war

和正在運行

$ javac -cp 'WEB-INF/lib/resin.jar;.' TestQuercus.java 
$ java -cp 'WEB-INF/lib/resin.jar;.' TestQuercus 

完整的文件是

import com.caucho.quercus.QuercusEngine; 

public class TestQuercus { 

    public static void main(String[] args) throws Exception { 
    QuercusEngine engine = new QuercusEngine(); 
    engine.setIni("foo", "bar"); 
    engine.execute("<?php var_dump(ini_get('foo')); ?>"); 
    } 

} 

上午能夠做到

java -cp 'WEB-INF/lib/resin.jar' com.caucho.quercus.CliQuercus foo.php 

其中foo.php包括<?php phpinfo; ?>

所以,我怎樣才能從那裏得到一個工作QuercusEngine?

謝謝,

回答

1

作品如下。

import javax.script.ScriptEngine; 
import com.caucho.quercus.script.QuercusScriptEngineFactory; 

QuercusScriptEngineFactory factory = new QuercusScriptEngineFactory(); 
ScriptEngine engine = factory.getScriptEngine(); 

String code = "<?php $foo = strlen('abc'); print $foo; return 'yikes'; ?>"; 
Object o = engine.eval(code); 
System.out.println(o); 
1

這是一個錯誤。我只是修復它爲4.0.33,這應該很快就會出來。如果你喜歡,你可以自己從我們的公共SVN倉庫建設櫟:

svn checkout svn://svn.caucho.com/home/svn/svnroot/resin/trunk resin 
cd resin 
ant 

罐將樹脂/ lib目錄/樹脂kernel.jar和樹脂/ lib目錄/ quercus.jar。

有關錯誤參考,請參閱http://bugs.caucho.com/view.php?id=5270

+0

嗨。感謝您的答覆。不過,我現在將自己的答案標記爲答案,因爲它適用於分佈式源(vs trunk)。 – woddle