Samstag, 30. August 2008

entwickler.com Magazine Konferenzen Entwickler Akademie Entwickler-Forum Jobbörse Bücher
Software & Support Verlag

PHP für die Konsole

PHP ist als Servertechnologie für die Erstellung dynamischer Webseiten bestens bekannt. Seit Version 4.3.0 (erschienen Ende 2002) können Sie mit PHP aber auch Shell-Skripte erstellen – im Prinzip genauso, wie das mit Sprachen wie Perl, Python und Ruby möglich ist. Wenn Sie auf der Kommandozeile php -v aufrufen, erscheint folgende Ausgabe (vorausgesetzt, Sie verwenden Version 4.3 oder höher):


ich@meinrechner:~> php -v
PHP 4.3.10 (cli) (built: Mar 22 2005 19:34:44)
...

Wichtig ist hier: PHP 4.3.10 (cli). Das unscheinbare Kürzel cli (bedeutet command line interface) deutet daraufhin, dass Sie PHP auf der Konsole verwenden dürfen. Ein PHP-Skript muss dann logischerweise den Pfad zum Interpreter kennen (die sogenannte Shebang-Zeile). In der Regel sieht die erste Zeile eines Skriptes so aus: #!/usr/bin/php. Sie ermitteln den Interpreter-Pfad mit:

ich@meinrechner:~> which php
/usr/bin/php

Im Beispiel befindet sich der Interpreter bereits im Pfad, weshalb die Shebang-Zeile entfallen kann (mit echo $PATH ermitteln Sie, welche Verzeichnisse im Pfad stehen). Hier das erste Beispiel für ein Konsolen-Skript (Achtung: für alle Skripte wurde PHP 4.3.10 unter Suse 9.3 verwendet).:

#!/usr/bin/php

<?php
print "Hallo Bash!" . "\n";
print date("d.m.Y.") . "\n";
?>

Speichern Sie das Skript als first.php und rufen Sie es auf:

ich@meinrechner:~> php first.php

Hallo Bash!
24.10.2005.


Das nächste Skript baut eine Verbindung zu einer Datenbank auf (MySQL, Server-Version 4.1.10a). Auf diese Weise lässt sich überprüfen, ob der MySQL-Server am Standardport 3306 lauscht (Datei db_checker.php).

#!/usr/bin/php

<?php
class CheckDB {

var $host = "localhost";
var $user = "root";

function check_db($pass) {

$conn = mysql_connect($this->host, $this->user, $pass);
if (empty($conn)) {
die("\nmysqli_connect error\n");
exit();
}

echo "*** " . mysql_get_host_info() . " ***\n";
mysql_close($conn);
}

} // end class

function main($pass) {
$db = new CheckDB();
$db->check_db($pass);
}

# start script
echo "Enter passwd > ";
main(trim(fgets(STDIN)));
?>

Einige Anmerkungen: wie gesagt, das Skript stellt eine Verbindung zum Datenbank-Server her und teilt mit, auf welche Weise die Verbindung zustande kam. In der main()-Funktion wird eine Instanz der Klasse CheckDB erzeugt und anschließend deren einzige Methode aufgerufen.
Unter dem Kommentar # start script befindet sich der Code zum Einlesen des Passworts von der Kommandozeile. Mit trim() sorgen Sie dafür, dass die eingegebene Zeichenkette sauber eingelesen wird; mit fgets(), die Funktion wurde von C „ausgeborgt“, lesen Sie die Eingabe direkt vom Standard-Eingabekanal (STDIN, üblicherweise die Konsole).
Speichern Sie das Programm als db_checker.php und rufen Sie es auf:

ich@meinrechner:~> php db_checker.php

Enter passwd > mein_passwort
*** Localhost via UNIX socket ***

Geben Sie das richtige Passwort ein, sonst gibt es eine Fehlermeldung. Natürlich können Sie das Skript mit dem Befehl chmod 755 db_checker.php ausführbar machen. Dann sieht der Aufruf so aus: ich@meinrechner:~> ./db_sample.php

Thomas Kaufmann

[1] PHP Home: http://www.php.net/







Software & Support Verlag GmbH