Raketenwilli: PHP via CLI

Beitrag lesen

Einführend:

Die Shell (welche denn?) kann man zwar für Skripte benutzen, diese kommt aber schnell an Grenzen, sie war nie als universelle Programmiersprache gedacht und wird wohl das Eine oder Andere nicht oder nicht effektiv können. Es gibt ja nicht grundlos so viele Programmiersprachen…

In php kein Akt, aber ich krieg nicht raus wie man das in einer Batch genauso wie im Beispiel machen kann.

Klar. Wenn PHP auch als CLI zur Verfügung steht (Du es via ssh starten kannst), dann führe mal

~$ which php

aus.

Das Ergebnis sieht etwa so aus:

/usr/bin/php

Im nächsten Schritt notierst Du das als „Shebang“ in der ERSTEN (sic: ersten!) Zeile des Skriptes:

#!/usr/bin/php

Achte auf das Ausrufezeichen und darauf, dass Dein Editor keine Unicode-BOM schreibt. (Meist unter „Kodierung“ einzustellen, fast nur bei Windows-Editoren ein „Problem“) Danach vergibst Du Dir selbst das Recht, das Skript auszuführen:

chmod 700 Skript.php

Starten kannst Du es dann mit

~$ ./Skript.php

oder mit

~$ /pfad/zu/Skript.php

Achte darauf, dass es nicht via Webserver abrufbar ist, denn es stehen ja Benutzername und Passwort für die Datenbank drin.

Eine zusätzliche Bremse kannst Du wie folgt einbauen:

#!/usr/bin/php

if ( ! empty( $_SERVER['DOCUMENT_ROOT'] ) ) {
    exit;
}

Das sorgt dafür, dass das Skript stumpf abbricht, wenn es via Webserver ausgeführt wird, verhindert aber womöglich nicht, dass das Skript im Quelltext abgerufen wird. Lege es außerhalb des DOCUMENT_ROOT ab. Und vergib KEINE andere Endung!

HINT: Die Variable $argv enthält im Falle eines CLI- Aufrufs ein Array mit dem Skriptaufruf selbst und der womöglich an das Skript übergebenen Argumente.

Bei einem Aufruf mit

~$ ./Skript.php foo bar

also

$argv[0] → './Skript.php'
$argv[1] → 'foo'
$argv[2] → 'bar'

Das gezeigte Skript sieht nicht so aus, als müsstest Du Dir Sorgen wegen des Speichers machen.