2016-01-20 44 views
4

从Java到PHP文件建立一个桥梁是可能的吗?允许Glassfish和PHP在同一台服务器上一起使用Apache

我有一个用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和会话?

+0

如果您在CGI模式的PHP程序和SE预期的环境变量,PHP应该就像它正在执行中说mod_php的反应。有关详细信息,请参阅http://php.net/manual/en/install.unix.commandline.php。 – Mark

回答

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 
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。

+0

我试图做到这一点,但我收到警告,提醒我我不能使用cookie,因为浏览器不支持它。我想我需要设置一个允许它的参数。 –

+0

错误信息是什么? – Federkun

+0

不能运行程序“HTTP_COOKIE =”test = 1“”:error = 2,没有这样的文件或目录 现在我收到这个错误只有当我通过Java执行,使用控制台我收到输出。 –

2

感谢的kelunik的想法,使用Apache排除流量和帮助下通过费德里科我已经解决使用这个问题Apache的规则:

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

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

就是这样

+0

这就是我一直在寻找的语法。编辑它到我的答案,因为它比重写更好。 – kelunik

相关问题