2016-05-06 11 views
2

Gibt es eine Möglichkeit, ein Skript nur von einem Cron-Job aus aufzurufen und es so zu machen, dass keine anderen ips dieses Script ausführen können?php script nur von cron job aufrufen - alle anderen ips ablehnen

Ich habe ein Skript, das Benachrichtigungen an Telefone sendet. Es soll einmal von einem Cron-Job aufgerufen werden, aber manchmal löst es etwas aus und jeder wird benachrichtigt, wenn er es nicht sollte. Ich möchte es nur von meinem Server angerufen werden.

Mit anderen Worten, um es nicht in der Lage zu sein, von einem Browser oder eine Spinne etc ..

Dank

+0

Es ist nicht in Ihrem Webstamm, oder? –

+0

Nö von einem Ordner mit anderen Skripten für die gleiche Telefon-App. –

+0

Haben Sie andere Benutzer auf diesem System und haben sie Zugriff auf diese Skripts? –

Antwort

2

Ihr Skript über öffentliche URL verfügbar zu sein scheint, genannt zu werden. Verschiebe es woanders hin. Wenn sich das Skript beispielsweise innerhalb von /www/site.com/public/script.php befindet und /www/site.com/public das öffentliche Verzeichnis des Webservers ist, verschieben Sie es in den Ordner /www/site.com/cron/script.php. Stellen Sie sicher, dass der Webserver nicht zum Abrufen von Dateien aus dem Verzeichnis cron konfiguriert ist.

+1

Ich bekam einen Hinweis, um die Einstellungen zu ändern 640 für Berechtigungen und sie denken, dass sollte funktionieren. –

+1

@PapaDeBeau, das wird natürlich mit entsprechenden Berechtigungen funktionieren. Aber müssen Sie ein CLI-Skript im öffentlichen Verzeichnis behalten? –

+0

Nein, ich weiß nicht, was das ist. Ich bin Autodidakt und lerne immer. :) –

4

Ich würde vorschlagen, dass Sie diese Datei nicht öffentlich verfügbar machen.

Aber um Ihre Frage direkt zu beantworten; Ein Weg, dies zu tun, ist die folgende Kontrolle hinzuzufügen:

if (php_sapi_name() === 'cli') {...}

Weitere Informationen: https://secure.php.net/manual/en/function.php-sapi-name.php

+0

Wow, das hört sich toll an. ok Ich versuche, die Berechtigungen auf 640 zu ändern, um zu sehen, ob das funktioniert. Wir werden es morgen herausfinden. Danke für den tollen Tipp. –

1

Wie andere geschrieben haben, kann es andere Einstellungen, die Sie jedoch (Berechtigungen und Dateispeicherorte) verwenden könnte Ich war nie jemand, der jemandem sagt, dass er seinen gesamten Prozess neu gestalten muss, um ein einziges Bedürfnis zu erfüllen. Das fühlt sich zu sehr an wie der Schwanz, der den Hund wedelt. Deshalb, wenn Sie ein Skript haben wollen, die nur durch Ihre Cron-Job ausgeführt werden kann und nicht von einem anderen Prozess fälschlicherweise würde ich Ihnen diese Lösung anbieten


Die PHP_SAPI Lösung festgestellt wurde inkonsistentes Verhalten zu bieten und ist Systemkonfiguration spezifisch (zB echo wird beim Aufruf des Skripts von der Kommandozeile ausgegeben und beim Aufruf von einem cron wieder). Dies kann dazu führen, dass andere Fehler aufgespürt werden. Die beste Lösung, die ich gesehen und verwendet habe, besteht darin, ein Befehlszeilenargument an Ihr Skript zu übergeben und die Existenz dieses Arguments zu bewerten.

Ihr Cron-Job würde in etwa so aussehen:

* * * * * * php /path/to/script --cron 

Dann in Ihrem Skript würden Sie ein, wenn Prüfung durchführen, die nicht erfüllt, wenn das Skript beendet.

if($argv[0] != 'cron') 
{ 
    //NO CRON ARGUMENT SUPPLIED, SOMETHING ELSE MUST BE CALLING THIS 
    exit; 
} 

Nehmen Sie nicht, dass einige Systeme das erste Argument als Skript-Namen verwenden können, so auf der Grundlage Ihrer individuellen Systemkonfiguration Sie können $argv[1]

hoffe, das hilft überprüfen müssen, lassen Sie mich wissen, wenn Sie irgendwelche Fragen, ich bin glücklich zu reagieren oder zu bearbeiten, wenn nötig.