PHP-cli-script keine Ausgabe, nichts
Also ich habe ein php-script, welches ich ausführen mit folgendem Befehl:
php -f my_script.php myArguments
Das Skript ist unter Versionskontrolle mit svn. Ich habe gerade aktualisiert, eingefügt, dass der Befehl in ein terminal und ausgeführt werden. Es gibt jedoch keine Ausgabe. Keine Fehlermeldung, es nicht drucken nichts, nichts. Es sieht aus wie es nie beginnt. Eine Art, wie der folgenden:
me:/srv/scripts# php -f my_script.php myArguments
me:/srv/scripts#
Andere Scripte laufen einwandfrei.
Es ist schwierig für mich zu kommen mit einer SSCCE, da kann ich nicht wirklich teilen, der code, der dies verursacht, und ich habe nicht in der Lage zu replizieren, dieses Verhalten absichtlich. Ich habe aber gesehen, das jetzt zweimal. Wenn ich meine änderungen speichern, wiederherstellen der Datei, und fügen Sie Sie wieder in, es gibt eine gute chance, dass es läuft Prima.
Allerdings bin ich besorgt darüber, nicht zu wissen, was die Ursache für dieses sonderbare Verhalten. Ist es ein Leerzeichen, oder etwas, das sagt PHP, nicht zu starten, - oder-Ausgang nichts?
Hier ist, was ich versucht habe, nachdem er dieses Verhalten:
- Ändern Sie das Skript, so ist es eine einfache
echo 'hello'
- Putting Unsinn am Anfang des Skripts, so ist es unparseable.
- Einfügen von code aus einer funktionierenden Skript
- Schlug meinen Kopf an die Wand in frustration
- Versuchen es in einen anderen terminal/putty ssh-Verbindung.
Hier wird es interessant: Es ist tatsächlich funktioniert in einem anderen terminal. Es funktioniert auch alles wie erwartet.
Also hat jemand irgendwelche Ideen, was könnte die Ursache sein, oder Dinge, die ich versuchen sollte, um das problem festzustellen?
EDIT:
Den "anderen terminal" ist immer noch die terminal-Anwendung, nur eine neue.
Ich über ausreichende Berechtigungen zum ausführen der Datei, aber auch wenn ich es nicht Tat, sollte es spuckte eine Meldung, dass ich nicht.
Ich absichtlich Fehler in der syntax, in der Hoffnung, dass ich PHP ausspucken einen parse-error. Es wurde noch keine Ausgabe.
Banging my head on a wall in frustration
haben Sie ausreichend den SSH-Zugriff in der Lage sein zum ausführen der php-Befehl?Hat die Datei hat Fehler in der syntax und gerade beendet? - versuchen, durch die Ausgabe von
php -l < my_script.php
Problem mit Berechtigungen? Sie können eine
chmod +x
auf die Datei nur für den FallWenn Sie sagen, er arbeitet in einer verschiedene terminal meinst du ein anderes terminal-Anwendung oder in einer anderen Instanz von der gleichen Klemme?
php -d display_errors=1 -f my_script.php myArguments
InformationsquelleAutor MirroredFate | 2014-08-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
display_errors könnte deaktiviert werden, bevor Sie Laufzeit. Sie können schalten Sie es manuell mit dem -d-Schalter:
allow_call_time_pass_reference
eingestelltOn
, aber da es nicht mehr lieferbar ist, jedes Skript ausführen von cli konnte ohne Ausgang. Mit-d display_errors=1
warf:PHP Fatal error: Directive 'allow_call_time_pass_reference' is no longer available in PHP in Unknown on line 0
mir helfen, den Fehler zu beheben, durch das entfernen dieser Zeile aus der php.ini. Dank sirInformationsquelleAutor Mike B
Stieß ich auf das gleiche Problem, und kein Betrag der Nötigung PHP
display_errors
oder überprüfen Sie die syntax mit-l
geholfenIch schließlich löste unser problem, und vielleicht finden Sie etwas Hilfe mit dieser Lösung
Testen Sie Ihr Skript ohne php.ini:
php -n test_script.php
Dies wird Ihnen helfen, zu schärfen in auf die wahre Ursache - die PHP-Konfiguration, jemand anderes Skript oder Skript
In meinem Fall, war es ein problem mit jemand anderes Skript wurde Hinzugefügt, über die
auto_prepend_file
- Direktive in der php.ini. (Oder genauer gesagt, mehrere Dateien und Funktionen später, als ich gebohrt, durch den code hinzufügen debug-als ich ging - auf einer Seite beachten, können Sie feststellen, dass die Verwendungfwrite(STDOUT, "debug text\n");
von unschätzbarem Wert, wenn Sie versuchen zu Debuggen dieser Art von Problem)Jemand hatte Hinzugefügt, eine Funktion, die war immer führen Sie durch die prepend-Datei, aber hatte die
@
symbol zum unterdrücken von Fehlern, die auf eine bestimmte Funktion aufzurufen. (Sie haben vielleicht ein ähnliches problem, aber nicht speziell im Zusammenhang mit php.ini, wenn Sie irgendwelche umfasst die in den test-Skript bringt in anderem code)Die Funktion ist ausgefallen und verursacht den lautlosen Tod von PHP nichts zu tun mit meinem test-Skript
Finden Sie alle Arten von Warnungen darüber, wie mit der
@
symbol bewirkt, dass die genaue problem hatte ich auch, und vielleicht sind Sie mit, http://php.net/manual/en/language.operators.errorcontrol.php.Reproduktion von ähnlichen Symptomen:
Nehmen Sie eine voll funktionsfähige PHP-Umgebung, und brechen Sie Ihre CLI-Ausgang, indem diese die oben in deinem script
@xxx_not_a_real_function_name_xxx();
So können Sie nur noch ein problem mit dem php.ini, oder du (oder jemand anderes) kann verwendet werden
@
die nicht erkennen, die schwere (und frustrierend und zeitraubend) die Folgen, die es verursacht im debugging -InformationsquelleAutor Tim
Ich erfahrene PHP-CLI scheitern lautlos auf einem guten Drehbuch, weil ein memory limit Problem. Versuchen Sie es mit:
InformationsquelleAutor Marco Marsala