Heim >Backend-Entwicklung >PHP-Tutorial >Einfache Analyse der Ausführungsfunktionen von PHP-Systemprogrammen (System, Durchgang, Exec) (mit Code)
Dieser Artikel stellt Ihnen eine einfache Analyse der PHP-Systemprogrammausführungsfunktionen (System, Durchgang, Exec) vor (mit Code). Ich hoffe, dass er hilfreich ist Du hast geholfen.
exec – ein externes Programm ausführen
string exec ( string $command [, array &$output [, int &$return_var ]] )
Beispiel
<?php echo exec("ls",$output); echo "</br>"; print_r($file); ?>
Ausführungsergebnis:
test.php
Array( [0] => index.php [1] => test.php)
Analyse:
exec gibt das Ausführungsergebnis nicht aktiv zurück, sondern nur die letzte Zeile des Ergebnisses;
Wenn Sie das vollständige Ergebnis erhalten möchten, benötigen Sie einen zweiten Parameter, um es an auszugeben Das angegebene Array stellt eine Ausgabezeile dar. Wenn verschiedene externe Systembefehle wiederholt ausgeführt werden, wird das unset()-Array bei der Ausgabe der Ergebnisse jedes externen Systembefehls gelöscht, um Verwirrung zu vermeiden Der Parameter wird verwendet, um die Befehlsausführung zu erhalten. Der Statuscode gibt normalerweise 0 zurück, wenn die Ausführung erfolgreich ist.
passthru – Führen Sie ein externes Programm aus und zeigen Sie die Rohausgabe an
void passthru ( string $command [, int &$return_var ] )Beispiel<?php passthru("ls"); ?>Ausführungsergebnis:
Ähnlich wie die exec()-Funktion wird sie auch zur externen Ausführung verwendet Befehle, aber direkt Das Ergebnis wird an den Browser ausgegeben (Rohausgabe ohne Verarbeitung), ohne Rückgabewert
Verwenden Sie diese Funktion, wenn Binärdaten ausgegeben und direkt an den Browser gesendet werden müssen, z. B. direkt Ausgabe des Bildstreams Befehl;
system – Führen Sie ein externes Programm aus und zeigen Sie die Ausgabe an
Stringsystem ( string $command [, int &$return_var ] )<?php system('ls', $retval); ?>Analyse:
Geben Sie die Ergebnisse direkt an den Browser aus.
Der zweite Parameter ist der Rückgabestatus nach der Ausführung des externen Befehls.
Geben Sie bei Erfolg die letzte Zeile der Befehlsausgabe zurück Geben Sie FALSE zurück, wenn es fehlschlägt.
Wenn PHP im Servermodul ausgeführt wird und die Funktion system() auch versucht, den Ausgabecache des Webservers nach jeder Ausgabezeile automatisch zu aktualisieren.
shell_exec – Führen Sie den Befehl über die Shell-Umgebung aus und geben Sie die vollständige Ausgabe als Zeichenfolge zurück.
ErklärungString Shell_exec (String $cmd)
Der Backtick-Operator „`“ hat die gleiche Wirkung wie die Funktion Shell_exec().
Rückgabewert von shell_exec
Wenn während der Prozessausführung ein Fehler auftritt oder der Prozess keine Ausgabe erzeugt, wird NULL zurückgegeben. Daher kann die Verwendung dieser Funktion anhand des Rückgabewerts nicht erkennen, ob der Prozess erfolgreich ausgeführt wurde. Wenn Sie den Exit-Code einer Prozessausführung überprüfen müssen, verwenden Sie die Funktion exec().
<?php $output = `ls -al`; echo "<pre class="brush:php;toolbar:false">$output"; ?>Hinweis:
Der Backtick-Operator hat keine Wirkung, wenn der abgesicherte Modus aktiviert oder shell_exec() deaktiviert ist.
Im Gegensatz zu einigen anderen Sprachen können Backticks nicht in Zeichenfolgen in doppelten Anführungszeichen verwendet werden.
Diese Funktion kann nicht verwendet werden, wenn PHP im abgesicherten Modus ausgeführt wird.
<?php $output = shell_exec('ls -lart'); echo "<pre class="brush:php;toolbar:false">$output"; ?>
escapeshellargBeschreibung
string escapeshellarg ( string $arg )
escapeshellarg() fügt der Zeichenfolge ein einfaches Anführungszeichen hinzu und kann jedes vorhandene The in Anführungszeichen setzen oder maskieren Das Vorhandensein einfacher Anführungszeichen stellt sicher, dass eine Zeichenfolge direkt an die Shell-Funktion übergeben werden kann und dennoch sicher ist. Diese Funktion sollte für einige vom Benutzer eingegebene Parameter verwendet werden. Zu den Shell-Funktionen gehören die Ausführungsoperatoren exec() und system().
arg
Der Parameter, der transkodiert werden muss.
String nach der Konvertierung.
<?php system('ls '.escapeshellarg($dir)); ?>
escapeshellcmdErklärung
string escapeshellcmd ( string $command )
escapeshellcmd() kann Shell-Befehle in Zeichenfolgen betrügen, die Escape-Zeichen enthalten beliebige Befehle ausführen. Diese Funktion stellt sicher, dass vom Benutzer eingegebene Daten maskiert werden, bevor sie an die Funktion exec() oder system() oder den Ausführungsoperator übergeben werden.
Parameter
Befehl
Der Befehl zum Escape.
Escape-String-Beispiel
<?php // 我们故意允许任意数量的参数 $command = './configure '.$_POST['configure_options']; $escaped_command = escapeshellcmd($command); system($escaped_command); ?>Warnung
escapeshellcmd() sollte auch für den gesamten Befehlsstring verwendet werden. In diesem Fall kann der Angreifer immer noch eine beliebige Anzahl von Parametern übergeben die Funktion escapeshellarg(), um einen einzelnen Parameter zu maskieren
Empfohlene verwandte Artikel:
Beispielcode für die Methode _get in PHP
Zusammenfassung verschiedener Möglichkeiten, Dateien in PHP (mit Code) zu bedienen
Das obige ist der detaillierte Inhalt vonEinfache Analyse der Ausführungsfunktionen von PHP-Systemprogrammen (System, Durchgang, Exec) (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!