Wenn das PHP-Programm im abgesicherten Modus läuft, unterliegt das PHPSkript den folgenden vier Einschränkungen:
1), externe Befehle ausführen
2), beim Öffnen von Dateien gibt es einige Einschränkungen
3), Verbindung zur MySQL-Datenbank herstellen
4), HTTP-basierte Authentifizierung
Im abgesicherten Modus können nur externe Programme im spezifischen Verzeichnis ausgeführt werden und andere Programme
werden abgelehnt. Dieses Verzeichnis kann in der php.ini-Datei mit der Anweisung „safe_mode_exec_dir“ verwendet werden,
oder beim Kompilieren von PHP die Option --with-exec-dir
zur Angabe, der Standardwert ist /usr/local/php /bin.
Wenn Sie einen externen Befehl aufrufen, der das Ergebnis ausgeben können soll (was bedeutet, dass das PHP-Skript korrekt ist), erhalten Sie als Ergebnis
aber es ist leer. Dann ist es sehr möglich, dass PHP im abgesicherten Modus läuft.
Wie gehe ich mit dieser Situation um?
Um externe Befehle in PHP aufzurufen, können Sie die folgenden drei Methoden verwenden:
PHP bietet 3 spezialisierte Funktionen zur externen Ausführung Befehle:
system(), exec(), passhru().
system( )
Prototyp: string system (string command [, int return_var])
system()-Funktion ist sehr ähnlich in andere Sprachen Ähnlich verhält es sich: Es führt den angegebenen Befehl aus, gibt die Ergebnisse aus und gibt sie zurück.
Der zweite Parameter ist optional. wird verwendet, um den Statuscode abzurufen, nachdem der Befehl ausgeführt wurde.
Beispiel:
Code kopierenCode Wie folgt:
system("/usr/local/bin/webalizer/webalizer");
?>
exec()
Prototyp: string exec (string command [ , string array [, int return_var] ] )
Die Funktion exec() ähnelt system(). Sie führt den angegebenen Befehl ebenfalls aus, gibt jedoch nicht das Ergebnis aus, sondern gibt zurück die letzte Zeile des Ergebnisses.
Obwohl nur die letzte Zeile des Befehlsergebnisses zurückgegeben wird, kann das vollständige Ergebnis mithilfe des zweiten Parameterarrays erhalten werden Methode ist: Die Ergebnisse werden Zeile für Zeile an das Ende des Arrays angehängt. Wenn das Array also nicht leer ist , verwenden Sie am besten
unset(), um es vor dem Aufruf zu löschen. Nur wenn der zweite Parameter angegeben ist, kann der dritte Parameter verwendet werden, um den Statuscode der Befehlsausführung zu erhalten.
Beispiel:
Code kopieren
Code Wie folgt:exec("/bin/ls -l");exec("/bin/ls -l", $res ) ;
#$res sind Daten, jedes Element stellt eine Zeile des Ergebnisses darexec("/bin/ls -l", $res, $rc);#Der Wert von $rc ist der Befehl/ Der Statuscode von bin/ls -l. Im Erfolgsfall ist es normalerweise 0 🎜>
passthru()
passthru() ruft nur den Befehl auf und gibt keine Ergebnisse zurück Aber es gibt das laufende Ergebnis des Befehls direkt an den Standard aus
🎜>
auf dem Ausgabegerät.
Daher wird die Funktion passhru() oft verwendet, um pbmplus aufzurufen (ein Bildverarbeitungstool unter Unix
gibt den binären Originalbild-Stream aus )
so ein Programm. Es kann auch den Statuscode der Befehlsausführung abrufen.Beispiel: Code kopieren
Code Wie folgt:
header("Content-type: image/gif");passthru("./ppmtogif hunte.ppm");
?>Das Obige stellt die Zusammenfassung 1 der Methode zum Aufrufen einer externen Shell durch PHP vor, einschließlich des Inhalts. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.