C'è un modo per registrare uno script php se exec()
è abilitato o disabilitato su un server?PHP exec - verificare se abilitato o disabilitato
risposta
if(function_exists('exec')) {
echo "exec is enabled";
}
funziona, grazie! –
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
@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) –
Ciò verificare se la funzione funziona davvero (permessi, diritti, ecc):
if(exec('echo EXEC') == 'EXEC'){
echo 'exec works';
}
Questa è in realtà una risposta migliore :-) –
ma causerà comunque un errore di livello di avviso. – Umbrella
Come ha detto @Umbrella, sicuramente invierà avvisi – Thamaraiselvam
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'); }
nota: ini_get ('safe_mode') può restituire non solo" off " , ma anche "" (stringa vuota) –
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
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');
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.
Esempio:
if(strpos(ini_get('disable_functions'),'ini_set')===false)
@ini_set('display_errors',0);
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.
Cosa intendi per * "abilitato o disabilitato" *? –