2

JavaアプリケーションからいくつかのPHPスニペットを実行しようとしています。

私はこの質問を見ました: Quercusを使用したJavaからのPHP呼び出し

これは単純に示唆しています:

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ファイルは、Glassfishな​​どのJavaアプリケーションサーバーで実行できます。つまり、Resinの外部で実行できます。この.warファイルには、QuercusインタープリターとPHPライブラリーが含まれています。

そのページ( http://caucho.com/download/quercus-4.0.25.war)から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に到達できますか?

ありがとう、

4

2 に答える 2

1

これはバグでした。4.0.33に修正しましたが、まもなくリリースされるはずです。必要に応じて、パブリックsvnリポジトリからQuercusを自分でビルドできます。

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

ジャーはresin/lib/resin-kernel.jarとresin/lib/quercus.jarになります。

バグリファレンスについては、http://bugs.caucho.com/view.php?id=5270を参照してください。

于 2012-11-13T18:31:47.260 に答える
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);
于 2012-11-13T07:51:10.933 に答える