not - php exec vs passthru
Compruebe si "exec" está deshabilitado (5)
Existe una compilación de una línea de modo seguro, función y exec deshabilitado que utiliza algunas de las técnicas que se encuentran en varias publicaciones de SO.
Esto comprobará que exec esté disponible y habilitado ANTES de intentar ejecutarlo. Si ejecuta exec () y la función no existe o está deshabilitada, se generará una advertencia. Dependiendo de la configuración del servidor que pueda mostrarse en el navegador y casi siempre escribirá una línea en un archivo de registro = impacto 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''); }
Esta pregunta ya tiene una respuesta aquí:
- PHP exec - Marque si habilitado o deshabilitado 8 respuestas
¿Hay alguna función en PHP que pueda usar para detectar si la función exec
está disponible o no?
La siguiente función es más robusta. Trata el valor de disabled_functions
que tiene 0 o más espacios entre los nombres de funciones, verifica la configuración de la lista negra del parche suhosin, cubre el modo safe_mode
y almacena la respuesta para futuras referencias.
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;
}
Puede buscar en la configuración ini disable_functions
para la función exec()
.
if( false !== strpos(ini_get("disable_functions"), "exec") ) {
// exec() is disabled
Solo para completar, tenga en cuenta que el Modo seguro de PHP también impone algunas restricciones a la función.
También debe comprobar si safe_mode está activo, ya que exec no está disponible si safe_mode está activado
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;
}
<?php
function exec_enabled() {
$disabled = explode('','', ini_get(''disable_functions''));
return !in_array(''exec'', $disabled);
}
?>
EDITAR: Se corrigió la explosión según el comentario de Ziagl.