繁体   English   中英

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

[英]Allow Glassfish and PHP to work together in the same server using 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和会话?

当您从命令行执行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。

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

你也可以使用php-cgi并传递适当的环境变量,但这会使很多东西变得复杂,比如你必须将响应代理回浏览器。 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应用程序的新根目录。

而已

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM