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