| PHP wird meistens zusammen mit einem Webserver eingesetzt und dient dort zur Erzeugung von dynamischen Webseiten. | Mit PHP kann man jedoch auch portable Konsolen-Programme herstellen. Das bietet eine wenig bekannte jedoch ausgezeichnete Möglichkeit zur Systemverwaltung. |
PHP
|
PHP Hypertext Processor |
| Konsolen-Programme | PHP Konsolen-Programme für automatisierbare Aufgaben |
| Windows-CLI | PHP als Windows CommandLine Interface |
| Start mit PHP | Einfache Tests mit PHP als CLI |
| Argumente | Übergabe von Daten als Commandline Argumente |
| Linux | Script-Programme mit #! Shebang |
| Standard-Kanäle | Ein- und Ausgabe an der Konsole |
| Batch-Programme | Automatisierter Start von PHP-Programmen |
| Windows-Konfiguration | Die komplizierte Einstellung des Betriebssystems |
| Windows Portabel | PHP und PHP-Programme portabel auf USB-Stick |
| PHP-Server | Eigene PHP Script-Programme als Server |
| Linux-CLI | PHP als Linux CommandLine Interface |
PHP für (Konsolen)-Verwaltungs-Programme ? |
|
Auf
→ Linux stehen mehrere moderne und leistungsfähige
Konsolen(→
Shell)-Programme zur Verfügung.• Komplexe Aufgaben werden traditionell mit Script-Programmen in der Programmiersprache → Perl ausgeführt (Perl ist kostenloser Standard-Bestandteil aller gängigen Linux-Distributionen). |
•
Daher besteht kaum Bedarf nach einer zusätzlichen Programmiersprache zur
Systemverwaltung. Die meisten Kapitel dieser Seite betreffen daher die Verwendung von PHP als CLI (Konsolen-Programmiersparche) auf Windows-Systemen. • Natürlich kann man PHP auch auf ↓ Linux als Konsolen-Programm verwenden. |
Auf
→ Windows ist die Situation anders:• Das praktisch einzige Konsolen-Programm cmd.exe ist hoffnungslos veraltet und wird nicht merkbar weiterentwickelt. • Der Nachfolger → PowerShell ist noch wenig bekannt und wird selten verwendet. • Viele Verwaltungs-Programme werden in → Visual Basic bzw. dem Nachfolger .NET erstellt. Dazu muss man vom Monopol-Hersteller eine komplette Programmiersprache (teuer) kaufen und die Kenntnisse (noch teurer) laufend pflegen. Andererseits laufen die damit hergestellten Programme nur auf Systemen des Herstellers und sind nicht portabel. • Eine interessante Ergänzung ist → Cygwin: Damit werden kostenlos viele leistungsfähige → Shell-Programme der Linux-Konsole auf Windows portiert. |
•
Wesentlich intelligenter ist der Einsatz von
→ Perl
oder PHP: • Kostenlos für alle gängigen Betriebssysteme im Internet verfügbar. • Programme in Perl oder PHP sind portabel (ausgenommen System-spezifische Teile) und auf jedem System ohne Änderung einsetzbar. PHP selbst ist portabel und kann auf jedem USB-Stick installiert werden. • Wenig bekannt ist die Möglichkeit, PHP für den gleichen Zweck einzusetzen: PHP ist kostenfrei erhältlich, Kenntnisse sind oft durch die Programmierung dynamischer Webseiten vorhanden. In diesem Fall ist es sinnvoll und effizient, mit PHP auch leistungsfähige Konsolen-Programme zur Verwaltung herzustellen. |
Voraussetzungen• Voraussetzung ist die Installation von PHP.Auf allen → Linux Servern ist PHP Standard, auf Linux Desktop (Arbeits)-PC wird PHP blitzschnell von der Distributions-CD/DVD installiert. • Auf → Windows muss man PHP selbst installieren, das ist jedoch problemlos. Bei Installation eines (Apache) → Webservers sollte man immer auch PHP installieren. • Interessant ist die portable Installation auf einem USB-Stick: Das ermöglicht die Herstellung und Verwendung von PHP-Programmen auch ohne Admin-Rechte. • PHP kann auch ohne Webserver installiert werden, einfach durch Auspacken des Installers in einem Verzeichnis wie z.B. C:\Programme\php • Ein Webserver ist nicht Bedingung, aber sehr empfehlenswert. Heutige PC sind so leistungsfähig, dass der Betrieb eines (Apache)-Webservers am eigenen Arbeits-PC keine merkbare Belastung darstellt, aber viele Vorteile bringt: PHP-Webseiten können (nur !) in diesem Fall auf den eigenen PC zugreifen. • Man kann mit einem Webserver dynamische Webseiten als User-Interface für alle Verwaltungs-Arbeiten verwenden. - Diese Arbeitstechnik ist besonders einfach, schnell und wird durch unzählige Beispiele im Internet unterstützt. • Ohne Webserver ist PHP ebenfalls einsetzbar, jedoch nur als Konsolen-Programm("Eingabeaufforderung", CLI). Das kann auch ein Vorteil sein: Konsolen-Programme können automatisch gestartet werden, z.B. bei Systemstart, zu bestimmten Zeiten, periodisch, oder bei bestimmten Ereignissen. |
• PHP-Kenntnisse sind sehr hilfreich. Wer schon Erfahrung mit PHP-Webseiten hat, kann ohne weitere Ausbildung sofort PHP Verwaltungs-Programme erstellen. Das ist ein wesentlicher Vorteil gegenüber Perl. • Wenn sie PHP noch nicht kennen, dann ist es besser, mit PHP zuerst einige dynamische Webseiten herzustellen. PHP ist sehr rasch erlernbar, wenn man als User-Interface Webseiten verwenden kann. • Wozu kann man PHP verwenden ? PHP kann auf alle Resourcen des eigenen PC zugreifen, z.B. Verzeichnisse durchforsten, Dateien suchen, lesen und schreiben, die (Windows)-Registry-Datenbank lesen und schreiben, eigene und entfernte Webseiten lesen und erzeugen, Mail lesen, erzeugen und absenden, Grafik-Dateien erzeugen, Datenbanken lesen und schreiben, usw. usw. • Einschränkung: Das gilt nur für jenen PC, auf dem PHP installiert ist, oder auf den PHP über ein 'Netzlaufwerk' Zugriff hat. Wenn sie mit PHP auf einem entfernten PC Webseiten erzeugen und mit einem Browser-Programm am eigenen PC laden, dann haben diese keinen Zugriff auf ihren PC. |
PHP als Windows-CLI (Commandline Interface) |
|
PHP-InstallationWenn sie Windows verwenden und PHP noch nicht installiert haben, besuchen sie die Webseite zur → PHP-Installation auf Windows. |
Auf der jetzt angezeigten Seite wird die PHP-Installation vorausgesetzt: Hier finden sie vorwiegend die Unterschiede zur Standard-Installation von PHP als Webserver-Hilfsprogramm. |
PHP auf Windows♠ Im Programm-Verzeichnis von PHP findet man nach dem Auspacken mehrere Programme *.exeAb PHP Version 5 dient das Programm php-win.exe als Windows-Konsolen-Interpreter, und das Programm php-cgi.exe als Interpreter für Webserver (→ CGI-Programme). Diese Programme sind zu bevorzugen. php.exe ist ein Mini-Programm, das je nach Aufruf selbst entscheidet, welche der beiden Programm-(API)-Versionen verwendet wird. ♠ Die PHP-Funktion php_sapi_name() gibt die vom Script verwendete Interface-Version zurück. Damit kann ein PHP-Programm selbst feststellen, wie es gestartet wurde. |
Unterschiede:
●
Die CLI-Version php-win.exe verwendet keine
→ HTTP-Header, d.h. sie sendet vor Beginn der Ausgabe
keinen Ankündigungs-Text, so wie ihn ein Webserver erwartet.● Unabhängig von der Einstellung der Konfiguration sind Commandline-Argumente immer aktiviert, d.h. argc (Anzahl der Argumente) und argv (Array der Argumente) sind immer verfügbar. ♦ Details zum Array $_SERVER auf der Seite zur → PHP-Umgebung. ● Die Standard → I/O-Kanäle des CLI sind mit eigenen Konstanten definiert: STDIN, STDOUT, STDERR
Das bedeutet: Eingabe über die Tastatur, durch ein Konsolen-Script
( *.cmd, *.bat ) oder durch ein anderes Programm;
Ausgabe an die Konsole, auf Anweisung auch an eine Datei.● Das aktuelle Verzeichnis (current directory) wird vom CLI nicht geändert, ebenso wie bei allen üblichen Konsolen-Programmen. |
PHP-TestFür die bequeme Verwendung als Konsolen-Programm sollte man das Betriebssystem passend konfigurieren.► Öffnen sie eine Konsole (Eingabeaufforderung) cmd.exe und testen sie zuerst die 'Lang-Version' mit Angabe des vollständigen Pfads zum PHP-Interpreter: C:\> c:\programme\php\php-win.exe -v
Ändern sie den Pfad, wenn PHP auf ihrem PC in einem anderen Verzeichnis
installiert ist.► Wenn die PHP-Version angezeigt wird, probieren sie die 'Kurz-Version (rechts). Wenn nicht, muss zuerst PHP sauber konfiguriert werden. ♦ Details zur Installation von PHP auf Windows. |
► Probieren sie nach einem erfolgreichen Test der Lang-Version die Kurz-Version:
C:\> php -v
Dieser Test muss unabhängig vom aktuellen Verzeichnis funktionieren.
Deshalb wird hier z.B. der Befehl nach Verzweigung zu einer
anderen Festplatte D: wiederholt.D:\> php -v Wenn nur die Lang-Version funktioniert, sollten sie das Betriebssystem für PHP optimal konfigurieren. ♦ Details zur Installation von PHP auf Windows und zur ↓ Konfiguration von Windows (auf dieser Seite). |
PHP-Informationen• Öffnen sie eine Windows-Konsole cmd.exe und testen sie verschiedene Optionen - vorläufig noch ohne PHP Script-Programm.• Wenn nur die Lang-Version funktioniert, dann fehlt der Pfad zum PHP-Interpreter in der ↓ Umgebungs-Variablen PATH des Betriebssystems. • Option -h zeigt Hilfe-Informationen, Option -v das API (CLI für CommandLine Interface) und die aktuelle Version, Option -m die geladenen PHP-Module und Option -i umfassende Informationen zur → PHP-Umgebung. ♦ Details im PHP-Manual (Online oder Download) und auf der Seite zum Windows CommandLine Interpreter. |
Lang-Version mit dem kompletten Pfad:
C:\> c:\programme\php\php.exe -i
Kurz-Versionen:
C:\> php -help
C:\> php -h C:\> php -v C:\> php -m C:\> php -i |
Funktion phpinfo()Die PHP Funktion phpinfo() liefert umfangreiche Daten der gesamten PHP-Umgebung.Die erste Version (rechts) erfordert, dass die Eigenschaften von cmd.exe mit 'Fensterpuffergröße' von einigen 100 Zeilen eingestellt sind. Die 2. Version zeigt die Daten seitenweise, die 3. Version speichert die Daten in einer Text-Datei. |
Ausgabe der gesamten PHP Umgebung:
C:\> php -r "phpinfo();"
C:\> php -r "phpinfo();" | more C:\> php -r "phpinfo();" >> c:\phpinfo.txt |
Start mit PHP @ Konsole |
|
PHP Einzeilen-Programm• Ein Mini-Testprogramm kann man direkt mit einem Konsolen-Befehl eingeben:Das Argument in "" muss einen gültigen PHP-Befehl inkl. abschließendes ; Zeichen enthalten. • Wenn der Test fehlschlägt ("Der Befehl php konnte nicht gefunden werden..."), dann ist PHP nicht korrekt installiert oder konfiguriert. ♦ Details im Kapitel ↓ Windows-Konfiguration auf dieser Seite und auf der Seite zur Installation von PHP auf Windows. |
Ausführung eines PHP Mini-Programms: C:\> php -r "print 'Hallo';"
|
PHP-Testprogramm• Für alle weiteren Tests erstellen sie ein PHP Mini-Programm, z.B. die Text-Datei c:\test.phpDiese Datei können sie mit jedem Text-Editor erstellen, z.B. mit dem kostenfreien Text-Editor Notepad++ notfalls mit dem Windows Text-Editor notepad.exe, keinesfalls mit Textverarbeitungs-Programmen wie LibreOffice oder Word. • Ebenso wie bei dynamischen Webseiten enthält die Datei 'gewöhnlichen Text' (erste und letzte Zeile) und ein kleines PHP-Programm innerhalb der Markierung <?php ?> • Fügen sie aus praktischen Gründen am Ende eine Leerzeile an. • Stellen sie sicher, dass sich im gleichen Verzeichnis keine andere Datei mit einem Namen test.* befindet. Wenn das nicht möglich ist, verschieben sie den gesamten Test in ein eigenes Verzeichnis. |
Text-Datei (Script-Programm) test.php
Hier ist test.php
<?php
$s = '%Y-%m-%d %H:%M:%S';
$datim = strftime($s,time()); print "Jetzt = $datim\n"; ?>
Ende der Datei test.php
|
Manueller Starteines PHP-CLI-Programms an der Windows-Konsole:Option -l (kleines L) prüft, ob die Programm-Syntax ('Grammatik') korrekt ist. Option -f führt das Programm aus. Option -w gibt den Quelltext aus. • Bei korrekter Ausführung (Option -f ) werden die Text-Zeilen des Script-Programms genauso ausgegeben wie in der Datei eingetragen. Dazwischen wird von PHP eine Zeile mit Datum und aktueller Zeit erzeugt und ausgegeben. |
Verwendung eines PHP-Programms test.php mit verschiedenen Optionen (Syntax, Ausführung, Quelltext):
C:\> php -l test.php
C:\> php -f test.php C:\> php -w test.php |
Kurz-VersionZur bequemen Anwendung muss die Befehlszeile in der kürzest möglichen Form eingesetzt werden:• Wenn die Langversion nicht funktioniert, ist einer der beiden Pfade falsch eingetragen oder PHP nicht korrekt installiert. Ansonsten fahren sie mit dem Test der Kurz-Versionen fort. • Ohne Option wird das Programm normal ausgeführt, so wie mit Option -f • Lassen sie die Datei-Endung .php weg: Wenn dieser Test funktioniert, dann ist die ↓ Umgebungs-Variable PATHEXT richtig eingestellt. • Lassen sie auch den Programm-Namen php weg. Wenn dieser Test funktioniert, dann wird die Datei *.php mit dem richtigen Programm ( php-win.exe ) geöffnet. • Hinweise zur Behebung von Problemen finden sie u.a. im Kapitel zur ↓ Windows-Konfiguration auf dieser Seite. |
Lang-Version zur Ausführung:
C:\> c:\programme\php\php.exe c:\test.php
Kurz-Versionen zur Ausführung
C:\> php test.php C:\> php test C:\> test • Erst die letzte Version ist bequem genug für eine Verwendung als neuer 'Befehl' zur Systemverwaltung. |
PATHDie → Umgebungs-Variable PATH enthält eine Liste von Pfaden, in denen automatisch nach ausführbaren Programmen gesucht wird.• Erstellen sie ein (neues) Verzeichnis für eigene Programme, z.B. C:\Programme\_myprox und kopieren oder verschieben sie alle eigenen (PHP)-Programme (z.B. test.php ) in dieses Verzeichnis. • Ergänzen sie diesen Pfad in der Variablen PATH Dazu verwenden sie den Befehl set (rechts) oder beeser Fügen sie am Ende ein ; Zeichen als Trennzeichen ein, danach ihren neuen Pfad. • Danach kann man das Programm immer mit dem Kurzbefehl test starten, unabhängig vom gerade ausgewählten Arbeits-Verzeichnis (z.B. auch nach Verzweigung zur Festplatte D: ) |
Ausgabe der aktuellen Daten in der Umgebungs-Variablen PATH C:\> set path
Ergänzung (Vorsicht !):
C:\> set path=%path%;c:\programme\php
Kontrolle:
C:\> set path=%path%;c:\programme\myprox C:\> set path
Test mit einem eigenen PHP-Programm:
D:\> test
|
|
Das Beispiel rechts demonstriert, wie das andere
PHP-Interpreter Programm php-cgi.exe arbeitet, welches
auf die Zusammenarbeit mit einem Webserver spezialisiert ist. Vor der Ausgabe des Programms wird ein (Header)-Text gesendet, der die → MIME-Type der nachfolgenden Ausgabe ankündigt. |
Ausführung mit dem PHP CGI-Interpreter (nur als Demonstration !)
C:\> php-cgi.exe test.php
|
Argumente |
|
ArgumenteKomplexe Programme werden durch an sie übergebene Daten (Argumente) gesteuert. Das funktioniert auch mit eigenen PHP-Programmen, z.B.C:\> php test.php abc 123 xyz
•
Die einzelnen Argumente folgen in der Konsolen-Befehlszeile nach dem Dateinamen
und werden durch Leerzeichen voneinander getrennt.• Wenn Argumente in " " eingeschlossen werden, können sie auch Leerzeichen enthalten. • Die Argumente sollten keine Umlaute oder andere Sonderzeichen enthalten. |
Die Argument-Daten werden als Texte (Strings) an das eigene Programm übergeben, wo sie von den → Umgebungs-Daten $_SERVER['argc'] und $_SERVER['argv'] gelesen werden können. Argumente können nicht nur manuell sondern auch von anderen Programmen eingesetzt werden, z.B. von ↓ Batch-Programmen. Auf diese Weise ist es möglich, die Funktionsweise eigener Programme genau an den jeweiligen Bedarf anzupassen. |
Testprogramm für Commandline-ArgumenteDie korrekte Übergabe von Argumenten ist eine wichtige Funktion für Konsolen-Programme. Dazu wird ein eigenes Test-Programm argtest.php eingesetzt.• Das Programm gibt zuerst die Anzahl der Commandline-Argumente argc aus. • Danach folgt eine Schleife, die für jedes Argument durchlaufen wird. • Das Element $argv[0] enthält den Pfad zum PHP Script-Programm, alle weiteren Elemente je ein übergebenes Argument. • Die Variable $n ist ein Zähler (0, 1,2,...), Variable $v erhält bei jedem Schleifen-Durchlauf den Wert eines Elements $argv[$n] |
Text-Datei (Script-Programm) argtest.php
Hier ist argtest.php
<?php
$argc=$_SERVER['argc'];
print "argc=$argc\n"; $argv=$_SERVER['argv']; foreach($argv as $n=>$v) { print "argv[$n]=$v\n";
}
?>
Ende von Datei argtest.php
|
TestStarten sie das Programm mit einer unterschiedlichen Anzahl von Argumenten. Im dritten Beispiel rechts werden 3 Argumente mit den Werten $argv[1]='abc' und $argv[2]='123' und $argv[3]='xyz' übergeben. |
Anwendung des Testprogramms:
C:\> php argtest
C:\> php "Text mit Leerzeichen" 987 C:\> php argtest abc 123 xyz C:\> argtest funktioniert korrekt |
|
•
Wenn alle übergebenen Argumente vom Testprogramm korrekt angezeigt werden, dann
ist Windows fertig für die Verwendung von PHP Konsolen-Programmen konfiguriert. • Wenn das Programm funktioniert, jedoch keine Argumente ausgibt, dann konsultieren sie das Kapitel ↓ Windows-Konfiguration auf dieser Seite: Vermutlich lautet eine Registry-Variable zwar richtig auf den Pfad zum PHP Interpreter-Programm php-win.exe (oder wenigstens php.exe ), jedoch ohne den Zusatz "%1" |
•
Wenn das Programm nur das erste Argument ausgibt, dann enthält eine der
Registry-Variablen zwar den Zusatz "%1" jedoch
nicht den Zusatz %* Führen sie alle Änderungen der Windows-Konfiguration sehr vorsichtig aus und ändern sie nur genauso viel, bis die hier demonstrierten Tests funktionieren. |
Linux: Script-Programme mit #! Shebang |
|
| Die Installation von PHP und die Konfiguration des Systems sind normalerweise auf Linux kein Thema. |
Zumindest auf allen Linux Server-Distributionen ist PHP fertig installiert
und konfiguriert. Auf Arbeits-PC verwenden sie zur Installation das jeweilige Stansard-Werkzeug, auf SuSE Linux YAST. |
ShebangAuf Linux wird die Ausführung von Script-Programmen nicht durch die Endung des Datei-Namens gesteuert, sondern durch die erste Zeile im Script:Hier wird angegeben, mit welchem Programm das Script ausgeführt werden soll. Ändern sie diesen Pfad, wenn das PHP Interpreter Programm (hier php5) auf ihrem Linux System in einem anderen Pfad liegt. |
#!/usr/bin/php5
Hier ist test.php
<?php
$s = '%H:%M:%S';
print strftime($s,time())\n"; ?>
Ende von test.php
|
Shebang-RegelnDie Shebang-Zeile muss einige strikte Regeln erfüllen:• Muss die erste Zeile eines Script-Programms sein. • Davor keine anderen Zeichen (Leerzeichen, Tabulator, Kommentare, ...) • Muss mit #! beginnen • Danach muss ein Pfad zu einem ausführbaren Programm folgen. • Abschluss mit Linefeed (LF). |
LinefeedLinux-Texte verwenden als Zeilen-Ende nur Linefeed (LF), nicht wie Windows CR+LFIn manchen Fällen reagiert (nur) die Shebang-Zeile empfindlich. Erstellen sie diese Zeile daher mit einem Linux-Editor oder mit Windows Notepad++, oder entfernen sie mit einem beliebigen Werkzeug zumindest aus dieser Zeile das CR-Zeichen, wenn das Script von Windows importiert wurde. ♦ Details zum ASCII-Code |
|
SoftLink (Alias) für Versions-unabhängige PHP-Programme
auf Linux: Stellen sie fest, ob bereits ein Programm oder Alias dieses Namens existiert:
/usr/bin/php
So legen sie selbst ein PHP-Alias an:
# ln -s /usr/bin/php5 /usr/bin/php
Danach funktionieren ihre Scripts mit diesem Versions-unabhängigen Shebang
#!/usr/bin/php
|
Vorteil: Bei Änderung der PHP-Version muss man keine PHP
Script-Programme ändern, sondern nur (einmalig) den SoftLink. Nachteil: Bei Neu-Installation des Betriebssystems muss man das Alias neu anlegen. Bei Wechel der PHP-Version muss das Alias angepasst werden, z.B. auf php6 |
|
Test:
Erstellen sie ein PHP Script-Programm nach dem gezeigten Muster, z.B. in der Datei
/home/ich/test.php
Jeder enthaltene Text wird bei Ausführung genauso ausgegeben wie im Script
enthalten. PHP-Anweisungen werden in <?php ?>
eingeschlossen.
|
Ausführung des Test-Programms: Öffnen sie eine Shell-Konsole und geben sie den Pfad ein, z.B. # /home/ich/test
Auch eigene Programme können automatisiert werden, z.B. kann ihr Script automatisch
→ Zeit-gesteuert starten.
|
Eingabe und Ausgabe an der Konsole |
||||||||||
STDOUTWenn ein PHP Script-Programm an der Konsole gestartet wird, dann wird die Ausgabe automatisch an die Konsole gesendet. Die Ausgabe der Befehle print oder echo wird ohne weitere Maßnahme angezeigt. |
<?php
print "Hier ist PHP\n";
?>
|
|||||||||
STDINWenn eine Eingabe an der Konsole erwünscht ist, dann verwendet man dazu die Standard-Funktion fopen() mit dem Kanal php://stdinDas Beispiel zeigt ein Programm-Fragment zur einfachen interaktiven Steuerung eines PHP Konsolen-Programms. Das Programm wartet auf die Eingabe einer Zahl 0..2 Die eingegebene Zahl wird zur Verzweigung benutzt. Die wählbaren Optionen sind durch 2 verschiedene print-Befehle symbolisiert. Mindestens eine Option muss zum Abbruch des Programms vorgesehen werden. Alternativ kann für die Konsolen-Eingabe auch die Konstante STDIN verwendet werden. Die Beispiele zeigen Varianten mit STDIN in den Funktionen fgets() und fscanf() |
<?php
$fp = fopen('php://stdin','r');$opt=99; while($opt>0) {
print "# 0->exit, 1->Hallo, 2->PHP\n";
}print '#> '; $opt = fgets($fp,100)+0; print "\n"; if($opt==1) {print "Hallo\n";} elseif($opt==2) {print "PHP\n";} fclose($fp); ?>
|
|||||||||
|
$opt = trim(fgets(STDIN))+0;
| ||||||||||
|
fscanf(STDIN,"%d\n",$opt);
|
||||||||||
Standard-KanäleDie Tabelle rechts zeigt die für Eingabe & Ausgabe zu verwendenden Argumente zur Adressierung der Standard-Kanäle. |
|
|||||||||
ANSI Escape-Sequenzensind spezielle Kombinationen von Steuerzeichen, mit denen man den Text der Konsole formatieren kann. Man kann z.B. Text-Farben und Hintergrund-Farben verwenden, auch fettgedruckte Schrift und andere einfache Attribute. |
Alle modernen Betriebssysteme bieten diese Möglichkeit. ANSI-Farben wurden auch auf älteren Windows-Systemen häufig verwendet, seit Windows-XP wurden diese Funktionen aus unbekannten Gründen abgeschaltet... ♦ Details zu den ANSI Escape-Sequenzen und zu ihrer Programmierung mit PHP. |
|||||||||
Batch-Programme |
|
| Konsolen-Befehle werden meistens manuell über die Tastatur eingegeben. | Alternativ können die Befehle auch in eine Text-Datei *.cmd eingetragen und danach von dieser gelesen und ausgeführt werden. |
Konsolen Script-Programm• Erzeugen sie mit einem Text-Editor (z.B. mit Notepad++, notfalls mit notepad.exe ) eine Text-Datei C:\Programme\myprox\batch.cmd mit dem rechts gezeigten Inhalt.• Hinweise zur Verwendung eines Standard-Verzeichnisses für eigene Programme (hier C:\Programme\_myprox ) finden sie auf dieser Seite im Kapitel ↑ Start mit PHP, Absatz PATH |
Text-Datei (Konsolen-Script-Programm) batch.cmd
@echo off
echo Hier ist batch.cmd echo Start von test.php php c:\programme\myprox\test.php
echo Ende von Datei batch.cmd@echo on |
| • Hinweis: Die Datei batch.cmd enthält ebenfalls ein Script-Programm, jedoch nicht für den PHP-Interpreter, sondern für den Windows Commandline-Interpreter (der in jedem Windows-System enthalten ist). |
•
Die 3 mit echo beginnenden Zeilen geben Text aus. • Als einziger ausführbarer Konsolen-Befehl wird das PHP Testprogramm (rote Schrift) gestartet. Zur Sicherheit gegen Verwechslung wird der Pfad meist komplett angegeben. ♦ Details zur Programmierung von Windows Konsolen-Programmen |
Ausführung• Das Script-Programm wird durch Eingabe seines Namens auf der Konsole gestartet. Auch in diesem Fall genügt die Kurzform (Datei-Endung weglassen). Dann muss die Datei jedoch einen eindeutigen Namen haben. Vermeiden sie Konflikte z.B. zwischen test.cmd und test.php• Bei korrekter Ausführung meldet sich zuerst das Konsolen-Script, dieses startet das PHP-Programm, nach dessen Ende verabschiedet sich das Konsolen-Programm. |
Ausführung des Batch-Programms:
C:\> batch.cmd
C:\> batch |
AutomatisierungDer Test mit einem Konsolen-Script zeigt, ob ein selbst erstelltes (PHP)-Programm von anderen Programmen aufgerufen werden kann. Das ist Voraussetzung für die Automatisierung:• Sie können das PHP-Programm z.B. durch den Scheduler ( ) an einem bestimmten Datum, zu einer bestimmten Zeit, mehrmals oder periodisch starten. • Sie können das PHP-Programm bei bestimmten Ereignissen starten, z.B. mit dem Scheduler oder mit dem Registry-Schlüssel RunOnce bei Systemstart, User-Anmeldung usw. • Jedes PHP-Programm kann selbst Konsolen-(System)-Befehle erteilen und den Ausgabe-Text der Befehle analysieren, z.B. den bekannten dir-Befehl. Auf diese Weise kann ein PHP-Programm auch jedes andere ausführbare Programm starten. Diese PHP-Anweisung öffnet den Windows Text-Editor: exec('notepad.exe');
|
• An ausführbare Programme kann man auch Argumente übergeben, z.B. Options-Schalter oder Dateinamen. Diese PHP-Anweisung öffnet die angegebene Text-Datei server.log mit dem Windows Text-Editor: exec('notepad.exe c:\temp\server.log');
• Etwas komplizierter ist der Start von Programmen, in deren Pfad Leerzeichen vorkommen. Am besten bewährt hat sich das Anlegen von Verknüpfungen: Legen sie z.B. in ihrem Arbeitsverzeichnis (in der ↓ Umgebungs-Variablen PATH enthalten) eine Verknüpfung mit dem Namen firefox zum gleichnamigen Browser-Programm an. (Die Datei-Endung *.lnk von Verknüpfungen wird vom Betriebssystem versteckt). Mit Rechtsklick auf die Verknüpfung können sie in den das Ziel kontrollieren oder ändern, z.B. "C:\Programme\Mozilla Firefox\firefox.exe"
Dieses PHP-Programm öffnet den Browser gleich mit der gewünschten
Webseite: An Stelle des Programm-Pfades wird die Verknüpfung eingesetzt,
nach einem Leerzeichen folgt die Datei bzw. Webseite als Argument:
$syscmd = 'c:\programme\myprox\firefox.lnk';
$syscmd.= ' http://pstrainer.topsoft.at'; exec($syscmd); |
Datei Ein/AusgabePHP-Programme können alle Resourcen eines PC nutzen, und damit die sehr bescheidenen Möglichkeiten der vorhandenen Konsolen-Befehle fast unbegrenzt erweitern.Eine wichtige Möglichkeit ist das Lesen und Schreiben von Dateien. Beispiel Konfigurations-Datei
Die Argumente zur Steuerung des PHP-Programms können auch von einer
→ Datei gelesen
werden. Das ist bei umfangreichen Texten einfacher als die Übergabe in
Befehlszeilen-Argumenten. Solche Steuerungs-Dateien lassen sich auch von Programmen
erstellen. So kann man eine Kommunikations-Kette mehrerer Programme aufbauen ...Beispiel Log-Datei
Das PHP-Programm ist nicht an die Ausgabe auf der Konsole gebunden.
Häufig verwendete (PHP)-Programme schreiben ihre Meldungen in geduldige
Log-Dateien, wo man sie bei Bedarf ansehen kann. Dringende Meldungen werden z.B.
als Mail an die/den AdministratorIn gesendet.
|
Beispiel Webseiten
PHP-Programme können Live Webseiten anfordern und deren Inhalt auswerten.
Andererseits lassen sich mit PHP-Programmen auch statische
Webseiten *.htm erzeugen, d.h. als
→ Text-Datei
schreiben. Das ist eine intelligente Lösung für eine Webseite,
die z.B. einmal täglich erneuert wird: Wenn man sie als dynamische Webseite
anlegt, dann wird diese Seite jedesmal neu erzeugt
wenn sie angefordert wird. Die Erzeugung durch ein PHP Konsolen-Programm, das z.B.
täglich um 02:00 automatisch aufgerufen wird, kann den Webserver erheblich
entlasten.Mit PHP lässt sich sogar ein experimenteller → Webserver programmieren, der *.html Dateien im lokalen Netz zur Verfügung stellt. Beispiel Binär-Datei
Ein PHP-Programm kann nicht nur Text-Dateien erzeugen, sondern auch binär
codierte Dateien, z.B. Sound oder
→ Grafiken ...Viele Geschäftsgrafik-Dateien werden dynamisch mit PHP erzeugt, meist genügt jedoch eine täglich (einmalig) aktuelle Version, erzeugt mit einem automatisch gestarteten PHP Konsolen-Programm. Mit dem PECL Zusatz-Modul php_pdf.dll kann PHP auch → PDF-Dateien erzeugen, die man im Internet verwenden oder per Mail versenden kann. PDF-Dateien sind auf jedem PC und Betriebssystem unverändert lesbar. Beispiel Datenbank
Ein PHP-Programm kann ausgezeichnet mit einer Datenbank arbeiten, z.B. mit
→ MySQL - am eigenen PC, im lokalen Netzwerk, oder über Internet.
Man kann z.B. den Inhalt seines DigitalCamera-Ordners automatisch katalogisieren
lassen, oder perdiodisch Aktienkurse vom Internet lesen und in der Datenbank speichern ...
|
Windows-Konfiguration |
|
Installation von PHPDie PHP →Installation erfolgt denkbar einfach: Das Archiv wird im gewünschten Verzeichnis ausgepackt. Verwenden sie als Verzeichnis-Namen php ohne Versions-Nummern, ansonsten müssen sie den Namen des Pfads bei jedem PHP-Update an vielen Stellen ändern. |
Typischer Pfad zu PHP C:\Programme\php
|
Konfiguration von PHPDie Konfiguration erfolgt in der Text-Datei php.ini♦ Details zur Installation von PHP |
Typische (alternative) Pfade zur PHP-Konfiguration
C:\Programme\php\php.ini
C:\WINDOWS\php.ini |
Windows-SystemvariableJedes Betriebssystem speichert einen Satz von → Umgebungs-Daten, die für alle Programme (und Programmiersprachen) zur Verfügung stehen.Windows bietet 3 Möglichkeiten, diese Daten manuell zu ändern: Man kann das Konsolen-Programm set verwenden, die Windows Systemsteuerung oder das Programm Registry Editor (regedit.exe, folgende Absätze). |
Alle Umgebungs-Variablen sind Texte (Strings). Zur Trennung mehrerer Daten wird auf Windows der ; Strichpunkt verwendet (auf Linux der : Doppelpunkt). Achtung - Jede dieser Möglichkeiten kann bei falscher Anwendung System, Programme und Daten irreparabel beschädigen. Sie folgen daher den folgenden Hinweisen ausdrücklich auf eigenes Risiko ! |
Konsolen-Programm setDieser Befehl kann Umgebungs-Variable lesen, ändern oder erzeugen. Öffnen sie eine Konsole (Eingabeaufforderung) cmd.exe und geben sie den Befehl set ohne (!) Argumente ein:Alle Umgebungs-Variablen werden angezeigt. Vor einer Änderung sollten sie unbedingt die Details zur → Syntax von Konsolen-Variablen studieren ! Mit einem = Zeichen wird der Wert einer Variablen geändert. Alle folgenden Zeichen werden eingesetzt. Verwenden sie daher keine (!) überflüssigen Leerzeichen. Die Namen bereits definierter Variablen werden in %% eingeschlossen, z.B. %path% |
Ausgabe aller Umgebungs-Variablen
C:\> set
Lesen der Umgebungs-Variablen PATH:
C:\> set path
Anfügen von Texten (Verzeichnis-Pfade) an diese Variable
C:\> set path=%path%;c:\programme\php
Nachfolgende Kontrolle
C:\> set path=%path%;c:\programme\myprox C:\> set path
|
SystemsteuerungMenübefehlbietet ebenfalls die Möglichkeit zum Lesen und Ändern von Umgebungs-Variablen. |
Die winzigen Eingabefelder erschweren die Arbeit. Starten sie ein Text-Editor-Programm wie notepad.exe und kopieren sie den Wert der Variablen in das Textfenster. Dort können sie den Text bequem lesen, bzw. nach einer Änderung wieder zurück in das Eingabefeld kopieren. |
Registry EditorMit dem Registry Editor regedit.exe haben sie Zugriff auf die Registry-Datenbank. Hier werden alle wichtigen Daten des Betriebssystems und vieler Programme verwaltet. |
Die Umgebungs-Variablen befinden sich in diesem Schlüssel:
HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Control \ Session Manager \
Environment
Bei der Anmeldung (Login) werden die privaten Benutzer-Variablen des jeweiligen
Users (ControlSet002 ...) zusätzlich zu den Systemvariablen aktiviert.
|
|
Registry-Tricks:
Bei Registry-Änderungen sollten sie sehr vorsichtig vorgehen:• Führen sie immer nur eine einzige genau überlegte Änderung durch und testen sie die Auswirkung vor weiteren Änderungen, insbesondere vor dem Abschalten des Systems. • Dokumentieren sie jede Änderung sorgfältig ! • Exportieren sie die betroffenen Variablen vor der Änderung: Schlüssel markieren, Menübefehl Wenn die Änderung nicht den erwarteten Erfolg bringt, können sie die exportierte Datei lesen und den vorherigen Wert manuell eintragen, oder den ganzen Schlüssel von der Datei *.reg importieren. |
• In den meisten Fällen kann man im gleichen Schlüssel eine Kopie der Variablen unter einem anderen Namen anlegen. Benennen sie z.B. die Kopie einer Variablen name mit name_alt. Wenn sie zur alten Version zurückkehren wollen, löschen sie den geänderten Schlüssel und ändern den Namen der Kopie wieder auf den Original-Namen. |
PATHDiese Umgebungs-Variable enthält mehrere Verzeichnis-Pfade, die voneinander durch ; Zeichen getrennt sind. In diesen Pfaden werden 'ausführbare Programme' gesucht, und zwar in der eingetragenen Reihenfolge der Pfade.• Die Variable PATHEXT (nächster Absatz) legt fest, was als ausführbares Programm gilt. • Zur Verwendung von PHP als Konsolen-Programm muss der Pfad zum Verzeichnis des PHP-Interpreters php.exe eingetragen sein. Tragen sie den Pfad am Ende ein, jedenfalls nach den Pfaden in das System-Verzeichnis. • Vergessen sie nicht auf den ; Strichpunkt (Trennzeichen) vor jedem neuen Verzeichnis-Pfad ! |
Typische Eintragung für den Pfad zum PHP-Interpreter:
C:\> set path=%path%;c:\programme\apache software
foundation\apache2.2\php\bin
Eigene (PHP und andere) Programme verwalten sie am besten in einem eigenen Arbeits-Verzeichnis, welches in PATH enthalten ist, z.B.
C:\> set path=%path%;c:\programme\_myprox
|
PATHEXTDiese Umgebungs-Variable legt fest, was als 'ausführbares Programm' gilt. Im Wert dieser Variablen muss .PHP eingetragen werden.• Auch hier gilt die Reihenfolge, d.h. wenn nur der Befehl test eingetippt wurde, dann wird im Zweifel test.exe ausgeführt, und weitere Programme wie test.cmd oder test.php nur dann, wenn die Suche nach test.exe erfolglos war. • Vergessen sie nicht das ; Trennzeichen und den . Punkt vor PHP |
Typische Werte:
C:\> set pathext
Typische Eintragung:
.COM;.EXE;.BAT;.CMD; ... ... C:\> set pathext=%pathext%;.PHP
Nachfolgende Kontrolle:
C:\> set pathext
.COM;.EXE;.BAT;.CMD; ... ... ;.PHP |
| Wenn sie bis hierher gekommen sind, führen sie alle oben gezeigten Tests mit PHP Konsolen-Programmen aus. | Fahren sie nur dann weiter fort, wenn die Tests nicht zufriedenstellend ablaufen ! |
ASSOCDateien mit der Endung .php sollten vom PHP Interpreter-Programm php-win.exe ausgeführt werden, wenn keine anderen Anweisungen erteilt werden.• Mit Befehl assoc kann man den ersten Teil dieser Zuordnung lesen oder ändern. • Allerdings führt die Zuordnung nicht zu einem Programm sondern nur zu einem 'Dateityp', der selbst wieder mit einem Programm verknüpft ist (nächster Absatz). |
Ausgabe aller Zuordnungen: C:\> assoc
Ausgabe der Zuordnung für Dateien *.php
C:\> assoc .php
Hier sollte ein Wert wie z.B. phpfile angezeigt werden..php=phpfile Hilfe zum Befehl assoc C:\> help assoc
|
FTYPEDateien mit der Endung .php sollten vom PHP Interpreter-Programm php-win.exe ausgeführt werden, wenn keine anderen Anweisungen erteilt werden.• Mit Befehl ftype kann man den zweiten Teil dieser Zuordnung lesen oder ändern. • Der Wert sollte den Pfad zum PHP-Interpreter enthalten, gefolgt vom angezeigten Text. Damit wird gewährleistet, dass auch ↑ Argumente (Commandline Arguments) an ein eigenes PHP-Programm weitergegeben werden: %1 bezeichnet das erste Argument, %* alle weiteren Argumente. Achtung: Manche Programme (z.B. Web-Editoren) ändern diese Zuordnung ungefragt bei Installation oder Update. |
Ausgabe aller Zuordnungen: C:\> ftype
Ausgabe der PHP-Zuordnung: Geben sie als Argument genau jenen Text ein, der vom
Befehl assoc (Absatz ↑ oberhalb) ausgegeben wurde.
C:\> ftype phpfile
Hier sollte der Pfad zum PHP Interpreter Programm angezeigt werden
"C:\Programme\php\php-win.exe" "%1" %*
Hilfe zum Befehl ftype
C:\> help ftype
|
RegistryDie angeführten Konsolen-Befehle betreffen leider nur einen Teil der verwirrenden M$-Organisation. In der Praxis ist die Assoziation zwischen PHP Script-Dateien *.php und Programmen manchmal noch komplizierter geregelt. Kontrollieren sie (mindestens) diese Registry-Schlüssel:
►
HKEY_CLASSES_ROOT \ Applications \ php.exe \ shell \ open \ command
► HKEY_CLASSES_ROOT \ phpfile \ Shell \ Open \ Command ► HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ phpfile \ Shell \ Open \ Command |
Hier sollte jeweils der Pfad zum PHP Interpreter Programm angezeigt werden "C:\Programme\php\php-win.exe" "%1" %*
Notieren sie jede ausgeführte Änderung.Da die Registry nirgends sauber dokumentiert ist, besteht die Möglichkeit, dass andere oder zusätzliche Schlüssel die korrekte Funktion beeinträchtigen. In diesem Fall hilft es manchmal, im Internet zu suchen, oder in der Registry selbst nach geeigneten Stichworten zu suchen ... |
| Es geht auch einfacher: Auf Linux braucht man keine dieser komplizierten Maßnahmen: Man schreibt ein kleines (PHP)-Programm und lässt es ohne weitere Maßnahmen ausführen. | Erstaunlich, dass viel Geld für ein Betriebssystem ausgegeben wird, das seine Organisation nach Kräften versteckt, verschleiert und kompliziert ... |
Portable Konfiguration von PHP |
|
|
PHP dürfte die einzige ernstzunehmende Programmiersprache sein,
die portabel verwendbar ist. ● PHP lässt sich auf jedem USB-Stick installieren. ● Der PHP-Interpreter php-win.exe läuft vom USB-Stick. ● Jedes am Stick enthaltene PHP-Programm lässt sich damit ausführen. ● Man benötigt dazu keine Adminitrations-Rechte. |
•
Diese Variante öffnet auf (fremden) Windows-PC sehr weitreichende
Möglichkeiten. • Portables PHP ist allerdings kein vollwertiger Ersatz für eine fixe Installation: Die Anwendung ist umständlicher, außerdem erhält man damit natürlich keinen Zugriff auf gesperrte Verzeichnisse (Ordner) und Dateien. • Auf Linux-PC ist die portables PHP uninteressant, da PHP fast immer fix installiert ist. |
InstallationDie portable Installation beschränkt sich auf das Auspacken des PHP-Archivs:Entpacken sie php-*-Win32.zip in ein Verzeichnis des USB-Sticks oder kopieren sie das ausgepackte Verzeichnis auf den Stick, z.B. als F:\php |
Ein kleines aber wichtiges Detail ist die PHP Konfigurations-Datei php.ini Die Datei ist in Standard-Form als php.ini-dist in jedem ausgepackten PHP-Archiv enthalten. Kopieren sie diese Datei in das (gleiche) PHP-Verzeichnis und ändern sie den Namen auf php.ini ♦ Details zur Konfiguration von PHP. |
Windows-Konsole:Programm cmd.exe öffnen, z.B. als 'Eingabeaufforderung' oder mit Menü oder Taste und Eingabe von cmd.exe |
Eine interessante Alternative für den USB-Stick ist ein SoftLink:
Legen sie am Stick eine neue Verknüpfung an und tragen sie als Verweis-Ziel ein:
C:\WINDOWS\system32\cmd.exe
Beim Anklicken wird die Windows-Konsole geöffnet - Allerdings nur dann,
wenn sich am fremden PC im angegebenen Pfad tatsächlich das
Programm cmd.exe befindet.
|
AnwendungDie Anwendung ist leider wenig komfortabel: Man muss die Pfade zum PHP Interpreter Programm php-win.exe und zum Script-Programm genau angeben.Annahme:
Für die Beispiele rechts wird angenommen, dass sich PHP-Interpreter und ein PHP
Script-Programm in folgenden Pfaden befinden:
F:\php\php-win.exe
F:\phpprox\test.php |
Variante 1:
Die Konsole wird geöffnet, das ausgewählte Verzeichnis nicht geändert:
Die beiden Pfade müssen komplett angeführt werden:
C:\> f:\php\php-win.exe f:\phpprox\test.php
(Der Befehl wird in einer einzigen Zeile eingegeben)Variante 2:
Das ausgewählte Verzeichnis wird zum USB-Stick gewechselt. Danach kann man
die Pfade verkürzt eingeben:
C:\> f:
F:\> php\php-win.exe phpprox\test.php Durch geschickt angelegte SoftLinks (Verknüpfungen) kann man den Aufruf von portablen PHP-Programmen noch etwas vereinfachen. |
Linux |
|
|
Auf Linux ist fast alles etwas einfacher, auch die Verwendung von PHP als Konsolen-Programm. Es genügt, die gezeigte Text-Datei auf Linux zu erstellen und zu starten. |
Durch diese einfache Integration können PHP-Programme auf Linux problemlos gemeinsam mit Shell-Script-Programmen, Perl-Script-Programmen und anderen verwendet werden. |
|
•
Der Datei-Name spielt keine Rolle. Er kann auf *.php lauten
oder ohne Windows-Endung bleiben wie in diesem Beispiel. • Die erste Zeile (roter Text) muss mit den Zeichen #! ('Shebang') beginnen. Danach folgt der Pfad zum ausführenden Programm - Ohne Leerzeile, Leerzeichen oder Tabulatoren. • Je nach Konfiguration ihres Linux-Systems muss der Pfad evtl. an die tatsächliche Position des PHP-Interpreters angepasst werden. • Danach folgen Abschnitte aus 'gewöhnlichem Text' und PHP-Programme zwischen <?php ?> Marken. |
Text-Datei (PHP Script-Programm) /home/test/phptest
#!/usr/bin/php
Hier ist phptest
<?php
$s = '%Y-%m-%d %H:%M:%S';
$datim = strftime($s,time()); print "Jetzt = $datim\n"; ?>
Ende von Datei phptest
|
|
•
Erteilen sie vor Verwendung Lese- und Ausführungs-Rechte
für ihr PHP-Programm phptest Für diesen Test können sie im Zweifel die Lese- und Ausführungs-Rechte für alle User freigeben. |
Das PHP-Programm arbeitet genauso wie das ebenfalls auf dieser Seite eingesetzte PHP-Programm für Windows. Als Nachweis für das dynamische Verhalten dient die Ausgabe der aktuellen Zeit. |
|
|
Linux:# /home/test/phptest
|
|
Text-Steuerzeichen: • Die erste Programm-Zeile (#!...) muss mit einem LF (Linefeed) Steuerzeichen enden. Solche Texte erzeugt jeder Linux-Editor - Das ist zumindest für diesen Test die einfachste Variante. • Wenn die Datei von einem Windows-System importiert wurde, enden alle Zeilen wahrscheinlich mit den Steuerzeichen CR und LF. Das CR-Zeichen der ersten (Shebang)-Zeile muss vor der Verwendung auf Linux entfernt werden. |
Zur Entfernung von CR-Steuerzeichen gibt es mehrere Möglichkeiten: • Viele Text-Editoren (manchmal sogar auf Windows) bieten diese Option, z.B. kwrite oder kate den Menübefehl • Viele Linux-Programme (nicht nur Text-Editoren) bieten die Möglichkeit, einen → Regulären Ausdruck (Regular Expression,m RegExp) auf einen Text anzuwenden. Der RegExp für den Ersatz (replace, substitute) lautet /\x0D//g • Alle Hex-Editoren bieten diese Möglichkeit: Man ersetzt die beiden Zeichen 0D0A am Ende der ersten Zeile durch 0A0A • Wenn diese Aufgabe öfters anfällt, kann sie von einem Mini-Programm (Shell, Perl, PHP, ..) ausgeführt werden. |
|