2010-05-01 16 views

Respuesta

34
if(function_exists('exec')) { 
    echo "exec is enabled"; 
} 
+0

¡funciona, gracias! –

+25

Esto es incorrecto: solo detectará si la función está disponible. La mayoría de los servidores lo desactivarán a través de INI, lo que significa que la función aún estará presente, pero emitirá una advertencia cuando se ejecute y no hará nada. Ver esta respuesta: http://stackoverflow.com/questions/3938120/check-if-exec-is-disabled – pospi

+3

@pospi Eso es una tontería; 'function_exists()' también verifica si una función está deshabilitada - [prueba] (http://lxr.php.net/xref/PHP_5_4/Zend/zend_builtin_functions.c#1349) –

48

Esto comprobará si la función funciona realmente (permisos, derechos, etc.):

if(exec('echo EXEC') == 'EXEC'){ 
    echo 'exec works'; 
} 
+2

Esta es en realidad una mejor respuesta :-) –

+1

pero aún arrojará un error de nivel de advertencia. – Umbrella

+0

Como @Umbrella dijo, definitivamente arrojará advertencias – Thamaraiselvam

2

Esto Exec compruebe que 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')) != 1 
; 


if($exec_enabled) { exec('blah'); } 
+0

tenga en cuenta que - ini_get ('safe_mode') puede devolver no solo" off " , pero también "" (cadena vacía) –

0

Este es un código feo que hice para detectar si una función está habilitada o no.

function is_enabled($f) 
{ 
    if($f=='ini_get')[email protected]_get('a')===false; 
    return(([email protected]_get('disable_functions'))===null||!is_callable($f)||!function_exists($f)||!in_array($f,array_map('trim',explode(',',$l))); 
} 

//Usage example: 
print_r(is_enabled('str_split'));//true or null if ini_get() is disabled 
5

ini_get ('disable_functions')

Lo que realmente quiere hacer es utilizar ini_get('disable_functions') para averiguar si está disponible para usted:

<?php 
function exec_enabled() { 
    $disabled = explode(',', ini_get('disable_functions')); 
    return !in_array('exec', $disabled); 
} 
?> 

contestadas en StackOverflow aquí: Check if "exec" is disabled, que en realidad parece provenir de la página de PHP Man: http://php.net/manual/en/function.exec.php#97187

Ruta

Si las anteriores declaraciones de verdaderos (se puede utilizar exec()), pero PHP todavía no puede desencadenar el guión hay una buena probabilidad de que usted tiene un problema de ruta de ese guión, probar esto haciendo:

print exec('which bash'); 

y luego tratar

print exec('which ogr2ogr'); 
0

estoy asumiendo que está ejecutando esto en un servidor Linux.

podría probar la función exec ejecutando el siguiente script PHP:

exec("whoami", $ret); 

echo $ret[0]; 

Esto devolverá el comando whoami.

Si se produce un error, es porque no se pudo ejecutar la función de ejecución.

1

Ejemplo:

if(strpos(ini_get('disable_functions'),'ini_set')===false) 
    @ini_set('display_errors',0); 
2

Es un poco difícil de encontrar exec función disponible hasta menos de comprobar todas las posibilidades

1. function_exist('exec')

2.Scanning través ini_get('disabled_functions)

3.Comprobación safe_mode permitió

function is_shell_exec_available() { 
    if (in_array(strtolower(ini_get('safe_mode')), array('on', '1'), true) || (!function_exists('exec'))) { 
     return false; 
    } 
    $disabled_functions = explode(',', ini_get('disable_functions')); 
    $exec_enabled = !in_array('exec', $disabled_functions); 
    return ($exec_enabled) ? true : false; 
} 

Esta función nunca lanza advertencias a menos ini_get función no inhabilitada.

Cuestiones relacionadas