如何在PHP编译中禁用_force-cgi-redirect_


How to disable _force-cgi-redirect_ in PHP compilation?

我正在使用 PHP 7(或尝试(,并且正在尝试找到一种禁用 force-cgi-redirect 功能的方法。无论我尝试什么,它似乎仍然总是使用该选项构建 php-cgi 二进制文件。

我尝试在项目目录中将以下行添加到 php.ini-developmentphp.ini-development 中:

cgi.force_redirect = 0

这不起作用 - 所以我还将 --disable-force-cgi-redirect 添加到 ./configure 命令行 - 这也不起作用。

我已经在谷歌上搜索了一个解决方案——除了我尝试过的两件事中的第一件之外,什么也没想出来,(当我变得非常具体时(也是我尝试过的两件事中的第二件。

我知道禁用此"功能"的安全风险 - 但是我需要PHP 7的上下文是FastCGI不适用的上下文。

由于服务器的默认值是 PHP 5,我可以在 PHP 7 上工作的唯一方法是我可以将其作为 CGI 脚本执行,其中第一行是:

#! /my/home/directory/local/bin/php-cgi

.. PHP 7 在那个位置,因为我使用 --prefix=/my/home/directory/local"> 选项编译了它 - 我需要它运行,一旦以这种方式调用,就像它被服务器直接调用一样。

但是,我无法

这样做,因为无论我做什么,我似乎都无法禁用强制 cgi-重定向功能。

如果使用/my/home/directory/local/bin/php 解释器而不是/my/home/directory/local/bin/php-cgi 解释器调用脚本,我可以运行脚本 - 但这对我没有帮助,因为此解决方案导致 PHP 7 以命令行方式运行(很小但很重要的差异,例如没有标头输出(。

注意:出于测试目的(以便我可以看到出了什么问题(,我还尝试编写一个类似于以下内容的 CGI 脚本(例如它被称为"phptest.cgi"(:

#! /bin/bash
echo "Content-type: text/plain"
echo ""
/my/home/directory/local/bin/php-cgi phptest.php

这就是我发现问题是强制 cgi-重定向功能的方式——就像在这样做之前一样,我得到的只是发生服务器错误的模糊通知。

cgi.force_redirect是一个php.ini(PHP 配置文件(选项。

建议php.ini-developmentphp.ini-production php.ini配置。它们是php.ini文件的模板,而不是php.ini本身:当PHP运行时,它不会按这些名称查找文件。如果要设置php.ini选项,则需要将文件名命名为php.ini

因此,您需要做的是创建一个php.ini文件(根据需要将其基于-development或-production文件(,将其放置在其中一个搜索路径中,并对其进行修改以包含cgi.force_redirect=0