【问题标题】:Allow Glassfish and PHP to work together in the same server using Apache允许 Glassfish 和 PHP 使用 Apache 在同一服务器上协同工作
【发布时间】:2016-04-26 13:25:08
【问题描述】:

有可能建立一个从 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 和会话?

【问题讨论】:

标签: java php apache


【解决方案1】:

如果您仍然使用 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】:

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

    【讨论】:

    • 我试图这样做,但我收到一个警告,提醒我我不能使用 cookie,因为浏览器不支持它。我想我需要设置一个允许它的参数。
    • Cannot run program "HTTP_COOKIE="test=1"": error=2, No such file or directory 现在我只在通过 Java 执行时收到此错误,使用控制台我收到输出。
    • 能否提供php-cgi的绝对路径?类似HTTP_COOKIE='PHPSESSID=XXXX' /usr/bin/php-cgi /path/to/file/file.php
    • 是的,现在我会尝试。我首先需要了解 HTTP_COOKIE='PHPSESSID=XXXX' 这是做什么的,因为 Java 尝试将其解析为脚本。可能我需要用 Java 以其他方式做到这一点。
    • 它是一个环境变量;也许是export HTTP_COOKIE='PHPSESSID=XXXX'
    【解决方案3】:

    感谢 kelunik 使用 Apache 排除流量的想法以及 Federico 的帮助,我已经使用这个 Apache 规则解决了这个问题:

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

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

    就是这样

    【讨论】:

    • 这就是我一直在寻找的语法。将其编辑到我的答案中,因为它比重写更好。
    猜你喜欢
    • 2019-08-11
    • 2018-07-07
    • 2016-07-23
    • 2016-04-18
    • 2012-04-07
    • 2016-06-25
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    相关资源
    最近更新 更多