PHP

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

Ковырялся как-то в очередном сплойте, которым скрипткиддисы пытались проломить блог. Среди всякого говна нашел там интересную идею о проверке доступности функций PHP перед их вызовом. Реализация была такая же кривая, как и весь остальной код этих быдлохакеров, поэтому я переписал функцию проверки по-своему. Проверка выполняется тремя способами: анализом значения параметра disable_functions в файле php.ini, а также через функции PHP function_exists и is_callable. Использование всех трех способов проверки дает абсолютно точный результат.
//--------------------------------------------------------------------------
// Функция проверки существования и доступности другой функции PHP
//--------------------------------------------------------------------------
// Параметры: $func - строка имени функции
// На выходе: true - функция есть и доступна для вызова,
//            false - функция недоступна по какой-либо причине
//--------------------------------------------------------------------------
function is_function_enabled($func) {
    $func=strtolower(trim($func));
    if ($func=='') return false;
    // Получить список функций, отключенных в php.ini
    $disabled=explode(",",@ini_get("disable_functions"));
    if (empty($disabled)) {
        $disabled=array();
    }
    else {
        // Убрать пробелы и привести названия к нижнему регистру
        $disabled=array_map('trim',array_map('strtolower',$disabled));
    }
    // Проверить доступность функции разными способами
    return (function_exists($func) && is_callable($func) &&
            !in_array($func,$disabled)
    );
}

Пример использования:
// Проверка доступности функции shell_exec
if (is_function_enabled('shell_exec')) {
    echo shell_exec('ping yandex.ru');
}

Функцию можно использовать, например, для проверки доступности нужных вам функций на различных бесплатных хостингах с ограничениями, или для выбора функции взаимодействия с операционной системой, типа shell_exec, если часть из них по какой-то причине запрещены.
Теги:
доступ, функция, function_exists, is_callable, shell_exec
Добавлено: 21 Сентября 2013 01:20:12 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...