Existe-t-il un moyen de vérifier dans un script php si exec()
est activé ou désactivé sur un serveur?
if(function_exists('exec')) {
echo "exec is enabled";
}
Cela vérifiera si la fonction fonctionne réellement (autorisations, droits, etc.):
if(exec('echo EXEC') == 'EXEC'){
echo 'exec works';
}
ini_get ('disable_functions')
Ce que vous voulez réellement faire, c'est utiliser ini_get('disable_functions')
pour savoir si elle est disponible pour vous:
<?php
function exec_enabled() {
$disabled = explode(',', ini_get('disable_functions'));
return !in_array('exec', $disabled);
}
?>
Répondu sur stackoverflow ici: Vérifiez si "exec" est désactivé , qui semble en fait provenir de la page de manuel PHP: http: // php. net/manual/en/function.exec.php # 97187
Chemin
Si ce qui précède renvoie true (vous pouvez utiliser exec ()), mais PHP ne peut toujours pas déclencher le script, il y a de fortes chances que vous ayez un problème de chemin pour ce script, testez-le en faisant :
print exec('which bash');
puis essayez
print exec('which ogr2ogr');
Cela vérifiera que l'exec est disponible et activé AVANT d'essayer de l'exécuter. Si vous exécutez exec () et que la fonction n'existe pas ou est désactivée, un avertissement sera généré. Selon les paramètres du serveur qui peuvent s'afficher dans le navigateur et écrire presque toujours une ligne dans un fichier journal = performance hit.
// 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'); }
Il est un peu difficile de trouver la fonction exec
disponible jusqu'à ce que toutes les possibilités soient vérifiées
1 .function_exist('exec')
2. Numérisation via ini_get('disabled_functions)
3.Vérification safe_mode
activée
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;
}
Cette fonction ne lance jamais d'avertissement à moins que ini_get
fonction non désactivée.
Exemple:
if(strpos(ini_get('disable_functions'),'ini_set')===false)
@ini_set('display_errors',0);
Je suppose que vous exécutez cela sur un serveur Linux.
Vous pouvez tester la fonction exec en exécutant le script php suivant:
exec("whoami", $ret);
echo $ret[0];
Cela renverra la commande whoami.
S'il fait une erreur, c'est parce que la fonction exec n'a pas pu s'exécuter.
Ceci est un code laid que j'ai créé pour détecter si une fonction est activée ou non.
function is_enabled($f)
{
if($f=='ini_get')return@ini_get('a')===false;
return(($l=@ini_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