Thomas Luethi: (Apache) Content-Type-Header bei PHP-Skripten

Beitrag lesen

Hallo,

Ich hab in die htaccess Datei folgendes eingetragen
Addtype application/xhtml+xml .html .htm .php

Nun kommt immer der korrekte MIME-Type an, allerdings werden jetzt .php Dateien nicht mehr vom PHP-Parser interpretiert, sondern kommen unverändert beim Browser an.

Das ist normal.

In der httpd.conf (Konfigurations-Datei fuer den Apache-Webserver)
steht vermutlich etwa folgendes:

AddType application/x-httpd-php .php

Damit weiss der Webserver, dass er Dateien mit der Endigung .php
durch den PHP-Parser schicken soll.

Jetzt sagst Du dem Webserver auf Verzeichnis-Ebene mit Deiner AddType Direktive
(s. oben), dass er Dateien mit den Endigungen .html, .htm und .php direkt ausliefern
soll, und zwar mit dem Content-Type application/xhtml+xml.

Somit werden diese Dateien nicht mehr durch den PHP-Parser geschickt.

[...] Nehme ich aus dem Addtype-Command .php wieder raus, funzt der PHP-Parser wieder, aber der falsche MIME-Type kommt wieder an -> der XML-Parser läuft nicht.

Auch das ist fuer mich voellig logisch. Ich schrieb doch schon in [pref:t=77822&m=450035]:

PHP-Skripten schicken normalerweise text/html,
es sei denn, Du schickst im Skript ausdruecklich
einen anderen Header.

Welchen Content-Type ein PHP-Skript normalerweise schickt, haengt
von der Einstellung der Konfigurations-Option default_mimetype ab.
Deren Standard-Wert ist SAPI_DEFAULT_MIMETYPE.
Ich vermutet, dass das bedeutet, dass PHP sich beim Webserver
nach dem Standard-MIME-Type "erkundigt" und diesen uebernimmt.
phpinfo() zeigt Dir an, welchen Wert default_mimetype bei Dir hat.

default_mimetype ist aenderbar in PHP_INI_ALL, also z.B. auch
in der .htaccess oder im Skript selbst per ini_set().
http://www.php.net/manual/de/function.ini-set.php

Um fuer alle PHP-Skripts eines Verzeichnisses zu bewirken,
dass deren Ausgabe mit dem Content-Type application/xhtml+xml
ausgeliefert wird, kannst Du es mit folgendem Eintrag in der
.htaccess versuchen (nicht ausprobiert, ohne Gewaehr!):

php_value default_mimetype "application/xhtml+xml"

oder allenfalls

<IfModule mod_php4.c> php_value default_mimetype "application/xhtml+xml" </IfModule>

Siehe auch:
http://www.dclp-faq.de/q/q-konfiguration-laufzeit.html

Wenn Du einfach willst, dass die Ausgabe eines einzelnen PHP-Skripts
mit dem Content-Type application/xhtml+xml ausgeliefert wird, kannst Du
das am einfachsten im Skript selbst veranlassen:

header("Content-type: application/xhtml+xml");

http://www.php.net/manual/de/function.header.php

Gruesse,

Thomas