Ich habe also ein PHP-Skript, das ich mit dem folgenden Befehl ausführe:
php -f my_script.php myArguments
Das Skript unterliegt der Versionskontrolle mit svn. Ich habe es gerade aktualisiert, den Befehl zum Ausführen in ein Terminal eingefügt und ausgeführt. Es erfolgt jedoch keine Ausgabe. Keine Fehlermeldung, es wird nichts gedruckt, nichts. Es sieht so aus, als würde es nie starten. Etwa so:
Es fällt mir schwer, ein SSCCE zu entwickeln, da ich den Code, der dies verursacht, nicht wirklich weitergeben kann und es mir nicht gelungen ist, dieses Verhalten absichtlich zu reproduzieren. Allerdings habe ich das jetzt schon zweimal gesehen. Wenn ich meine Änderungen speichere, die Datei zurücksetze und sie wieder einfüge, besteht eine große Chance, dass alles einwandfrei funktioniert.
Es macht mir jedoch Sorgen, dass ich nicht weiß, was dieses seltsame Verhalten verursacht. Gibt es ein Leerzeichen oder etwas, das PHP anweist, nicht zu starten oder etwas auszugeben?
Folgendes habe ich versucht, nachdem ich dieses Verhalten gesehen habe:
Das Skript so zu ändern, dass es einfach ist echo 'hello'
Unsinn am Anfang des Skripts platzieren, damit er nicht analysiert werden kann.
Einfügen von Code aus einem funktionierenden Skript
Ich schlug frustriert meinen Kopf gegen die Wand
Versuchen Sie es in einer anderen Terminal-/Putty-SSH-Verbindung.
Hier wird es interessant: Es tatsächlich funktioniert in einem anderen Terminal. Es macht alles wie erwartet.
Hat jemand eine Idee, was die Ursache dafür sein könnte, oder was ich versuchen sollte, um das Problem zu ermitteln?
BEARBEITEN:
Das „andere Terminal“ ist immer noch die Terminalanwendung, nur eine neue.
Ich verfüge über ausreichende Berechtigungen, um die Datei auszuführen, aber selbst wenn dies nicht der Fall ist, sollte eine Meldung ausgegeben werden, dass dies nicht der Fall ist.
Ich habe absichtlich Syntaxfehler eingeführt, in der Hoffnung, PHP dazu zu bringen, einen Parse-Fehler auszuspucken. Es gab immer noch keine Ausgabe.
Banging my head on a wall in frustration Haben Sie ausreichend SSH-Zugriff, um den PHP-Befehl ausführen zu können?
– iam-Decoder
15. August 2014 um 16:49 Uhr
Weist die Datei Syntaxfehler auf und wird einfach beendet? – Versuchen Sie es mit der Ausgabe php -l < my_script.php
– MrTux
15. August 2014 um 16:51
Problem mit Berechtigungen? Sie können eine tun chmod +x für alle Fälle in der Datei
– DaGhostman Dimitrov
15. August 2014 um 16:54
Wenn Sie sagen, dass es in einem funktioniert anderes Terminal Meinen Sie eine andere Terminalanwendung oder eine andere Instanz desselben Terminals?
das hat mir sehr geholfen. Ich hatte eine alte php.ini mit allow_call_time_pass_reference einstellen On, aber da es nicht mehr verfügbar ist, schlug jedes von cli ausgeführte Skript ohne Ausgabe fehl. Benutzen -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, was mir hilft, den Fehler zu beheben, indem ich diese Zeile aus php.ini entferne. Danke, Sir
– Lorenzo Marcon
17. Januar 2016 um 12:42
Möglicherweise benötigen Sie auch -d error_reporting=E_ALL.
– mwfearnley
1. Juni um 8:36
Ich bin auf das gleiche Problem gestoßen und habe PHP nicht dazu gezwungen display_errors oder auf Syntax prüfen mit -l hat geholfen
Ich habe unser Problem endlich gelöst, und vielleicht finden Sie bei dieser Lösung Hilfe
Testen Sie Ihr Skript, ohne Ihre php.ini zu verwenden:
php -n test_script.php
Dies wird Ihnen helfen, die eigentliche Ursache herauszufinden – die PHP-Konfiguration, das Skript einer anderen Person oder Ihr Skript
In meinem Fall lag es an einem Problem mit dem Skript einer anderen Person, das über hinzugefügt wurde auto_prepend_file Direktive in der php.ini. (Genauer gesagt, einige Dateien und Funktionen später, als ich den gesamten Code durchging und dabei Debugging hinzufügte – nebenbei bemerkt, vielleicht finden Sie das mit fwrite(STDOUT, "debug text\n"); von unschätzbarem Wert, wenn Sie versuchen, diese Art von Problem zu beheben)
Jemand hatte eine Funktion hinzugefügt, die über die Prepend-Datei ausgeführt wurde, aber die verwendet hatte @ Symbol, um Fehler bei einem bestimmten Funktionsaufruf zu unterdrücken. (Möglicherweise haben Sie ein ähnliches Problem, das jedoch nicht speziell mit der php.ini zusammenhängt, wenn Ihr Testskript irgendwelche Includes enthält, die anderen Code einbinden.)
Die Funktion schlug fehl und verursachte den stillen Tod von PHP, was nichts mit meinem Testskript zu tun hatte
Nehmen Sie eine voll funktionsfähige PHP-Umgebung und unterbrechen Sie Ihre CLI-Ausgabe, indem Sie diese am Anfang Ihres Skripts hinzufügen @xxx_not_a_real_function_name_xxx();
Möglicherweise haben Sie einfach ein Problem mit der php.ini, oder Sie (oder jemand anderes) haben sie möglicherweise verwendet @ Die schwerwiegenden (und frustrierenden und zeitaufwändigen) Konsequenzen, die dies beim Debuggen mit sich bringt, sind nicht erkannt
Ich kann gar nicht beschreiben, wie hilfreich das war. Ich arbeite jetzt seit 18 Jahren mit PHP und wusste nichts über php -n und das wies mir die richtige Richtung. Bei mir war es eine vorangestellte Datei, die ich absichtlich verwendet habe, aber wir haben dort einen Check-in, um nach SSL zu suchen und, falls nicht, die Weiterleitung an SSL vorzunehmen. Das hat in PHP7 gut funktioniert, aber in PHP8 scheint es zu versuchen, die CLI umzuleiten. Seltsamerweise gab es jedoch keinen Fehler. Vielen Dank.
– Andy Borgmann
18. April 2022 um 22:19 Uhr
Ich denke in vielen Fällen -n Funktioniert nur, weil php.ini die Anzahl der angezeigten Fehler begrenzt. Ein schönerer Weg ist es also -d error_reporting=E_ALL. Beachten Sie, dass es eine vollständige Liste der Fehlertypen unter gibt php.net/manual/en/errorfunc.constants.php. Mein spezieller Fehler wurde von aufgegriffen E_COMPILE_ERROR.
– mwfearnley
1. Juni um 8:42
Ich habe festgestellt, dass die PHP-CLI bei einem guten Skript aufgrund eines Problems mit der Speicherbeschränkung stillschweigend ausfiel. Versuche es mit:
php -d memory_limit=512M script.php
Data_Dork
Ich hatte kürzlich dieses Problem und es lag daran, dass ich meine Testdatei nicht eingepackt habe <?php & ?> Stichworte.
14518600cookie-checkDas PHP-CLI-Skript gibt nichts ausyes
Banging my head on a wall in frustration
Haben Sie ausreichend SSH-Zugriff, um den PHP-Befehl ausführen zu können?– iam-Decoder
15. August 2014 um 16:49 Uhr
Weist die Datei Syntaxfehler auf und wird einfach beendet? – Versuchen Sie es mit der Ausgabe
php -l < my_script.php
– MrTux
15. August 2014 um 16:51
Problem mit Berechtigungen? Sie können eine tun
chmod +x
für alle Fälle in der Datei– DaGhostman Dimitrov
15. August 2014 um 16:54
Wenn Sie sagen, dass es in einem funktioniert anderes Terminal Meinen Sie eine andere Terminalanwendung oder eine andere Instanz desselben Terminals?
– Joshua Shearer
15. August 2014 um 16:57 Uhr
php -d display_errors=1 -f my_script.php myArguments
– Mike B
15. August 2014 um 17:44 Uhr