java - 在 Java 中运行 Quercus PHP

标签 java quercus

我正在尝试从我的 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/

相关文章:

java - 在 docker 上运行 java 代码

java - 在Java中的不同类中使用函数,而不将其作为方法收集在类中

java - Quercus 是 Java 环境中 PHP 的可行替代品吗?

java - 如何将 Google App Engine 内存缓存与 Quercus 一起使用?

java - 在java中验证基于linux的用户

Java 堆内存使用波动

php - quercus php 和 RegexpException : Delimiter A in regexp 'Array' must not be backslash or alphanumeric

java - 如何从字符串中提取日期并将其放入Java中的日期变量

php - 在 GAE 上用 PHP 解析远程 csv 文件