Cyx23: header läßt sich nicht ändern

Hallo,

header($_SERVER['SERVER_PROTOCOL']." 200 OK"); (z.B. beim einfachen Test mit
einer eigenen 404-Datei) hat auf einem Server den gewünschten Erfolg, auf dem
anderen nicht.

PHP-Fehler werden dabei keine ausgegeben. Welche Einstellung beim Provider
könnte die entspr. Auslieferung verhindern oder was kommt als Ursache in
Frage?

Grüsse

Cyx23

  1. Moin!

    header($_SERVER['SERVER_PROTOCOL']." 200 OK"); (z.B. beim einfachen Test mit
    einer eigenen 404-Datei) hat auf einem Server den gewünschten Erfolg, auf dem
    anderen nicht.

    PHP-Fehler werden dabei keine ausgegeben. Welche Einstellung beim Provider
    könnte die entspr. Auslieferung verhindern oder was kommt als Ursache in
    Frage?

    PHP kann nicht in jedem Fall einen HTTP-Status-Header generieren. Hängt IIRC davon ab, ob es als Modul oder als CGI genutzt wird.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Hallo.

      PHP kann nicht in jedem Fall einen HTTP-Status-Header generieren. Hängt IIRC davon ab, ob es als Modul oder als CGI genutzt wird.

      Danke, das könnte es sein, "Server API: CGI". Gibt es da noch irgendwelche
      Möglichkeiten, oder sind eher noch mehr andere Einschränkungen zu erwarten?

      Grüsse

      Cyx23

    2. Hallo Sven,

      PHP kann nicht in jedem Fall einen HTTP-Status-Header generieren. Hängt IIRC davon ab, ob es als Modul oder als CGI genutzt wird.

      Ja. Bzw. jain. Die Sache ist etwas komplizierter (im folgenden für Apache erklärt):

      Wenn PHP direkt aufgerufen wird, egal ob als CGI oder Modul, dann kann es immer einen Statusheader setzen (über das von Cyx23 beschriebene Verfahren).

      Wenn PHP jedoch als 404-Handler benutzt wird, dann macht der Apache intern einen Subrequest. Wenn PHP als Modul eingerichtet ist, kann das Modul den Status des gesamten Requests ändern (genaugenommen kümmert sich PHP als Modul, wenn es als ErrorDocument aufgerufen wird, gar nicht erst um den Subrequest, es "krallt sich" direkt den Hauptrequest). Bei PHP als CGI geht das nicht, weil CGI nur den Status des Subrequests ändert und der Hauptrequest weiterhin 404 liefert.

      Bei anderen Webservern kann dies wieder anders sein.

      Viele Grüße,
      Christian