Ausführen von PHP-Dateien
Es gibt drei verschiedene Wege, PHP-Code in der CLI SAPI auszuführen:
-
PHP mitteilen, eine bestimmte Datei auszuführen.
Beide Wege (ob sie die Option -f verwenden oder nicht)
führen die Datei my_script.php aus. Es gibt keine
Einschränkungen darauf, welche Dateien ausgeführt werden können;
beispielsweise muss ihr PHP-Skript nicht auf .php
enden.
Hinweis:
Wenn Sie Argumente an das Skript übergeben wollen, müssen Sie als
erstes Argument --
übergeben, wenn Sie die
-f Option verwenden.
-
Den auszuführenden PHP-Code direkt auf der Kommandozeile angeben.
Es muss besonders Acht auf die Ersetzung von Kommandozeilenvariablen und
Benutzung von Anführungszeichen gegeben werden.
Hinweis:
Achten Sie darauf, dass sie keine PHP-Tags übergeben. Die Option
-r benötigt diese nicht und löst einen Parser-Fehler
aus, falls sie dennoch verwendet werden.
-
Eingabe des PHP-Codes über die Standardeingabe
(stdin
).
Dies eröffnet die Möglichkeit, PHP dynamisch zu generieren und
anschließend an die Binary zu übergeben, wie in diesem (ausgedachten)
Beispiel dargestellt:
Die drei Möglichkeiten zur Codeausführung können nicht kombiniert werden.
Wie jede Kommandozeilenanwendung nimmt das PHP-Binary etliche Argumente
entgegen, aber auch das PHP-Skript kann Argumente entgegennehmen. Die
Anzahl der Argumente, die an ein Skript übergeben werden können, ist nicht
von PHP beschränkt (aber die Kommandozeilenumgebung hat ein bestimmtes
Größenlimit für die Anzahl der Argumente, die übergeben werden können;
normalerweise werden Sie dieses Limit nicht erreichen). Die Argumente, die
dem Skript übergeben werden, sind in dem globalen Array
$argv gespeichert. Der erste Index (Null) enthält immer
den Skriptnamen. Wenn der Code mittels der Option -r
ausgeführt wurde, ist der Wert von $argv[0] ein
Bindestrich (-
). Selbiges gilt für Code, welcher über
STDIN
ausgeführt wird.
Die zweite registrierte globale Variable ist $argc,
welche die Anzahl der Elemente im Array $argv enthält,
(nicht die Anzahl Argumente, die dem
Skript übergeben wurden).
Solange die Argumente, welche dem Skript übergeben werden, nicht mit dem
Zeichen -
beginnen, gibt es nichts besonderes zu
beachten. Ein Argument, welches mit -
beginnt zu
übergeben, wird jedoch Probleme bereiten, da PHP denkt, dass es das
Argument selbst verarbeiten muss. Nutzen Sie das Argument-Trennzeichen
--
, um dies zu vermeiden. Nachdem dieses Trennzeichen
von PHP geparst wurde, wird jedes folgende Argument unangetastet an das
Skript weitergereicht.
Es gibt auf Unix-Systemen jedoch einen weiteren Weg, um PHP für
Kommandozeilenskripte zu verwenden. Sie können ein Skript erstellen, in dem
die erste Zeile mit #!/usr/bin/php
beginnt. Nachfolgend
können Sie normalen PHP-Code innerhalb der PHP-Start- und -End-Tags
verwenden. Sobald Sie die Datei ausführbar gemacht haben (beispielsweise
mittels chmod +x test), kann Ihr Skript wie ein normales
Kommandozeilen- oder Perl-Skript gestartet werden.
Beispiel #1 PHP als Shellskript ausführen
#!/usr/bin/php
<?php
var_dump($argv);
?>
Angenommen, die Datei heißt test und befindet sich im
aktuellen Verzeichnis, dann können wir nun folgendes tun:
$ chmod +x test
$ ./test -h -- foo
array(4) {
[0]=>
string(6) "./test"
[1]=>
string(2) "-h"
[2]=>
string(2) "--"
[3]=>
string(3) "foo"
}
Wie Sie sehen können, müssen Sie sich in diesem Fall um nichts weiter
kümmern, wenn Sie Ihrem Skript Paramater übergeben, die mit
-
beginnen.
Die ausführbare PHP-Datei kann verwendet werden, um PHP-Skripte vollkommen
unabhängig von einem Webserver auszuführen. Auf Unix-Systemen, sollte die
spezielle #!
("shebang") erste Zeile zu PHP-Skripten
hinzugefügt werden, damit das System automatisch herausfinden kann, welches
Programm zur Ausführung der Datei genutzt werden soll. Auf einem
Windows-System können Sie php.exe mit der
Doppelklick-Option von .php
-Dateien verknüpfen. Sie
können auch eine Batchdatei erstellen, um das Skript von PHP ausführen zu
lassen. Die erste Zeile, die dem Skript hinzugefügt wird, damit es unter
UNIX läuft, stört unter Windows nicht, so dass Sie auf diese Weise
problemlos plattformübergreifende Programme schreiben können. Sie finden
anschließend ein einfaches Beispiel, wie man ein Kommandozeilenprogramm in
PHP schreibt.
Beispiel #2 Ein Skript, das von der Kommandozeile aus ausgeführt werden soll (script.php)
#!/usr/bin/php
<?php
if ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
?>
Das ist ein Kommandozeilenprogramm in PHP mit einer Option.
Verwendung:
<?php echo $argv[0]; ?> <option>
<option> kann ein Wort sein, das Sie gerne
ausgeben möchten. Mit den Optionen --help,
-help, -h oder -? bekommen Sie diese Hilfe.
<?php
} else {
echo $argv[1];
}
?>
In dem oben beschriebenen Skript haben wir die erste Zeile dazu verwendet,
anzugeben, dass die Datei von PHP ausgeführt werden soll. Wir arbeiten hier
mit einer CLI-Version, deswegen werden keine
HTTP-Header ausgegeben.
In dem obigen Programm wird zuerst überprüft, ob das notwendige Argument
angeben ist (zusätzlich zum Skriptnamen, welcher auch gezählt wird). Wenn
nicht, oder wenn das Argument --help,
-help, -h oder -? war,
wird eine Hilfe-Nachricht ausgegeben, welche $argv[0]
nutzt, um den genutzten Skript-Namen auszugeben. Andernfalls wird das
Argument ausgegeben, genauso wie es übergeben wurde.
Wenn Sie das obige Skript unter UNIX laufen lassen wollen, müssen Sie es
zuerst ausführbar machen, und es danach einfach als script.php
GebeDasHierAus oder script.php -h aufrufen.
Unter Windows können Sie zu diesem Zweck eine Batchdatei erstellen:
Beispiel #3 Batchdatei zur Ausführung eines Kommandozeilen-Skripts in PHP (script.bat)
@echo OFF
"C:\php\php.exe" script.php %*
Angenommen, Sie haben das Programm script.php genannt
und die CLI php.exe hat den Pfad
C:\php\php.exe, so wird diese Batchdatei es mit allen
übergebenen Argumenten aufrufen: script.bat
GebeDasHierAus oder script.bat -h.
Siehe auch die Readline-Erweiterung für
weitere Funktionen, um Kommandozeilenanwendungen zu verbessern.
Auf Windows kann PHP so konfiguiert werden, dass auch ausgeführt wird, wenn
weder C:\php\php.exe angegeben wird, noch die
.php
Dateierweiterung genutzt wird. Siehe dazu die
Dokumentation zur PHP-Kommandozeile auf
Microsoft Windows.
Hinweis:
Unter Windows wird empfohlen, PHP unter einem echten User-Account
auszuführen. Wird es unter einem Netzwerk-Account ausgeführt, werden
bestimmte Operationen fehlschlagen, weil "keine Zuordnung zwischen
Kontennamen und Sicherheits-IDs erfolgte".