Множество хостинг-площадок в качестве веб-сервера используют Apache, у которого есть различные модули, так или иначе расширяющие возможности веб-сервера в целом.
Иногда правильное выполнение логики скриптов (PHP) может зависеть от наличия конкретного модуля Apache. Исходя из этого, возникает вопрос, как можно сделать проверку наличия нужного модуля. После чего можно сделать вывод сообщения о том, что нужный модуль не подгружен, либо если он в наличии — продолжать выполнять код.
Начиная с версии 4 в PHP появилась функция apache_get_modules(), которая в качестве результата возвращает массив, со списком загруженных модулей сервера Apache.
Пример работы функции:
<?php print_r(apache_get_modules()); ?>
Результат будет примерно такого вида:
Array ( [0] => core [1] => http_core [2] => mod_so [3] => sapi_apache2 [4] => mod_mime [5] => mod_rewrite )
Опираясь на результат работы этой функции, можно сделать проверку, есть ли нужное значение в массиве возвращаемого результата. В качестве примера мы проверим наличие важного модуля mod_rewrite, который служит для реализации разнообразных перенаправлений/преобразований запросов. Кстати касательно использования возможности данного модуля есть несколько полезных постов на эту тему: «Концепция единой точки входа», «Как сделать 301-редирект в htaccess с www. на без www.?», которые я так же рекомендую к прочтению.
Пример.
<?php $module = 'mod_rewrite'; # имя модуля if (in_array($module, apache_get_modules())) echo 'Модуль '.$module.' в наличии!'; else echo 'Модуль '.$module.' отсутсвует.'; ?>
Код примера довольно прост, в переменную $module мы задаем значение имени модуля, который мы проверяем. Далее следует проверка с помощью функции in_array(), которая проверяет наличие указанного значения в массиве. В качестве массива у нас результат работы функции apache_get_modules(). После чего срабатывает условие и выводиться строка с сообщением.