Blog. Just Blog

Проверка доступности функции PHP

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Ковырялся как-то в очередном сплойте, которым скрипткиддисы пытались проломить блог. Среди всякого говна нашел там интересную идею о проверке доступности функций PHP перед их вызовом. Реализация была такая же кривая, как и весь остальной код этих быдлохакеров, поэтому я переписал функцию проверки по-своему. Проверка выполняется тремя способами: анализом значения параметра disable_functions в файле php.ini, а также через функции PHP function_exists и is_callable. Использование всех трех способов проверки дает абсолютно точный результат.
  1. //--------------------------------------------------------------------------
  2. // Функция проверки существования и доступности другой функции PHP
  3. //--------------------------------------------------------------------------
  4. // Параметры: $func - строка имени функции
  5. // На выходе: true - функция есть и доступна для вызова,
  6. //            false - функция недоступна по какой-либо причине
  7. //--------------------------------------------------------------------------
  8. function is_function_enabled($func) {
  9.     $func=strtolower(trim($func));
  10.     if ($func=='') return false;
  11.     // Получить список функций, отключенных в php.ini
  12.     $disabled=explode(",",@ini_get("disable_functions"));
  13.     if (empty($disabled)) {
  14.         $disabled=array();
  15.     }
  16.     else {
  17.         // Убрать пробелы и привести названия к нижнему регистру
  18.         $disabled=array_map('trim',array_map('strtolower',$disabled));
  19.     }
  20.     // Проверить доступность функции разными способами
  21.     return (function_exists($func) && is_callable($func) &&
  22.             !in_array($func,$disabled)
  23.     );
  24. }
Пример использования:
  1. // Проверка доступности функции shell_exec
  2. if (is_function_enabled('shell_exec')) {
  3.     echo shell_exec('ping yandex.ru');
  4. }
Функцию можно использовать, например, для проверки доступности нужных вам функций на различных бесплатных хостингах с ограничениями, или для выбора функции взаимодействия с операционной системой, типа shell_exec, если часть из них по какой-то причине запрещены.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 5556 | Комментариев: 5

Метки: PHP
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
ManHunter (10.04.2016 в 00:28):
И чо? Функция есть, а в конфиге запрещена. Какие дальше будут варианты?
dgd (10.04.2016 в 00:23):
function_exists()
Александр (28.03.2012 в 21:25):
Спасибо за функцию, использую её в своём коде. Работает на ура!
ManHunter (14.11.2010 в 14:28):
Пропиши в php.ini список функций в разном регистре, и поэкспериментируй. После этого задавай глупые вопросы.
Holips (14.11.2010 в 14:11):
Вот не пойму только, зачем приводить название функции к нижнему регистру ?

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2017
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0026 сек.) / Память: 4.5 Mb
Наверх