web-dev-qa-db-fra.com

PHP exec - vérifier si activé ou désactivé

Existe-t-il un moyen de vérifier dans un script php si exec() est activé ou désactivé sur un serveur?

41
Adrian M.
if(function_exists('exec')) {
    echo "exec is enabled";
}
37
nc3b

Cela vérifiera si la fonction fonctionne réellement (autorisations, droits, etc.):

if(exec('echo EXEC') == 'EXEC'){
    echo 'exec works';
}
54
Michael D Price

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');
6
Duncanmoo

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'); }
3
Lance Cleveland

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.

3
Thamaraiselvam

Exemple:

if(strpos(ini_get('disable_functions'),'ini_set')===false) 
    @ini_set('display_errors',0);
1
Stergios Zg.

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.

0
tungpksa

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
0
Ismael Miguel