Problem:

Manche Dinge (Newsletter-Versand, Datenbank-Aktionen, etc.) will man gerne Zeitgesteuert starten. Andere Funktionen möchte man aus Sicherheitsgründen ausserhalb des Web-DocumentRoots verstecken. Oder man will auch Scripte für die Systemadministration schreiben, ohne Perl- oder Shell-Script-Programmierung zu erlehrnen.

Schließlich können PHP-Scripte auch in der Commando-Zeile ausgeführt werden. Was ist aber dabei zu beachten?

Ansatz 1:

PHP-Scripte als Browser-Aufrufe.
Es gibt zwei Programme die (z.B. per Cron/Shell) PHP-Scripte per URL aktivieren können: wget und lynx. (Es gibt noch weitere Consolen-Webbrowser, aber ich bleib mal bei den beliebtesten.)
Ein Aufruf könnte dann so aussehen:

wget 'http://www.meinedomain.tld/admin/newsletter.php'
Mithilfe von Pipes kann man sich das Ergebnis z.B. dann zumailen lassen oder in ein Logfile schreiben.

Nachteil:
Die Scripte sind an die Ausführungszeiten des Webservers/PHP gebunden. Sprich, wenn das Script nicht innerhalb der (z.B.) eingestellten 30 Sekunden zum Ende kommt, wird es abgebrochen.

Ansatz 2:

PHP-Scripte per CLI aufrufen.
CLI ist das 'Command-Line-Interface' von PHP. Soll eißen: Ein PHP-Interpreter ohne Webserver (vergleichbar mit perl). Unter Linux/Unix wird dieser mit php script.php gestartet.
Ein Eintrag im Cron braucht aber immer die vollständigen Pfade:

/usr/bin/php /home/www/webX/html/admin/newsletter.php
(Auch hier kann wieder mit Pipes gearbeitet werden.)

Nachteil:
Eine evtl. vorhandene User-Authentifizierung kann weder per HTTP-Protokoll noch per Cookie statt finden.

Ansatz 3:

Reine PHP-Scripte für die Shell.
Der Ansatz ist der selbe wie beim Zweiten. Diesmal soll aber der expliziete Aufruf des PHP-CLI gesparte werden, so daß ein ./newsletter.php bereits das gewünschte erreicht:
Dazu muß eine Shebang-Zeile in das PHP-Script eingefügt werden:

#!/usr/bin/php
und danach das Script mit Ausführungsrechten versorgt werden:
chmod +x newsletter.php
(Nun könnte man die Ändung .php übrigends auch weg lassen.)

Nachteil:
Die Scripte sind so nicht mehr fürs Web zu gebrauchen. Ausser man führt sie als CGI aus. (Endung von .php zu .cgi ändern.)

Kategorien:

Stichwörter:

php · php4 · cgi · script · shell · cron · start · commando · commandozeile ·