Java 允许Glassfish和PHP使用Apache在同一服务器上协同工作
有可能在Java和php文件之间建立一个桥梁吗 我有一个用Java编写的应用程序,我需要用PHP编写的执行程序。在服务器中,我运行了PHP,但我无法从浏览器访问PHP目录,因为所有传入流量都被apache重定向到glassfish应用程序服务器 因此,我的想法是使用Java servlet执行php文件:Java 允许Glassfish和PHP使用Apache在同一服务器上协同工作,java,php,apache,Java,Php,Apache,有可能在Java和php文件之间建立一个桥梁吗 我有一个用Java编写的应用程序,我需要用PHP编写的执行程序。在服务器中,我运行了PHP,但我无法从浏览器访问PHP目录,因为所有传入流量都被apache重定向到glassfish应用程序服务器 因此,我的想法是使用Java servlet执行php文件: Runtime.getRuntime().exec("php /path/to/file/file.php"); 然后将PHP输出编写为Javaservlet响应 实现这一目标的唯一问题是:
Runtime.getRuntime().exec("php /path/to/file/file.php");
然后将PHP输出编写为Javaservlet响应
实现这一目标的唯一问题是:
如何执行类似于浏览器的PHP cli
我需要向PHP传递哪些参数以允许PHP读取或写入cookie和会话?当您从命令行执行PHP脚本时,
GET
/POST
/会话
/cookie
变量是没有意义的。当您的file.php
发送cookie时,没有浏览器接收它,请保存它并将其用于后续请求
您可以使用CGI-SAPI,这样所有HTTP.*
变量都将可用,并且头将写入输出
php cgi
二进制实现cgi接口,允许您在命令行上传递cookie,如下所示:
HTTP_COOKIE='PHPSESSID=XXXX' php-cgi /path/to/file/file.php
其中,
XXXX
可以是用户的会话id。您可以通过分析输出上的标题来读取cookie。如果您使用Apache代理流量,我只需排除Piwik的所有流量,并直接从文件系统/mod_php
/php fpm
/您通常使用的任何内容中提供这些流量
您还可以使用phpcgi
并传递适当的环境变量,但这会使很多事情变得复杂,比如您也必须将响应代理回浏览器。Apache已经支持这一点,所以不要在应用程序中实现另一个代理,直接在Apache中实现
您可以从代理中排除目录:
ProxyPass /piwik !
ProxyPass / 127.0.0.1:8080
ProxyPassReverse / 127.0.0.1:8080
由于kelunik使用Apache排除流量的想法,以及Federico的帮助,我使用此Apache规则解决了问题:
ProxyPass /phpdir !
ProxyPass / 127.0.0.1:8080
ProxyPassReverse / 127.0.0.1:8080
Apache将所有请求重定向到端口8080,但文件夹/phpdir除外。我在Apache文档根目录中创建了目录phpdir,这是运行PHP应用程序的新根目录
就是这样如果在CGI模式下运行PHP进程并使用预期的环境变量,PHP应该像在say mod_PHP中执行一样做出反应。您可以参考以获取详细信息。我试图这样做,但收到一条警告,警告我无法使用cookie,因为浏览器不支持它。我想我需要设置一个允许它的参数。无法运行程序“HTTP_COOKIE=“test=1”:error=2,没有这样的文件或目录现在我只有在通过Java执行时收到这个错误,使用控制台我才收到输出。你能试着提供php cgi的绝对路径吗?类似于HTTP_COOKIE='PHPSESSID=XXXX'/usr/bin/php cgi/path/to/file/file.php的内容是的,现在我将尝试。我需要首先了解这是做什么的HTTP_COOKIE='PHPSESSID=XXXX',因为Java试图作为脚本进行解析。也许我需要用Java的另一种方式来实现这一点;也许使用导出HTTP\u COOKIE='PHPSESSID=XXXX'?这就是我一直在寻找的语法。把它编辑成我的答案,因为这比重写要好得多。