2012-11-12 3 views
2

Java 응용 프로그램에서 일부 PHP 스 니펫을 실행하려고합니다.Java 내에서 Quercus 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) 
01 23,516,

나는 어떤 기능을 위해 같은 일을 얻을 - 등

http://quercus.caucho.com/에 설명 된 바와 같이

나 strlen, strcmp와,은 phpinfo ...

Java 응용 프로그램 서버에서 실행 할 수 있습니다 .WAR 파일 신 예 : Glassfish, 즉 Resin 외부에서 실행할 수 있습니다. 이 .war 파일 에는 Quercus 인터프리터와 PHP 라이브러리가 포함되어 있습니다.

는 그 페이지에서 전쟁 파일 (http://caucho.com/download/quercus-4.0.25.war)

을 다운로드하여 전체 파일이

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')); ?>"); 
    } 

} 

입니다

$ javac -cp 'WEB-INF/lib/resin.jar;.' TestQuercus.java 
$ java -cp 'WEB-INF/lib/resin.jar;.' TestQuercus 

를 실행하고 내가 할 수 오전

foo.php은 <?php phpinfo; ?>

을 포함

java -cp 'WEB-INF/lib/resin.jar' com.caucho.quercus.CliQuercus foo.php 

그래서 어떻게 작동 QuercusEngine 거기에서 얻을 수 있나요?

감사합니다.

답변

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); 
1

이것은 버그입니다. 나는 방금 4.0.33을 수정했는데 곧 나오게 될 것이다. 당신이 좋아하는 경우에, 당신은 우리의 공공 SVN 저장소에서 신에게 자신을 구축 할 수 있습니다 :

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

항아리는 수지/lib 디렉토리/수지 kernel.jar 수지/lib 디렉토리/quercus.jar 될 것입니다.

버그를 참조하려면 http://bugs.caucho.com/view.php?id=5270을 참조하십시오.

+0

안녕하세요. 귀하의 회신에 감사드립니다. 나는 분산 된 소스 (대 트렁크)에서 작동하기 때문에 지금은 내 대답을 대답으로 표시하고 있습니다. – woddle