2014-04-10 3 views
7

Ich muss über die Befehlszeile (PHP CLI) einige Dateien laufen, die von Zend Guard verschlüsselt wurden und PHP scheint nur zu beenden, sobald es eine codierte Datei ohne Fehlermeldung erreicht . Ist es möglich PHP-Skripte auszuführen, die von Zend Guard von der Kommandozeile aus codiert werden?Führen Sie mit ZendGuard codiertes PHP-Skript über die Befehlszeile aus

Mehr Details

In der Anwendung, die ich gerade arbeite, muss einige Aufgaben in regelmäßigen Abständen ausgeführt werden. Zuerst haben wir Controller für einige URLs implementiert, die nur zum Ausführen der Aufgaben verwendet wurden. Dann würden wir einen Cron-Job unter Verwendung wget auf diesen Seiten tun. Das Problem besteht darin, dass für einige dieser Tasks Parameter ausgeführt werden mussten. Die Verwendung von wget für eine POST-Anfrage funktioniert nicht, da das erste, was Zend Guard tut, ein Cookie ist und dann eine Weiterleitung an dieselbe URL durchführt. Bei der zweiten Anforderung, da sie jetzt in GET ist, gingen alle Parameter verloren.

Wir entschieden uns dann, zu einem Befehlszeilenskript zu wechseln, um das Problem zu beheben. Wir mögen diesen Ansatz wirklich, da er Probleme behebt, die wir mit dem URL-basierten Problem hatten. Erstens hält es eine geöffnete Apache-Verbindung für einen längeren Zeitraum nicht aufrecht. Außerdem gibt es keine interne Logik für öffentliche URLs. Wie ich bereits sagte, wenn wir versuchen, diese Kommandozeilen-Skripte auszuführen, passiert nichts, die Anwendung wird einfach beendet.

Wir verwenden Ubuntu 12.04 LTS, PHP 5.4.25 und Apache 2.2.22. Ich stellte sicher, dass die Zend Guard-Erweiterung korrekt in der Befehlszeile geladen wurde. Es funktioniert auch korrekt, wenn auf die Seiten von einem Webbrowser zugegriffen wird.

Wenn mir jemand mit diesem Problem helfen kann, würde es sehr geschätzt werden. Vielen Dank!

+1

Gibt es in Ihren Protokollen etwas über den Fehler? Hast du versucht, deinen Loglevel zu erhöhen? – halfer

+0

Wo haben Sie Ihr Zend Guard-Modul installiert? Kannst du die genauen Details darüber anzeigen, wie und in welchen Dateien in welchen Verzeichnissen das Zend Guard Modul aktiviert ist? –

+0

Wie wäre es mit einem kleinen PHP-Skript, das das Skript "locken" lässt? First 'curl' öffnet die Verbindung, ruft den Cookie ab und wird umgeleitet. Der zweite 'curl' macht eine POST-Anfrage und sendet den Cookie. Hat nicht die Vorteile Ihres zweiten Ansatzes, aber ich denke, es wird funktionieren. – Reeno

Antwort

2

Ich werde hier eine Annahme machen. Wenn Sie das Skript zur Ausführung über die Befehlszeile verschoben haben, haben Sie das Skript nicht neu geschrieben. Sie tun einfach php -f auf der Datei anstelle von wget auf der URL.

Wenn dies der Fall ist, haben Sie wahrscheinlich eine Logik im Skript, die Authentifizierung oder Webserver-Logik mit einem Ausgang/sterben erfordert, wenn der Parameter nicht gefunden wird. Du hast erwähnt, dass einige Skripte POST ausführen müssen, also würde ich vermuten, dass dort irgendwo ein $ _POST ist, der offensichtlich nicht auf der Kommandozeile funktioniert.

Nur eine Vermutung.

EDIT: Lesen Sie nur den Teil, wo Sie gesagt haben, funktioniert es, wenn Sie über URL zugreifen. Fast definitiv ein $ _POST oder etwas ähnliches.

0

Sie sollten jede Logik wickeln Sie von der Kommandozeile in Ihrem php Skript in so etwas wie

$cli = isset($_ENV['SSH_CLIENT']); 
if($cli) { 
    // Code to run from command line here 

} else { 
    // Code for the Web here 


} 

Dies würde ermöglichen es Ihnen, die gleiche Datei laufen aus dem Web haben, ausgeführt werden soll, und von der Kommandozeile. Als tazer84 erwähnt - stellen Sie sicher, dass Sie in der CLI-Modus nicht enthalten Web Only Logik (wie header('location: ...');, $_COOKIE, $_POST, usw.), und umgekehrt.

Verwandte Themen