这似乎在几个地方被问到,并被标记为“关闭”和“偏离主题”。然而,人们似乎不断遇到这个问题
从java调用php方法 https://stackoverflow.com/questions/614894/invoking-a-php-method-from-java(关闭)
从 Java 调用 PHP https://stackoverflow.com/questions/614995/calling-php-from-java(关闭)
如何在 Java 应用程序中运行 PHP 代码? https://stackoverflow.com/questions/12897070/how-can-i-run-php-code-within-a-java-application(关闭)
这个答案 https://stackoverflow.com/a/12903671/243233最后一个问题部分回答了这个问题,但没有阐明如何读取输出。
我终于找到了问题的答案:
如何从 Java 中运行 PHP 程序获取其输出?
为了提供更多背景信息,有人给了我一个包含某些方法代码的 PHP 文件foo
返回一个字符串。我们如何从 JVM 调用它?
在 Google 上搜索并没有什么帮助,因为我发现的所有文章都没有解释如何从 Java 调用 PHP,而是解释如何从 PHP 调用 Java。
下面的答案解释了如何使用 PHP/Java 桥来做到这一点。
答案在 Scala 中,但对于 Java 程序员来说很容易阅读。
代码创建自这个答案 https://stackoverflow.com/a/12903671/243233 and 这个例子 http://php-java-bridge.sourceforge.net/doc/examples/source.php?source=PhpThreads.java:
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
and
scala javaphp.Test
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)