Heim  >  Artikel  >  Backend-Entwicklung  >  Einfache Analyse der Ausführungsfunktionen von PHP-Systemprogrammen (System, Durchgang, Exec) (mit Code)

Einfache Analyse der Ausführungsfunktionen von PHP-Systemprogrammen (System, Durchgang, Exec) (mit Code)

不言
不言Original
2018-08-03 11:43:323255Durchsuche

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:


index.phptest.php

Analyse:

Ä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(&#39;ls&#39;, $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ärung

String 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().

Beispiel

<?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.

Beispiel #1 Shell_exec()-Routine

Diese Funktion kann nicht verwendet werden, wenn PHP im abgesicherten Modus ausgeführt wird.

<?php
$output = shell_exec(&#39;ls -lart&#39;);
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().

Parameter

arg
Der Parameter, der transkodiert werden muss.

Rückgabewert

String nach der Konvertierung.

Beispiel

<?php
system(&#39;ls &#39;.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.

Backslash() wird vor den folgenden Zeichen eingefügt: `|*?~a8093152e673feb7aba1828c43532094^()[]{}$, x0A und xFF. ' und " werden nur maskiert, wenn sie nicht übereinstimmen. Auf Windows-Plattformen werden alle diese Zeichen sowie die Zeichen % und ! durch Leerzeichen ersetzt.

Parameter
Befehl
Der Befehl zum Escape.

Rückgabewert

Escape-String-Beispiel

<?php
// 我们故意允许任意数量的参数
$command = &#39;./configure &#39;.$_POST[&#39;configure_options&#39;];
$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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn