2014-01-21 24 views
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(基於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> 

這個設置有什麼問題?

回答

2

現在我知道什麼是錯的:

FcgidFixPathinfo 1 

將該值設置爲0。您也可以將其註釋掉,或者乾脆刪除它,因爲0是默認的。


按照documentation

此指令使特殊SCRIPT_NAME處理,其允許PHP,以提供附加的路徑信息。 FcgidFixPathinfo的設置應該反映php.ini中的cgi.fix_pathinfo設置。

但是我發現cgi.fix_pathinfophp.ini文件設定值,使絕對沒有影響,至於$_SERVER['SCRIPT_NAME']值:

  • FcgidFixPathinfohttpd.conf文件設置爲0$_SERVER['SCRIPT_NAME']是正確的(/test.php),而不管php.ini文件中的cgi.fix_pathinfo的值如何。

  • FcgidFixPathinfohttpd.conf文件設置爲1$_SERVER['SCRIPT_NAME']不正確(C:/test.php),不管cgi.fix_pathinfophp.ini文件中的值的。