每个目录的 php.ini 无法解析(使用 FastCGI)

每个目录的 php.ini 无法解析(使用 FastCGI)
  • Ubuntu 12.04
  • Apache 2.2.22
  • PHP 5.3.10 [以 libapache2-mod-fcgid 身份运行]

[尝试匹配开发服务器与我的网络主机]

我设法使用包装器让 fcgi 工作,并注册了必要的处理程序,以便将 .html 文件解析为 php。现在,我试图弄清楚为什么我的脚本不能在每个目录中使用 php.ini 文件运行,这是据说默认行为。

从 phpinfo() 运行http://127.0.0.1/NEW/poop.html

Server API                               CGI/FastCGI
Virtual Directory Support                disabled
Configuration File (php.ini) Path        /etc/php5/cgi
Loaded Configuration File                /var/www/johnny/public_html/php.ini
Scan this dir for additional .ini files  /etc/php5/cgi/conf.d

它似乎可以从 [/etc/php5/cgi/php.ini] 读取配置,也可以从 Web 根目录读取配置,我必须在包装器脚本中定义它,以便它能够读取那里的 php.ini

[/var/www/php-fcgi-scripts/johnny/php-fcgi-starter]

#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php -c /var/www/johnny/public_html

我结合了两个网络教程来让 FastCGI + VirtualHost 正常工作,并一直在一点一点地学习它的工作原理。这是我的 VirtualHost 设置:

[/etc/apache2/sites-available/johnny.conf]

<VirtualHost _default_:80>
  ServerName johnny.10.128.0.2.xip.io
  ServerAlias my.dev.server.public.IP
  DocumentRoot /var/www/johnny/public_html/

  <IfModule mod_fcgid.c>
    SuexecUserGroup johnny johnny
    <Directory /var/www/johnny/public_html/>
      Options +ExecCGI -Indexes +FollowSymLinks +MultiViews
      AllowOverride All
      AddHandler fcgid-script .php .htm .html
      FCGIWrapper /var/www/php-fcgi-scripts/johnny/php-fcgi-starter .php
      FCGIWrapper /var/www/php-fcgi-scripts/johnny/php-fcgi-starter .htm
      FCGIWrapper /var/www/php-fcgi-scripts/johnny/php-fcgi-starter .html
      Order allow,deny
      Allow from all
    </Directory>
  </IfModule>

  ErrorLog /var/log/apache2/johnny-error.log
  CustomLog /var/log/apache2/johnny-access.log combined
  LogLevel warn
  ServerSignature Off
</VirtualHost>

但它不会从 [/var/www/johnny/public_html/NEW/php.ini] 加载任何内容

检查这个 pastebin看看我对这台服务器所做的一切……我不得不重新调整其中的一些内容以反映我后来进行的故障排除,所以我希望我没有错过任何东西。我还没有尝试从头开始浏览这个列表(还没有……)。我也不确定是否有任何重要的行需要添加,因为我今天已经忙活了一段时间,主要是编辑然后恢复文件。

答案1

我想我已经明白了。

我从头开始,逐行检查 pastebin 的每一行,只使用 PHP 的必要部分作为 FastCGI,并研究每个小部分的工作原理。然后我尝试了很多方法,但都失败了,只剩下一件事可以尝试,也许这不是“正确的方法”,但是……

创建一个新<Directory>/etc/apache2/sites-available/johnny.conf并复制指令,但进行一些更改

<Directory /var/www/johnny/public_html/new>
  Options +ExecCGI -Indexes +FollowSymLinks +MultiViews
  AllowOverride All
  AddHandler fcgid-script .php .htm .html
  FCGIWrapper /var/www/php-fcgi-scripts/johnny/php-fcgi-starter_new .php
  FCGIWrapper /var/www/php-fcgi-scripts/johnny/php-fcgi-starter_new .htm
  FCGIWrapper /var/www/php-fcgi-scripts/johnny/php-fcgi-starter_new .html
  Order allow,deny
  Allow from all
</Directory>

然后创建一个单独的 fcgi 启动脚本/var/www/php-fcgi-scripts/johnny/php-fcgi-starter_new

#!/bin/sh
#PHPRC=/var/www/johnny/new
#export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php -c /var/www/johnny/public_html/new

我发现PHPRC=在这种情况下它不起作用,但 -c 参数起作用!就是这样。这是一个 PITA,但它对我的目的来说已经足够好了。

相关内容