2010-05-01 2 views

risposta

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

funziona, grazie! –

+25

Non è corretto: rileverà solo se la funzione è disponibile. La maggior parte dei server la disabiliterà tramite INI, il che significa che la funzione sarà ancora presente ma lancia un avvertimento quando è in esecuzione e non fa nulla. Vedere questa risposta: http://stackoverflow.com/questions/3938120/check-if-exec-is-disabled – pospi

+3

@pospi Questo non ha senso; 'function_exists()' controlla anche se una funzione è disabilitata - [proof] (http://lxr.php.net/xref/PHP_5_4/Zend/zend_builtin_functions.c#1349) –

48

Ciò verificare se la funzione funziona davvero (permessi, diritti, ecc):

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

Questa è in realtà una risposta migliore :-) –

+1

ma causerà comunque un errore di livello di avviso. – Umbrella

+0

Come ha detto @Umbrella, sicuramente invierà avvisi – Thamaraiselvam

2

Questo controllerà che exec è disponibile e ha permesso prima di provare a eseguirlo. Se si esegue exec() e la funzione non esiste o è disabilitata, verrà generato un avviso. A seconda delle impostazioni del server che possono essere visualizzate sul browser e scrivono quasi sempre una riga su un file di registro = hit delle prestazioni.

// 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

nota: ini_get ('safe_mode') può restituire non solo" off " , ma anche "" (stringa vuota) –

0

Questo è un brutto codice che ho creato per rilevare se una funzione è abilitata o meno.

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')

cosa si vuole realmente fare è usare ini_get('disable_functions') per scoprire se si è a vostra disposizione:

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

rispose StackOverflow qui: Check if "exec" is disabled, che in realtà sembra provenire dalla pagina Man di PHP: http://php.net/manual/en/function.exec.php#97187

Percorso

Se i rendimenti superiori veri (è possibile utilizzare exec()), ma PHP non è ancora possibile attivare lo script c'è una buona probabilità che hai un problema di percorso per lo script, testare questo facendo:

print exec('which bash'); 

e quindi provare

print exec('which ogr2ogr'); 
0

io parto dal presupposto che si esegue questo su un server Linux.

Si potrebbe verificare la funzione exec eseguendo il seguente script php:

exec("whoami", $ret); 

echo $ret[0]; 

Ciò restituirà il comando whoami.

Se si verifica un errore, è perché la funzione exec non può essere eseguita.

1

Esempio:

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

E 'un po' difficile da trovare exec funzione disponibile fino a meno che il controllo di tutte le possibilità

1. function_exist('exec')

2.Scanning attraverso ini_get('disabled_functions)

3.Controllo safe_mode abilitato

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; 
} 

Questa funzione non getta avvertimenti a meno ini_get funzione non disabilitata.