我正在使用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>
此设置有什么问题?
答案 0 :(得分:1)
现在我知道出了什么问题:
FcgidFixPathinfo 1
将此值设置为0.您也可以将其注释掉,或将其全部删除,因为0是默认值。
该指令启用特殊的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}}。