Keine direkte Antwort auf Ihre Frage, aber eine bessere Lösung, denke ich:
Wenn Sie möchten, dass niemand außer cron das Skript ausführt, platzieren Sie es einfach außerhalb des Web-Stammverzeichnisses. Somit gibt es überhaupt keinen Zugriff über den Webserver.
Wenn Sie den Befehl auch als spezieller Benutzer ausführen müssen, verwenden Sie GET
nicht aber haben Sie eine Benutzeranmeldung und suchen Sie nach einer angemeldeten Sitzung (eine bestimmte festgelegte Sitzungsvariable ...) und fügen Sie das Skript nur in diese Seite ein.
Ihr öffentlich zugängliches Skript würde in etwa so aussehen:
session_start();
if (isset($_SESSION['user']))
{
include '/path/to/script/outside/of/web-root';
}
else
{
die('No access.');
}
Die $_GET[]
&$_POST[]
Assoziative Arrays werden nur initialisiert, wenn Ihr Skript über einen Webserver aufgerufen wird. Beim Aufruf über die Kommandozeile werden Parameter im $argv
übergeben Array, genau wie C.
Enthält ein Array aller Argumente, die an das Skript übergeben werden, wenn es von der Befehlszeile ausgeführt wird.
Ihr Befehl wäre:
* 3 * * * /path_to_script/cronjob.php username=test password=test code=1234
Sie würden dann parse_str() verwenden, um die Parameter zu setzen und darauf zuzugreifen:
<?php
var_dump($argv);
/*
array(4) {
[0]=>
string(27) "/path_to_script/cronjob.php"
[1]=>
string(13) "username=test"
[2]=>
string(13) "password=test"
[3]=>
string(9) "code=1234"
}
*/
parse_str($argv[3], $params);
echo $params['code']; // 1234