我正在尝试从Java应用程序中运行一些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/所述...
Quercus .war文件可以在Java应用程序服务器上运行,例如
Glassfish,即它可以在Resin之外运行。该.war文件
包括Quercus解释器和PHP库。
我已经从该页面下载了战争文件(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?
谢谢,
最佳答案
如下工作。
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);