Raketenwilli: Warnung! Beware! Uwaga!

Beitrag lesen

201 oder 301: Jaaa, ich dachte, es sei keine aduerhafte Weiterleitung (301), sondern eher eine Neu-Kreation (201), oder liege ich mit den Begriffen falsche?

Nun, es ist keine Neukreation. Das wäre der Fall, wenn durch einen Upload eine völlig neue Ressource für den Abruf entstanden wäre. Ist es aber nicht.

Das "ob_start()" hatte ich schon mal auf php.net gesehen, konnte damit nix anfangen, dachte, es sei für besondere Fälle.

Das ist es auch. Bei modernen PHP-Versionen ist das Output-Buffering (ob_) nämlich aut of the Box angeschaltet, man kann es aber abschalten (Weiter unten steht beschrieben, was dann genau in Deinem Fall passiert) oder den Inhalt vorzeitig senden. Mit headers_send() kann man nur prüfen, ob das Kind bereits ins Wasser gefallen ist, mit ob_start() einen kleinen Damm errichten, der das Wasser (Senden des Contents und also der Header-Zeilen) bis zu einem ob_flush() oder dergleichen aufhält. Damit das funktioniert muss dann

<?php
ob_start();

ganz am Anfang des Skriptes stehen. Nichts davor: kein Text, kein HTML, keine Byte Order Mark!

Wenn ich das Ding ganz an den Anfang setze, geht's:

<?php
  header(...)

Nur da nützt es mir nix.

Genau das lässt mich vermuten, dass da schon „was“ gesendet wurde. Und wenn die header schon via Webserver gen Browser gesendet wurden, ist das Kind im Wasser und abgetrieben, Du kannst ihm keine Badesachen hinterherwerfen. Dessen Hilferufe hörst Du nicht, weil Du ANC-Kopfhörer auf hast.