Was sind die Unterschiede?
Gibt es für jede Funktion eine bestimmte Situation oder einen bestimmten Grund? Wenn ja, können Sie einige Beispiele für diese Situationen nennen?
PHP.net sagt, dass sie verwendet werden, um externe Programme auszuführen. siehe Referenz Aus den Beispielen, die ich sehe, sehe ich keinen offensichtlichen Unterschied.
Wenn ich einfach ein Skript (Bash oder Python) ausführen würde, welche Funktion empfehlen Sie mir?
proc_open()
undpopen()
, die beide ein höheres Maß an Kontrolle über den erzeugten Prozess ermöglichen.Antworten:
Sie haben etwas andere Zwecke.
exec()
dient dazu, einen Systembefehl aufzurufen und die Ausgabe möglicherweise selbst zu bearbeiten.system()
dient zur Ausführung eines Systembefehls und zur sofortigen Anzeige der Ausgabe - vermutlich von Text.passthru()
dient zum Ausführen eines Systembefehls, von dem Sie die rohe Rückkehr wünschen - vermutlich etwas Binäres.Unabhängig davon schlage ich vor, dass Sie keine von ihnen verwenden. Sie alle produzieren höchst unsportierbaren Code.
quelle
izkata@izein:~$ dir -bash: dir: command not found
- FreeBSDexec
,system
,passthru
. PHP-Code hängt von der Umgebung ab, in der er ausgeführt wird, und viele Sicherheitslücken sind darauf zurückzuführen, dass dies nicht berücksichtigt wird. Hier ist ein kurzes Beispiel: stackoverflow.com/questions/3003145/…Wie aus http://php.net/ && Chipmunkninja entnommen :
quelle
Die vorherigen Antworten scheinen alle etwas verwirrend oder unvollständig zu sein. Hier ist eine Tabelle der Unterschiede ...
Andere verschiedene Dinge, die Sie beachten sollten:
quelle
include
und FreundeEs kommt wirklich darauf an, wie Sie mit der Ausgabe umgehen möchten, die der Befehl möglicherweise zurückgibt, und ob Ihr PHP-Skript warten soll, bis das Angerufene-Programm beendet ist oder nicht.
exec
führt einen Befehl aus und übergibt die Ausgabe an den Aufrufer (oder gibt sie in einer optionalen Variablen zurück).passthru
ist derexec()
Funktion insofern ähnlich , als sie einen Befehl ausführt. Diese Funktion sollte anstelle vonexec()
oder verwendet werden,system()
wenn die Ausgabe des Unix-Befehls Binärdaten sind, die direkt an den Browser zurückgegeben werden müssen.system
führt ein externes Programm aus und zeigt die Ausgabe an, aber nur die letzte Zeile.Wenn Sie einen Befehl ausführen müssen und alle Daten des Befehls ohne Störung direkt zurückgeben müssen, verwenden Sie die
passthru()
Funktion.quelle
Wenn Sie Ihr PHP-Skript über die Befehlszeile ausführen,
passthru()
hat dies einen großen Vorteil. Damit können Sie Skripte / Programme wie zvim
.dialog
usw., diese Programme Griff - Steuerung und die Rückkehr in das Skript zu lassen , nur wenn sie fertig sind.Wenn Sie
system()
oder verwendenexec()
diese Skripte / Programme ausführen, funktioniert dies einfach nicht.Gotcha: Aus irgendeinem Grund können Sie nicht
less
mitpassthru()
in PHP ausführen .quelle