¿Existe alguna función en PHP que pueda usar para detectar si la función exec
está disponible o no?Compruebe si "exec" está deshabilitado
Respuesta
<?php
function exec_enabled() {
$disabled = explode(',', ini_get('disable_functions'));
return !in_array('exec', $disabled);
}
?>
EDIT: Se arregló la explosión según el comentario de Ziagl.
Esto devuelve 'true' si' exec' está habilitado. –
es por eso que la función se llama exec_enabled, simplemente no es exactamente lo que pidió. – UltimateBrent
esto podría funcionar o no; desafortunadamente, en mi caso, encontré que 'ini_get()' estaba en la lista de funciones deshabilitadas junto con 'exec' y otras funciones del sistema de archivos; un escenario probable, dado que los proveedores de hosting podrían estar preocupados por exponer información en el archivo INI. –
Puede buscar en la configuración de ini disable_functions
para la función exec()
.
if(false !== strpos(ini_get("disable_functions"), "exec")) {
// exec() is disabled
simplemente para la corrección, tenga en cuenta que PHP Safe Mode pone algunas restricciones sobre la función también.
Demasiado lento como veo :) – svens
Esto devolverá la respuesta incorrecta si una función como 'shell_exec' se ha colocado en' disable_functions' pero 'exec' no. Es mejor usar explode o regex para asegurarse de que coincida con un completo nombre de función. – webbiedave
Vaya, es correcto. – svens
También es necesario comprobar si safe_mode está activo como ejecutivo no está disponible si safe_mode está en
function is_exec_available() {
// Are we in Safe Mode
if ($safe_mode = ini_get('safe_mode') && strtolower($safe_mode) != 'off')
return false;
// Is shell_exec disabled?
if (in_array('exec', array_map('trim', explode(',', ini_get('disable_functions')))))
return false;
return true;
}
La siguiente función es más robusto. Se trata del valor disabled_functions
que tiene 0 o más espacios entre los nombres de función, comprueba la configuración de la lista negra del parche suhosin, cubre safe_mode
y almacena la respuesta para referencia futura.
function is_exec_available() {
static $available;
if (!isset($available)) {
$available = true;
if (ini_get('safe_mode')) {
$available = false;
} else {
$d = ini_get('disable_functions');
$s = ini_get('suhosin.executor.func.blacklist');
if ("$d$s") {
$array = preg_split('/,\s*/', "$d,$s");
if (in_array('exec', $array)) {
$available = false;
}
}
}
}
return $available;
}
Para el registro, la edición que agregaba la lista negra suhosin fue por mí. Después de enviarla, me di cuenta de que mi sesión de autenticación estaba de alguna manera fuera de control. –
Existe una compilación de una línea de modo seguro, existe función y se desactivó el ejecutor utilizando algunas de las técnicas encontradas en varias publicaciones de SO.
Esto verificará que el ejecutor esté disponible y habilitado ANTES de intentar ejecutarlo. Si ejecuta exec() y la función no existe o está desactivada, se generará una advertencia. Dependiendo de la configuración del servidor que pueda mostrarse en el navegador, casi siempre escribirá una línea en un archivo de registro = golpe de rendimiento.
// Exec function exists.
// Exec is not disabled.
// Safe Mode is not on.
$exec_enabled =
function_exists('exec') &&
!in_array('exec', array_map('trim',explode(', ', ini_get('disable_functions')))) &&
!(strtolower(ini_get('safe_mode')) != 'off')
;
if ($exec_enabled) { exec('blah'); }
- 1. PHP exec: compruebe si está habilitado o deshabilitado
- 2. compruebe si NSNumber está vacío
- 3. ¿Cómo comprobar si javascript está deshabilitado?
- 4. ¿Cómo redirigir si javaScript está deshabilitado?
- 5. Jquery seleccionar todo si no está deshabilitado
- 6. iOS - detectando si Game Center está deshabilitado
- 7. Compruebe si la cadena está vacía
- 8. Compruebe si una matriz está vacía
- 9. compruebe si la 1ª opción está seleccionada
- 10. Compruebe si un puerto está abierto
- 11. OSX: compruebe si la pantalla está bloqueada
- 12. AS3: compruebe si un diccionario está vacío
- 13. Compruebe si OpenCV está compilado con TBB
- 14. WP7 compruebe si Internet está disponible
- 15. Compruebe si un archivo está abierto
- 16. Compruebe si el archivo ya está abierto
- 17. Compruebe si la consola está presente
- 18. Compruebe si $ _POST-value está vacío
- 19. Cómo detectar si Safari está deshabilitado en el iPhone
- 20. ¿Cómo saber si NSAssert está deshabilitado en versiones de lanzamiento?
- 21. jQuery Mobile cómo comprobar si el botón está deshabilitado?
- 22. Servidor SQL: verifique si un activador está habilitado o deshabilitado.
- 23. ¿Cómo comprobar si el menú desplegable está deshabilitado?
- 24. redirigir a otra página si javascript está deshabilitado
- 25. ¿Cómo verificar programáticamente si el hotspot está habilitado o deshabilitado?
- 26. compruebe si el programa se está ejecutando y ejecútelo si no está en perl
- 27. Compruebe si un usuario está desconectado en el dispositivo
- 28. compruebe si un archivo está abierto en Python
- 29. Extensión de Firefox: compruebe si la ventana está minimizada
- 30. compruebe si un dominio está disponible o no usando PHP?
¿por qué no intentar 'exec'? – Fosco
Estoy construyendo una aplicación web, y en la página de instalación, quiero verificar los requisitos. No puedo encontrar nada sobre lo que arroja 'exec' ... así que quería comprobar aquí. : P – esqew
'echo (int) function_exists ('exec');' –