Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 允许Glassfish和PHP使用Apache在同一服务器上协同工作_Java_Php_Apache - Fatal编程技术网

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

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响应 实现这一目标的唯一问题是:

有可能在Java和php文件之间建立一个桥梁吗

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

因此,我的想法是使用Java servlet执行php文件:

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'?这就是我一直在寻找的语法。把它编辑成我的答案,因为这比重写要好得多。