Ковырялся как-то в очередном сплойте, которым скрипткиддисы пытались проломить блог. Среди всякого говна нашел там интересную идею о проверке доступности функций 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, если часть из них по какой-то причине запрещены.