这似乎已在多个地方被提出,并被标记为“已关闭”和“偏离主题”。但是,人们似乎经常遇到这个问题
invoking a php method from java(已结束)
How can I run PHP code within a Java application?(已结束)
最后一个问题中的This answer部分回答了这个问题,但没有说明如何阅读输出。
我终于找到了问题的答案:
如何在Java中运行PHP程序并获取其输出?
为了给出更多上下文,有人给了我一个PHP文件,其中包含一些返回字符串的方法foo
的代码。我们如何从JVM调用它?
在Google上搜索没有帮助,因为我发现的所有文章都没有解释如何从Java调用PHP,而是从PHP调用Java。
下面的答案解释了如何使用PHP / Java桥实现这一目的。
答案在Scala中,但对于Java程序员来说很容易阅读。
答案 0 :(得分:1)
从this SO answer和this example创建的代码:
package javaphp
import javax.script.ScriptEngineManager
import php.java.bridge._
import php.java.script._
import php.java.servlet._
object JVM{ // shared object for PHP/JVM communication
var out = ""
def put(s:String) = {
out = s
}
}
object Test extends App {
val engine = (new ScriptEngineManager).getEngineByExtension("php")
val oldCode = """
<?php
function foo() {
return 'hello';
// some code that returns string
}
?>
"""
val newCode = """
<?php
$ans = foo();
java('javaphp.JVM')->put($ans);
?>
"""+oldCode
// below evaluates and returns
JVM.out = "" //reset shared output
engine.eval(newCode)
println("output is : "+JVM.out) // prints hello
}
要运行此文件:
正确安装PHP,Scala并设置路径。然后使用上面的代码创建一个文件php.scala
。然后运行:
scalac php.scala
和
scala javaphp.Test