2014-02-05 21 views
7

Auf einigen Servern darf PHP Shell-Befehle nicht über shell_exec ausführen. Wie kann ich feststellen, ob der aktuelle Server es erlaubt, Shell-Befehle über PHP auszuführen oder nicht? Wie kann ich die Ausführung von Shell-Befehlen über PHP aktivieren?PHP - Wissen, ob Server erlaubt shell_exec

+0

'Wie kann ich die Ausführung von Shell-Befehlen über PHP aktivieren?' Nur in der Root-Konfiguration. Es ist eine Sicherheitsfunktion. –

+2

' ' – DanFromGermany

Antwort

9

Prüfen Sie zuerst, dass es aufrufbar ist und dann, dass es nicht deaktiviert ist:

is_callable('shell_exec') && false === stripos(ini_get('disable_functions'), 'shell_exec'); 

Dieser allgemeine Ansatz für jede integrierte Funktion funktioniert, so dass Sie es genericize können:

function isEnabled($func) { 
    return is_callable($func) && false === stripos(ini_get('disable_functions'), $func); 
} 
if (isEnabled('shell_exec')) { 
    shell_exec('echo "hello world"'); 
} 

Hinweis stripos zu verwenden , weil PHP-Funktionsnamen Groß- und Kleinschreibung nicht beachten.

+0

Und Sie sollten wahrscheinlich prüfen, ob Safe-Mod auch aktiviert ist. –

+1

@ChristopherWill: [Abgesicherter Modus ist in 5.3 veraltet und wirft ein fatales in 5.4] (http://php.net/manual/en/features.safe-mode.php), also habe ich es nicht eingeschlossen. Fehle ich etwas, indem ich es nicht einschließe (außer offensichtlich für <= 5.2, aber das ist EOL)? – bishop

+1

Ah, ich wusste gar nicht, dass das veraltet ist. Danke für das Update. Ich denke, das war's. –

2

können Sie überprüfen die availablility der Funktion selbst:

if(function_exists('shell_exec')) { 
    echo "exec is enabled"; 
} 

By the way: Gibt es eine spezielle Anforderung verwenden '' shell_exec '' statt '' exex ''?

php.net

Note: 
This function can return NULL both when an error occurs or the program 
produces no output. It is not possible to detect execution failures using 
this function. exec() should be used when access to the program exit code 
is required. 

EDIT # 1

Wie DanFromGermany wies darauf hin, werden Sie wahrscheinlich dann prüfen, ob es ausführbar ist. So etwas wie dies tun würde, es

if(shell_exec('echo foobar') == 'foobar'){ 
    echo 'shell_exec works'; 
} 

EDIT # 2

Wenn das obige Beispiel Warnungen erzeugen können Sie es in einer geeigneteren Weise tun könnte. Nur see this SO answer.

+1

Nein. Die Funktion ist deaktiviert, aber sie existiert. Das funktioniert nicht. – DanFromGermany

+0

-1 'function_exists' reicht nicht aus, um" enable "zu testen und' shell_exec' aufzurufen, um zu sehen, ob es "funktioniert". – bishop

+0

@Bischof Ja, Sie haben völlig Recht. Deshalb habe ich meine Antwort aktualisiert und einen Hinweis auf eine nette SO-Antwort eingefügt. –

Verwandte Themen