Как определить тип сервера в PHP с запутанным «SERVER_SOFTWARE» - PullRequest
1 голос
/ 14 апреля 2019

Я защитил свой сервер с помощью «mod_security2» и изменил заголовок «Server:» на другое значение. Там написано: «Сервер: пример сервера». Я использовал следующие опции mod_security:

ServerTokens Full
SecServerSignature exampleserver

Побочным эффектом является то, что $_SERVER["SERVER_SOFTWARE"] также равен "exampleserver".

Поэтому типичный код для определения типа сервера больше не работает :

if( strpos( $_SERVER['SERVER_SOFTWARE'], 'Apache') !== false) 
  echo 'Have Apache';
else
  echo 'Have some other server';

При проверке информации, доступной из PHP, я обнаружил, что у этой конкретной установки PHP7 есть расширение "apache2handler", загруженное в Apache.

Итак, я обновил свой тест до:

$isApache=  extension_loaded('apache2handler')
          ||(strpos(getenv('SERVER_SOFTWARE'),'Apache')!==false);

Есть ли лучший способ определить тип сервера внутри PHP, когда $_SERVER['SERVER_SOFTWARE'] недоступен?

1 Ответ

0 голосов
/ 14 апреля 2019

Вы можете использовать функцию php_sapi_name() , чтобы определить, как работает PHP.На моем веб-сервере это возвращает «apache2handler».В командной строке возвращает «cli».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...