PHP $ _SERVER неверен при загрузке PHP через 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" 

Если я загружаю 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 .