通过mod_fcgid加载PHP时,PHP $ _SERVER ['SCRIPT_NAME']错误

时间:2014-01-21 17:47:31

标签: php apache mod-fcgid

我正在使用Apache 2.4.7和PHP 5.5.7。

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

$_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>

此设置有什么问题?

1 个答案:

答案 0 :(得分:1)

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

FcgidFixPathinfo 1

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


根据documentation

  

该指令启用特殊的SCRIPT_NAME处理,允许PHP提供其他路径信息。 FcgidFixPathinfo的设置应该反映php.ini中的cgi.fix_pathinfo设置。

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

  • FcgidFixPathinfo文件中0设置为httpd.conf时,$_SERVER['SCRIPT_NAME']是正确的(/test.php),无论{的值是多少{1}}文件中的{1}}。

  • cgi.fix_pathinfo文件中php.ini设置为FcgidFixPathinfo时,1不正确(httpd.conf),无论{的值是多少{1}}文件中的{1}}。