как проверить, разрешена ли функция PHP system ()? и не отключен по соображениям безопасности

Я хотел бы знать, как проверить, разрешено ли на сервере () () или exec (). Я продолжаю получать эту ошибку «Предупреждение: exec () отключен из соображений безопасности в …»

Я понимаю, что функция safe_mode обесценивается в версии php, которую запускает мой провайдер (5.3.3), поэтому я не могу использовать проверку get_ini ('safe_mode').

Что еще делать?

Я использую это для резервного копирования. если поставщик разрешает систему, сценарий создает tar-файл и отправляет его мне, когда пользователь входит в систему.

Заранее спасибо.

Ну, его можно отключить только двумя способами: safe_mode или disable_functions .

Таким образом, вы можете сделать проверку:

 function isAvailable($func) { if (ini_get('safe_mode')) return false; $disabled = ini_get('disable_functions'); if ($disabled) { $disabled = explode(',', $disabled); $disabled = array_map('trim', $disabled); return !in_array($func, $disabled); } return true; } 

О, и function_exists должны возвращать true, поскольку это основная функция (иначе вы могли бы создать основную функцию и вызвать некоторый реальный хаос на хосте) … Поэтому is_callable также должен возвращать true (поскольку функция существует). Итак, единственные способы сказать, это проверить настройки ini или на самом деле назвать это …

Изменить: Еще одно замечание: есть несколько способов выполнения команд оболочки. Проверять, выписываться:

  • Функции выполнения программы
  • Оператор обратной связи

Тестирование отключенных функций и наличие безопасного режима, как показано на @ircmaxell, возможно, является самым простым способом.

Если вы хотите узнать 1000% достоверно, возможно ли выполнение системных команд – могут быть такие исправления безопасности, как Suhosin, которые блокируют это на другом уровне – попробуйте exec() внешнюю команду, которая будет работать на всех системах (включая Windows ) и крайне маловероятно, если пользовательские права будут очень жесткими.

Сказать

 cd . 

это должно работать (т. е. не возвращать false и возвращать код уровня ошибки 0 ), по крайней мере, во всех вариантах Linux, Windows и Unix, включая OS X.

Функция function_exists () не работает для этой ситуации?

http://fr.php.net/function_exists

exec () возвращает false, если он терпит неудачу, или строку успешного сообщения, если она преуспевает … поэтому следующее должно работать:

 if(!exec('cd .')){ die('ERROR: Exec is not available!!!'); } 

Замена для 'cd.' может быть любой функцией, которую вы знаете для работы в системе.