1

テストの簡単なスクリプト作成にApacheJMeterでQuercusを使用しています。log4jを使用してPHPからログに記録する必要がありますが、全体としてこれはうまく機能します。だから私はこのようなQuercusモジュールを書きました:

public class LogFunction extends AbstractQuercusModule {

    private static Logger log = Logger.getLogger(LogFunction.class);

    public void log_str(Env env, String str) {
        log.info(str);
    }
}

今、私は次のコードでこれをテストしています:

パブリッククラスQuercusTest{

private static ScriptEngine engine;

static{     
    //set up Quercus
    ScriptEngineManager manager = new ScriptEngineManager();
    engine = manager.getEngineByName("php");
}

public static void main(String[] args) throws ScriptException{
    engine.eval("<?php log_str('Hello');");
}

}

このカスタム関数が登録されていないため、これは例外をスローします(私が予想するように)。

Exception in thread "main" com.caucho.quercus.QuercusErrorException: eval::1: Fatal Error: 'log_str' is an unknown function.
    at com.caucho.quercus.env.Env.error(Env.java:6420)
    at com.caucho.quercus.env.Env.error(Env.java:6306)
    at com.caucho.quercus.env.Env.error(Env.java:5990)
    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.script.QuercusScriptEngine.eval(QuercusScriptEngine.java:134)
    at com.caucho.quercus.script.QuercusScriptEngine.eval(QuercusScriptEngine.java:179)
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247)
    at com.succeed.QuercusTest.main(QuercusTest.java:18)

ただし、このQuercusモジュールをJavaスクリプトエンジンに登録する方法がわかりません。ドキュメントは少しまばらです...どんな助けもいただければ幸いです。

4

2 に答える 2

3

1.1。

ScriptEngineManager manager = new ScriptEngineManager();
engine = manager.getEngineByName("php");

2.2。

if( engine instanceof QuercusScriptEngine )
{
    ((QuercusScriptEngine)engine).getQuercus().addModule(new LogFunction());
}

これは機能します。(クエルカス-4.0.18-src +レジン4.0)

于 2011-08-18T22:36:38.403 に答える
0

私はスクリプトエンジンコードを捨ててネイティブになりました-Quercus:

QuercusEngine engine = new QuercusEngine();
engine.getQuercus().getModuleContext().addModule("LogFunction", new LogFunction());
engine.setOutputStream(os);
engine.getQuercus().init();
engine.execute(phpCode);

これは問題なく動作します。少なくとも、かなり予測可能な動作があります。

于 2011-06-27T20:42:24.410 に答える