webentwicklung-frage-antwort-db.com.de

500 Serverfehler: Vorzeitiges Ende der Skriptkopfzeilen:

Ich habe eine Website in PHP, die mit einem solr-Indexierungsserver arbeitet, der auf CodeIgniter basiert.

Wir haben viele neue Inhalte erhalten, also haben wir die Datenbank geleert und mussten den Inhalt neu indexieren (etwa 168.000 Elemente). Ich habe ein Skript erstellt, um den Inhalt in 500er-Schritten zu indizieren. Wenn das Skript beendet ist, starten wir die nächste Indizierung.

Es funktioniert perfekt in meiner lokalen Testumgebung, aber bei der Produktion erhalte ich diesen 500-Fehler:

[Thu Dec 02 ...] [error] [client IP] Premature end of script headers: index.php

Es gibt absolut nichts in meiner php.log, nur das Apache error_log, das es zurückgibt. Ich habe gesehen, dass es auf anderen Seiten der Website ein- oder zweimal vorkam, aber es war während dieser Indizierung.

Irgendwelche Ideen?

22
Stéphane Goetz

Dieser Fehler wird (manchmal) durch das FastCGI-Setup der FcgidIOTimeout-Direktive (alter Name: IPCCommTimeout) verursacht.

Dies ist die Anzahl von Sekunden für das Timeout von IO. Der Standardwert ist 40 Sekunden. Timeout bedeutet das 

"Die FastCGI-Anwendung muss innerhalb dieses Zeitraums mit der Generierung der Antwort beginnen. Erhöhen Sie diese Anweisung nach Bedarf, um Anwendungen zu behandeln, deren Antwort relativ lange dauert."

Sie können versuchen, das Problem zu lösen, indem Sie dies in Ihre vhost.conf eingeben:

<IfModule mod_fcgid.c>
  # 5 minutes for IO timeout, default is 40 seconds
  FcgidIOTimeout 300
</IfModule>

Sie können den Wert nach Bedarf erhöhen und den ursprünglichen Wert wiederherstellen, sobald der Neuindexierungsvorgang abgeschlossen ist.

24

Es gibt eine gute Liste der Möglichkeiten in der KB von Liquid Web.

  1. Beim Upgrade oder Downgrade auf eine andere Version von PHP können verbleibende Optionen in der httpd.conf verbleiben. Überprüfen Sie die aktuelle Version von PHP mit php -v in der Befehlszeile und suchen Sie nach Zeilen, in denen eine andere Version in der httpd.conf erwähnt wird. Wenn Sie sie finden, kommentieren Sie sie aus, destillieren Sie die httpd.conf und starten Sie Apache neu.

  2. Die Anweisungen RLimitCPU und RLimitMEM in der Datei httpd.conf können auch für den Fehler verantwortlich sein, wenn ein Skript aufgrund eines Ressourcenlimits beendet wurde.

  3. Ein Konfigurationsproblem in suEXEC, mod_Perl oder einem anderen Modul von Drittanbietern kann die Ausführung von Skripts oft beeinträchtigen und den Fehler verursachen. Wenn dies die Ursache ist, werden im Apache error_log zusätzliche Informationen zu Besonderheiten gefunden.

  4. Wenn das Protokoll von suphp 2 GB oder mehr erreicht, wird möglicherweise der Fehler für das Ende der Skriptkopfzeilen angezeigt. Sehen Sie, was das Protokoll enthält, und gzip oder nullen Sie es. Starten Sie Apache neu, und behandeln Sie anschließend alle Probleme, die das Suphp-Protokoll aufgedeckt hat. Das Suphp-Protokoll befindet sich unter:/usr/local/Apache/logs/suphp_log

  5. Die Berechtigungen des Skripts können diesen Fehler ebenfalls verursachen. CGI-Skripts können nur auf Ressourcen zugreifen, die für den in httpd.conf angegebenen Benutzer und die Gruppe zulässig sind. In diesem Fall kann der Fehler einfach darauf hinweisen, dass ein nicht autorisierter Benutzer versucht, auf ein Skript zuzugreifen.

http://www.liquidweb.com/kb/Apache-error-premature-end-of-script-headers/

Wenn ich in derselben Situation wäre, würde ich zuerst die Berechtigungen überprüfen und dann mit 3 und 4 fortfahren.

4
Tim

Ich habe diese Fehlermeldung auch in etc/httpd/logs/error_log nach einem 500 internen Serverfehler erhalten, der versucht, eine Website zu laden.

Für mich war die Lösung Berechtigungen - musste die Datei chmod 755. Ich hatte die Datei als Benutzer mit höherer Zugriffsebene erstellt als den, der die Site auf dem Server "lädt".

2
the.s.brom

sein kann auch wegen der falschen Verwendung von PHP APC-Erweiterung.

1
Jacob Arlington

Ich hatte dieses Problem und nachdem ich mehr als 5 Stunden gekämpft hatte, deaktivierte ich den xcache und alles wurde wieder normal und der Fehler verschwand!

0

Was ist dein error_level in PHP? Die Fehlermeldung, die Sie dort im Protokoll erhalten, ist oft auf einen einfachen PHP-Fehler zurückzuführen. Der Server ist jedoch so eingerichtet, dass aus Sicherheitsgründen keine Fehlernachrichten an den Client gesendet werden. Dadurch ist die Nachricht nicht sehr hilfreich, es könnte alles sein. 

0
Dr.Molle