Я использую 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"
Если я загружаю PHP с помощью mod_fcgid , значение $_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>
Что случилось с этой настройкой?
Теперь я знаю, что случилось:
FcgidFixPathinfo 1
Установите это значение равным 0. Вы также можете прокомментировать это или удалить его полностью, так как значение 0 по умолчанию.
Согласно документации :
Эта директива позволяет использовать специальную обработку SCRIPT_NAME, которая позволяет PHP предоставлять дополнительную информацию о пути. Параметр FcgidFixPathinfo должен отображать параметр cgi.fix_pathinfo в php.ini.
Однако я обнаружил, что значение cgi.fix_pathinfo
в файле php.ini
абсолютно не влияет на значение $_SERVER['SCRIPT_NAME']
:
Когда FcgidFixPathinfo
установлено в 0
в файле httpd.conf
, значение $_SERVER['SCRIPT_NAME']
является правильным ( /test.php
), независимо от значения cgi.fix_pathinfo
в файле php.ini
.
Когда FcgidFixPathinfo
установлен в 1
в файле httpd.conf
, значение $_SERVER['SCRIPT_NAME']
неверно ( C:/test.php
), независимо от значения cgi.fix_pathinfo
в файле php.ini
.