2

我正在使用 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 的方式(基于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>

这个设置有什么问题?

4

1 回答 1

2

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

FcgidFixPathinfo 1

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


根据文档

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

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

  • 当文件中FcgidFixPathinfo设置为时,是正确的 ( ),与文件中的值无关。0httpd.conf$_SERVER['SCRIPT_NAME']/test.phpcgi.fix_pathinfophp.ini

  • 当文件FcgidFixPathinfo中设置为1时,不正确 ( ),与文件中的值无关。httpd.conf$_SERVER['SCRIPT_NAME']C:/test.phpcgi.fix_pathinfophp.ini

于 2014-01-22T13:30:43.267 回答