Blog. Just Blog

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

Версия для печати Добавить в Избранное Отправить на E-Mail 23.09.2010 | Категория: 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) Поделиться ссылкой на Friendfeed Добавить в Яндекс.Закладки Добавить в закладки Memori Добавить в закладки Google
Просмотров: 1974 | Комментариев: 3

Комментарии

Отзывы посетителей сайта о статье
Александр (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-2012
При использовании материалов ссылка на сайт обязательна
Время генерации: 0,31 сек. / MySQL: 2 (0,0013 сек.) / Память: 3,5 Mb
Наверх