我正在尝试从我的 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/ 中所述...
The Quercus .war file can be run on Java application servers such as Glassfish, i.e. it can be run outside of Resin. This .war file includes the Quercus interpreter and the PHP libraries.
我已从该页面下载了 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 呢?
谢谢
最佳答案
工作原理如下。
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);
关于java - 在 Java 中运行 Quercus PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13346804/