【问题标题】:PHP $_SERVER['SCRIPT_NAME'] is wrong when loading PHP via mod_fcgid通过 mod_fcgid 加载 PHP 时 PHP $_SERVER['SCRIPT_NAME'] 错误
【发布时间】:2014-01-21 17:47:31
【问题描述】:

我使用的是 Apache 2.4.7 和 PHP 5.5.7。

我在C:\web\vhosts\Symfony\web 中有一个test.php 文件。

$_SERVER['SCRIPT_FILENAME'] 的值是正确的:

C:/web/vhosts/Symfony/web/test.php

但是$_SERVER['SCRIPT_NAME'] 的值取决于我如何加载 PHP:


如果我将 PHP 作为 Apache 模块加载$_SERVER['SCRIPT_NAME'] 的值为:

/test.php

我有点惊讶它与SCRIPT_FILENAME 不一样,但我猜至少它是一个正确的值。

这是我加载 PHP 的方式:

LoadModule php5_module "C:/web/php-5.5.7-Win32-VC11-x86/php5apache2_4.dll"
AddHandler application/x-httpd-php .php 
PHPIniDir "C:/web/php-5.5.7-Win32-VC11-x86"

如果我使用 mod_fcgid 加载 PHP$_SERVER['SCRIPT_NAME'] 的值为:

C:/test.php

这是错误的......

这是我加载 PHP 的方式(基于 a tutorial from ApacheLounge):

LoadModule fcgid_module modules/mod_fcgid.so 

<IfModule fcgid_module> 
   FcgidIOTimeout 40 
   FcgidConnectTimeout 10 

   FcgidMaxProcesses 300 
   FcgidMaxProcessesPerClass 300 

   FcgidOutputBufferSize 64 
   ProcessLifeTime 0 
   FcgidMaxRequestsPerProcess 0 
   FcgidMinProcessesPerClass 0 
   FcgidFixPathinfo 1 
   FcgidProcessLifeTime 0 
   FcgidZombieScanInterval 20 
   FcgidMaxRequestLen 536870912 
   FcgidIOTimeout 120 
   FcgidTimeScore 3 

   FcgidPassHeader Authorization 

   FcgidInitialEnv PHPRC "C:\\web\\php-5.5.7-Win32-VC11-x86" 
   FcgidInitialEnv PATH "C:\\web\\php-5.5.7-Win32-VC11-x86;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;" 
   FcgidInitialEnv SystemRoot "C:\\Windows" 
   FcgidInitialEnv SystemDrive "C:" 
   FcgidInitialEnv TEMP "C:\\WINDOWS\\TEMP" 
   FcgidInitialEnv TMP "C:\\WINDOWS\\TEMP" 
   FcgidInitialEnv windir "C:\\WINDOWS" 
   <Files ~ "\.php$"> 
      Options Indexes FollowSymLinks ExecCGI 
      AddHandler fcgid-script .php 
      FcgidWrapper "C:/web/php-5.5.7-Win32-VC11-x86/php-cgi.exe" .php 
   </Files> 
</IfModule>

这个设置有什么问题?

【问题讨论】:

    标签: php apache mod-fcgid


    【解决方案1】:

    现在我知道出了什么问题:

    FcgidFixPathinfo 1
    

    将此值设置为 0。您也可以将其注释掉,或完全删除它,因为 0 是默认值。


    根据documentation

    该指令启用特殊的 SCRIPT_NAME 处理,允许 PHP 提供额外的路径信息。 FcgidFixPathinfo 的设置应该与 php.ini 中的 cgi.fix_pathinfo 设置一致。

    但是我发现php.ini文件中cgi.fix_pathinfo的值对$_SERVER['SCRIPT_NAME']的值完全没有影响:

      1234563 /p>
    • FcgidFixPathinfohttpd.conf 文件中设置为1 时,无论php.ini 文件中cgi.fix_pathinfo 的值如何,$_SERVER['SCRIPT_NAME'] 都不正确 (C:/test.php)。

    【讨论】:

      猜你喜欢
      • 2014-06-18
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 2012-04-15
      相关资源
      最近更新 更多