PHP $_SERVER['SCRIPT_NAME'] неверен при загрузке 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>

Что не так с этой настройкой?


person Sébastien    schedule 21.01.2014    source источник


Ответы (1)


Теперь я знаю, что не так:

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.

person Sébastien    schedule 22.01.2014