允许Glassfish和PHP在使用Apache的同一服务器中协同工作

时间:2016-01-20 15:46:42

标签: java php apache

可以建立从Java到php文件的桥梁吗?

我有一个用Java编写的应用程序,我需要用PHP编写的执行http://piwik.org/。在服务器上我运行PHP,但是我无法从浏览器访问php目录,因为所有传入的流量都被apache重定向到glassfish应用服务器。

所以我的想法是使用Java servlet执行php文件:

Runtime.getRuntime().exec("php /path/to/file/file.php");

然后将PHP输出编写为java servlet响应。

实现这一目标的唯一问题是:

如何执行像浏览器一样的PHP cli?

我需要将哪些参数传递给PHP以允许PHP读取或写入cookie和会话?

3 个答案:

答案 0 :(得分:4)

当您从命令行执行php脚本时GET / POST / SESSION / 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。

答案 1 :(得分:4)

如果您仍在使用Apache来代理流量,我只会将所有流量排除在Piwik之外,并直接从文件系统/ mod_php / php-fpm /通常用于您提供的流量。

你也可以使用php-cgi并传递适当的环境变量,但这会使很多东西变得复杂,比如你必须将响应代理回浏览器。 Apache已经支持这一点,所以不要在你的应用程序中实现另一个代理,直接在Apache中执行。

您可以排除代理目录:

ProxyPass /piwik ! 
ProxyPass / 127.0.0.1:8080 
ProxyPassReverse / 127.0.0.1:8080

答案 2 :(得分:2)

感谢 kelunik 使用Apache排除流量和帮助的想法 Federico 我已经使用此Apache规则解决了问题:

ProxyPass /phpdir ! 
ProxyPass / 127.0.0.1:8080 
ProxyPassReverse / 127.0.0.1:8080

Apache将所有请求重定向到端口8080,文件夹 / phpdir 除外。在Apache文档根目录中,我创建了目录 phpdir ,这是运行PHP应用程序的新根目录。

那是