# Premature end of script headers



## Jonowa (1. Oktober 2009)

Hallo liebe PHP-Gemeinde,

ich habe für einen Kunden eine Homepage mit einem Downloadbereich eingerichtet. Der Kunde selbst kann über eine Uploadseite im Adminbereich Dateien bereitstellen.
So weit - so gut. Leider lässt der Webhoster (Strato) nur 8MB als Uploadgröße zu. Ich habe zuerst versucht, über ini_set() den entsprechenden Wert zu ändern; wird aber leider nicht zugelassen. 
Daraufhin habe ich eine eigene php.ini mit der selben Konfiguration wie auf dem Websace hochgeladen, bis auf die Werte für "max_execution_time" (300), "memory_limit" (32M) und "post_max_size" (16M).
Nun bekomme ich bei größeren Dateien (>8MB) stets die Fehlermeldung "500 - Internal ... blabla ..."
Die entsrechenden error.log Einträge sehen wie folgt aus:

```
30.09.2009 23:33:30 xxxxxxx.de [client 188.100.28.1] PHP Warning:  POST Content-Length of 11135253 bytes exceeds the limit of 8388608 bytes in Unknown on line 0, referer: http://www.xxxxxxx.de/admin/upload.php
30.09.2009 23:54:26 xxxxxxx.de [client 188.100.28.1] Premature end of script headers: upload.php, referer: http://www.xxxxxxx.de/admin/upload.php
```
In der ersten Zeile sieht man die Meldung, dass die Datei größer als erlaubt ist. Daraufhin folgte die Änderung mit der php.ini. Das Ergebnis steht in der zweiten Zeile.
Ich habe bereits  befragt, jedoch nichts gefunden, was meinem Problem entspricht.
Kennt jemand dieses Problem und kann mir weiterhelfen? Vielen Dank im voraus.


----------



## Sven Mintel (1. Oktober 2009)

Moin,

die Werte für:
*memory_limit
upload_max_filesize*
...wie sehen die aus?


----------



## Jonowa (1. Oktober 2009)

Hallo Sven,

Die Werte mit der neuen php.ini sehen wie folgt aus: (Ursprungswerte stehen in Klammern)
memory_limit = 32M (32M)
upload_max_filesize = 16M (10M)
post_max_size = 16M (8M)

max_execution_time steht jeweils auf 300, wobei die Fehlermeldung nach etwa 2 Minuten erscheint, es gibt also wohl offensichtlich kein Timeout.
Webspace ist übrignes auch noch genügend vorhanden.


----------



## Sven Mintel (1. Oktober 2009)

Ok, da wäre noch *max_input_time*


----------



## Jonowa (1. Oktober 2009)

Kein Problem: max_input_time = 300


----------



## Sven Mintel (2. Oktober 2009)

Mmmh, so recht weiss ich da dann auch nicht weiter

Diese Meldung kommt wirklich nur bei den übergrossen Dateien?

Bist du sicher, dass die Werte auch wirklich so übernommen werden, speziell memory_limit.
Ich meine, ich kann meinem PC auch sagen, er darf jetzt 2TB RAM nutzen, bringt aber nicht viel


----------



## Enumerator (2. Oktober 2009)

Moin!

Dein Problem ist, dass der Server bei der Ausführung der Skripte nicht dazu kommt, vollständige HTTP-Header inklusive der obligatorischen Leerzeile zu senden.
Dafür gibt es eine Menge mögliche Ursachen.
Da ich aber davon ausgehe, dass Du die Skripte lokal erfolgreich getestet hast, bedeutet das wohl einen Konfigurationsfehler der eine Meldung verursacht, bevor der Server bzw. PHP dazu kommt, die Standard-Header zu setzen.
Könntest Du die "neue" php.ini hier posten? 

Übrigens wird der Fehler ziemlich häufig auch durch invalide Zeichencodierungen in den Skripten und/oder Konfigurationsdateien verursacht.
Ein Problem das sich vor allem in Zusammenhang mit UTF-8 und der Entwicklung auf Windows aber Ausführung auf unixoiden Systemen sehr gern einschleicht.
Deswegen gibt es auch so viele Berichte dass Leute wegen dieser Meldung stundenlang gesucht und probiert haben, aber nichts gefunden -
und sich das Problem wie von allein erledigt hat, ohne dass eine Änderung vorgenommen worden wäre:
Dann ist einfach beim Probieren die betreffende Datei nochmal gespeichert oder 'per FTP/SCP hin- und hergeschmissen worden...

Gruß
Enum

Nachtrag:
Was mich 'grad stutzig macht ist deine Aussage, Strato würde nur 8MB Fileuploads erlauben.
Kann es sein dass das nicht durch den Eintrag in der php.ini geregelt wird sondern durch einen Proxy, eine Firewall oder was-weis-ich?
Das upload_max_filesize nur auf 8MB stand, weil dein Hoster dadurch ebendiesen Fehler vermeiden wollte?


----------



## Jonowa (2. Oktober 2009)

Sven Mintel hat gesagt.:


> ... Diese Meldung kommt wirklich nur bei den übergrossen Dateien?
> Bist du sicher, dass die Werte auch wirklich so übernommen werden, speziell memory_limit ...


Mit Dateien bis 8MB Größe funktioniert alles einwandfrei. Und laut Aussage von phpinfo() sind alle Werte erfolgreich eingetragen.



Enumerator hat gesagt.:


> ... Könntest Du die "neue" php.ini hier posten?
> Übrigens wird der Fehler ziemlich häufig auch durch invalide Zeichencodierungen in den Skripten und/oder Konfigurationsdateien verursacht.
> Ein Problem das sich vor allem in Zusammenhang mit UTF-8 und der Entwicklung auf Windows aber Ausführung auf unixoiden Systemen sehr gern einschleicht.
> Deswegen gibt es auch so viele Berichte dass Leute wegen dieser Meldung stundenlang gesucht und probiert haben, aber nichts gefunden -
> ...


Mit der Zeichenkodierung habe ich auch bereits "herumgespielt". Die ini- und auch die Skriptdateien sind aktuell im ANSI-Format, aber auch eine Konvertierun in UTF-8 brachte nichts.

Ich habe mit dem technischen Kundendienst von Strato gesprochen. Der Mitarbeiter sagte mir, dass man eine eigene php.ini in das entsprechende Verzeichnis stellen soll, und der Interpreter würde dann diese ini-Datei nutzen, was offensichtlich auch klappt, denn laut phpinfo() sehe ich die geänderten Werte auch. Er meint weiterhin, dass die Begrenzung auf 8MB nur ein Vorgabewert sei, die man ändern kann.


----------



## Jonowa (7. Oktober 2009)

Hat denn keiner eine Idee?


----------



## Sven Mintel (8. Oktober 2009)

Bekommst du jetzt nur noch die Fehlermeldung gemäss Thementitel, oder auch noch etwas anderes?


----------



## Jonowa (8. Oktober 2009)

Ich bekomme bei zu großen Uploads (>8MB) die Meldung wie im Screenshot.
Und in der Fehler-Logdatei den im ersten Beitrag zitierten Eintrag.

Die Jungs von Strato wissen auch nicht mehr weiter...


----------



## Enumerator (10. Oktober 2009)

'n Abend!

Sorry, hab' eine Weile nicht vorbei geschaut. Deine php.ini scheint nicht die Probleme zu verursachen. Wie sieht's mit den anderen Konfigurationsdateien aus?
Den Server selbst wirst Du wohl nicht manipulieren können, aber vielleicht kannst Du ja den Rest noch posten - .htaccess und dergleichen?
Im Übrigen: bist Du Dir ganz sicher dass es nicht doch ein Problem mit dem Zeichensatz ist? Wenn Du Deine Skripte auf den Server lädst, tust Du das via FTP oder SCP? Im Binärmodus oder als Text?
Es gibt auch Fälle in denen ein Newline- und/oder Carriage-Return-Zeichen am Ende des Strings für die header() Funktion für so einiges an Verwirrung gesorgt hat...
Dann besteht noch die Möglichkeit, schon zu Beginn des Uploads in PHP explizit ein paar Zeichen nach STDOUT zu schreiben und mit flush() das Senden der Header zu erzwingen.
Alles in allem kann man nur ins Blaue stechen ohne wirklich alle Fakten zu kennen.
Je mehr Anhaltspunkte, sprich Konfigurationsdateien, Quellcode usw. Du lieferst, umso eher wird Dein Problem gelöst...

Gruß
Enum


----------



## Sven Mintel (10. Oktober 2009)

Jonowa hat gesagt.:


> Ich bekomme bei zu großen Uploads (>8MB) die Meldung wie im Screenshot.
> Und in der Fehler-Logdatei den im ersten Beitrag zitierten Eintrag.
> 
> Die Jungs von Strato wissen auch nicht mehr weiter...



Der 500er-Fehler ist nichtssagend, das error_log ist da interessanter.
In deinem 1.Beitrag hattest du 2 Fehlermeldungen...also kommt jetzt nur noch die eine(premature end of....) sonst nichts?


----------



## Jonowa (14. Oktober 2009)

Hallo zusammen,

ich bekomme nur noch den Log-Eintrag: "Premature end of script headers..."
Anbei der Inhalt der .htaccess:

```
#######################################################################
#     Diese .htaccess wurde vom STRATO-Webservermanager erstellt      #
#######################################################################

AuthUserFile /home/strato/http/power/web3/52/92/5118592/htdocs/.htuser
AuthName "Gesicherter Bereich"
AuthType Basic
 
require user ******** 

Options -Indexes

AddType application/x-httpd-php3 .php3 
AddType application/x-httpd-php43 .php4 
AddType application/x-httpd-php5 .php .php5
```
Die Dateien sind aktuell im ANSI-Format und ich lade sie per FTP (FileZilla) im ASCii-Modus hoch.


----------



## Sven Mintel (14. Oktober 2009)

Es ist schlicht unmöglich, dir da von aussen weiterzuhelfen, da kannst du noch 100x beteuern, dass eigentlich alles in Ordung ist.

Wie soll man von aussen mit Infos etwas diagnostizieren, was man(du und die Strato-Leute) von innen anhand von Fakten nicht ausmachen kann.

Probiere halt mal alle Möglichkeiten der Fehlerdiagnose durch.... bspw. error_reporting() , set_error_handler() und debug_backtrace() , und hoffe, den Server etwas schlüssigeres ausgeben lassen zu Können, als das bisherige.


----------



## Enumerator (14. Oktober 2009)

Hi!

So langsam glaube ich dass Dein Quellcode irgend etwas schrulliges macht.
Den Technikern von Strato müsste sonst die Ursache quasi ins Auge springen.
Auch wenn Du alles wahrscheinlich lokal erfolgreich getestet hast (hast Du doch?!),
was hälst Du davon mal die betreffenden Teile des Codes hier zu posten?

Gruß
Enum


----------



## Jonowa (14. Oktober 2009)

Vielen Dank für eure freundliche Unterstützung - auch wenn wir hier nicht weiter gekommen sind. Ich sehe schon, dass die Sache per "Ferndiagnose" nicht "mal eben" zu lösen ist. 
Ich werde noch ein wenig weitertesten und den Stratoleuten weiter auf die Füße treten 

Wenn ich in Kürze eine Lösung finde, werde ich sie selbstverständlich hier posten. 

Trotzdem nochmal Danke!


----------

