Normalerweise kommt PHP ja als Scriptsprache zur Erstellung von Webseiten zum Einsatz. Wenn PHP-CLI installiert ist, kann PHP aber auch von der Kommandozeile aufgerufen werden. Wie werden nun Fehlermeldungen auf die Standardfehlerausgabe (stderr) geschrieben und Exit Codes zurückgegeben, wie es bei Linux-Shell-Scripten üblich ist? wie wird beispielsweise folgendes Bash-Script test.sh in PHP übersetzt:
#!/bin/bash
if [ $# -ne 1 ]; then
echo "Usage: $(basename $0) <word>" >&2
exit 1
fi
echo $1
$# enthält die Anzahl der Parameter, $0 den Kommandonamen und $1 den ersten Parameter. Wenn kein Parameter an das Kommando angehangen wird, wird eine Fehlermeldung auf die Standardfehlerausgabe geschrieben (‚>&2‘) und der Exit Code 1 zurückgegeben. Andernfalls wird der Parameter auf die Standardausgabe (stdout) ausgegeben. Folgende Ein- und Ausgaben auf der Kommandozeile verdeutlichen dies:
$ chmod +x test.sh
$ ./test.sh
Usage: test.sh <word>
$ echo $?
1
$ ./test.sh 2> /dev/null
$ ./test.sh foo
foo
Mit ‚chmod +x‘ wird das Script ausführbar gemacht. $? gibt den letzten Exit Code aus. Mit ‚2> /dev/null‘ kann eine Fehlermeldung von stderr nach /dev/null entsorgt werden.
In PHP würde das Script test.php so ausschauen:
#!/usr/bin/php
<?php
if ($argc != 2) {
fwrite(STDERR, 'Usage: ' . basename($argv[0]) . ' <word>' . "\n");
exit(1);
}
echo $argv[1] . "\n";
$argv[0] enthält den Kommandonamen und $argv[1] den ersten Parameter. $argc zählt nicht nur die vorhandenen Parameter, sondern auch den Kommandonamen mit, deswegen wird hier in der Bedingung auf die Zahl 2 geprüft. Mit fwrite() kann auf stderr geschrieben werden, und der Parameter von exit() enthält den Exit Status. Wichtig ist es, bei den Ausgaben jeweils noch einen Zeilenumbruch dranzuhängen, damit der Prompt wieder in der nächsten Zeile anfängt
Das PHP-Script verhält sich dann analog zum Bash-Script:
$ chmod +x test.php
$ ./test.php
Usage: test.php <word>
$ echo $?
1
$ ./test.php 2> /dev/null
$ ./test.php foo
foo