PHP-Scripte werden normalerweise vom einen Webserver aus gestartet, aber es ist auch möglich diese direkt in der Eingabeaufforderung zu starten. Warum sollte man das tun? - PHP hat hervorragende Dateisystem-Funktionen, Reguläre Ausdrücke, einfache http-Funktionen und ist mit Modulen erweiterbar.
Damit kein unnötiger HTML-Code ausgegeben wird, gibt es ein spezielle CLI-Version (Command Line Interface).
Zusätzlich wird noch eine DLL-Datei (php4ts.dll
, php5ts.dll
, php7ts.dll
oder php8ts.dll
) benötigt, wo die Grundfunktionen von PHP enthalten sind.
Dummerweise kann man PHP-Scripe nicht direkt starten. Unter Linux muß man nur in der ersten Zeile: #!/pfad/php
eintragen und schon kann das Script direkt gestartet werden.
#!/usr/bin/php <?php echo "Hello World!\n"; ?>
Unter Windows geht das so nicht. Der normale weg, wäre über die Eingabeaufforderung, was aber nicht wirklich komfortabel ist.:
php -f c:\php\script.php -- arg1 arg2
- Vollständige Schreibweise
php c:\php\script.php arg1 arg2
- Kurzschreibweise
Die einzige Lösung ist, PHP als Batch-Script (Win32) zu starten! PHP wird mit einen Mini-Script gestartet, das das eigentliche PHP-Script automatisch mit den Optionalen Eingabe-Parametern ausführt.
Das funktioniert unter folgenden Bedingungen:
CR LF
sein!
.bat
enden, damit es als Batch-Script gestartet werden kann.
@php -r"eval(preg_replace('/.+?<\?\w*(.+)\?>/s','\1',file_get_contents('%~f0')));" -- %*&goto:eof <?php echo "Hello World!\n"; ?>
Zuerst wird das Script mit PHP geladen und anschließend wird das eigentliche PHP-Script mit Regulären Ausdrücken extrahiert, was dann an eval zusammen mit optionalen Argumenten übergeben wird.
Für einfache Aufgaben wird es sicherlich reichen, aber beim Einsatz von Erweiterungen oder anderen Speziellen Aufgaben wird es Probleme geben:
0
von $argv
ist nicht definiert - d.H. PHP kennt nicht den Dateinamen des Scriptesm, wovon es gestartet wurde
php.ini
d.H. alle Einstellungen sind auf Default
.bat
ausgeführt werden (Aber der Dateiname muss weiterhin auf .bat
enden!)
Da Windows und PHP Umgebungsvariablen beherrschen kann man viele Probleme praktisch umgehen.
Die folgene Lösung ist etwas komplexer aber auch Komfortabler:@set 0=%0&set 1=%~f0&set 2=%cd%&%~d0&cd %~p0 @if exist ext set phpext=ext @if exist php.exe set php=php @if exist php.ini set phpopt=-cphp.ini @if "%php%"=="" set php=php @if "%phpopt%"=="" set phpopt=-dextension_dir=./%phpext% @"%php%" "%phpopt%" -r"eval(preg_replace('/^[@:].*$(?=\C*<\?)|^<\?\w*|^\?>\s*$/m','',file_get_contents($_SERVER['argv'][0]=$argv[0]=getenv(1))));if(strchr(getenv(0),chr(34))and!strpos(getenv('PSModulePath'),getenv('USERNAME')))passthru('pause');" -- %*&goto:eof <?php echo "Hello World!\n"; ?>
php
gesetzt, wenn sie noch nicht gesetzt war und zuletzt wird geprüft, ob sich eine PHP.ini
im aktuellen Arbeitsverzeichnis befindet und entsprechend wird die Variable phpopt
gesetzt.
Es können zwei Umgebungsvariablen gesetzt werden:
php
- Pfad zu php.exe (z.B. c:\php\cli\php.exe
)
phpopt
- Optionen für php.exe (z.B. -cc:\php\php.ini
oder -dextension_dir=c:\php\ext
)
Intern werden vier weitere Umgebungsvariablen gesetzt:
0
- Scriptaufruf (So, wie es aufgerufen wurde)
1
- Pfad zum Script (Wo es sich genau befindet)
2
- Das Aktuelle Arbeitsverzeichnis zu dem Zeitpunkt, als das Script gestartet wurde
argc
- Anzahl der übergebenen Parameter
argv
- Alle übergebenen Parameter
phpext
- Unterverzeichnis ext für PHP-Erweiterungen
Weitere Funktionen:
.bat
ausgeführt werden (Aber der Dateiname muss weiterhin auf .bat
enden!)
php.ini
oder phpini
Angabe im aktuellen Verzeichnis oder im Unterverzeichnis ext
gesucht.
$argv
und $_SERVER['argv']
werden die Optionalen Argumente und der Script-Pfad (was sonst in $_SERVER['PHP_SELF']
stehen würde) in ein Array übergeben.
c:\test\script.bat
) wie es der Explorer immer macht, dann wird auf ein Tastendruck gewartet, so ist es möglich scripte einfach vom Explorer zu starten ohne dass die Ausgaben verloren gehen.
PHP Batch | Script | 1 KB | Alle Script-Varianten ohne PHP | |
PHP 4.4.9 | 32 Bit | 475 KB | Kleintest Paket für alle Windows-Varianten, Quelle: php-4.4.9-Win32.zip | |
PHP 5.3.5 | 32 Bit | 1.82 MB | Letzte Version für Windows 98/ME & NT/2000/XP ohne zusätzliche Bibliotheken, Quelle: php-5.3.5-Win32-VC6-x86.zip | |
PHP 5.3.29 | 32 Bit | 1.87 MB | Benötigt bis Windows XP: vcredist_x86_vc9.exe, Quelle: php-5.3.29-Win32-VC9-x86.zip | |
PHP 5.4.45 | 32 Bit | 2.11 MB | Letzte Version für Windows XP - Benötigt bis Windows XP: vcredist_x86_vc9.exe , Quelle: php-5.4.45-Win32-VC9-x86.zip | |
PHP 5.6.40 | 32 Bit | 2.38 MB | Benötigt: VC11, Quelle: php-5.6.40-Win32-VC11-x86.zip | |
PHP 7.0.33 | 32 Bit | 2.18 MB | Benötigt: VC14, Quelle: php-7.0.33-Win32-VC14-x86.zip | |
PHP 7.1.33 | 32 Bit | 2.27 MB | Benötigt: VC14, Quelle: php-7.1.33-Win32-VC14-x86.zip | |
PHP 7.2.34 | 32 Bit | 2.32 MB | Benötigt: VC14 oder VC15, Quelle: php-7.2.34-Win32-VC15-x86.zip | |
PHP 7.3.33 | 32 Bit | 64 Bit | 3 MB | Benötigt: VC14 oder VC15, Quelle: php-7.3.33-Win32-VC15-x86.zip, php-7.3.33-Win32-VC15-x64.zip |
PHP 7.4.33 | 32 Bit | 64 Bit | 3 MB | Benötigt: VC15/16 |
PHP 8.0.30 | 32 Bit | 64 Bit | 3 MB | Benötigt: VC16 |
PHP 8.1.x | 32 Bit | 64 Bit | 3 MB | Benötigt: VC16 |
PHP 8.2.x | 32 Bit | 64 Bit | 3 MB | Benötigt: VC16 |
PHP 8.3.x | 32 Bit | 64 Bit | 3 MB | Benötigt: VC16 |
QuickPHP 5.3 | 32 Bit | 2.97 MB | PHP mit Webserver und einigen Erweiterungen - Benötigt bis Windows XP: vcredist_x86_vc9.exe | |
WebPHP 5.4 | 32 Bit | 3.58 MB | PHP mit Buildin-Webserver und einigen Erweiterungen - Benötigt bis Windows XP: vcredist_x86_vc9.exe | |
WebPHP 5.6 | 32 Bit | 3.90 MB | PHP mit Buildin-Webserver und einigen Erweiterungen - Benötigt: VC11 | |
WebPHP 7.1 | 32 Bit | 3.96 MB | PHP mit Buildin-Webserver und einigen Erweiterungen - Benötigt: VC14 | |
WebPHP 8.2 | 64 Bit | 7.30 MB | PHP mit Buildin-Webserver und einigen Erweiterungen - Benötigt: VC16 |
Alle Binaer-Dateien stammen unverändert von windows.php.net
Kategorie: PHP, PHPBatch, Konsole, Windows, 7-Zip, Video
<< Links | Home | Serien >> << LAN Check | Projekte | PmWiki >>