Problem mit header() in statischer methode

balufreak

Aktives Mitglied
Thread Starter
Dabei seit
12.10.2003
Beiträge
1.563
Reaktionspunkte
28
Hallo Leute,

Hab mal wieder ein PHP Problem.
Ich habe folgendes:
index.php
PHP:
<?php
  session_start();
  //...
  function __autoload($class) {
     require_once('./classes/.$class.'.class.php');
  }

  appHelper::redirectTo('http://www.google.com');
?>
appHelper.class.php
PHP:
<?php
  class appHelper {
    //...
    public static function redirectTo($url) {
      header('Location: '.$url);
    } 

  }
?>

diese Konstellation führt mich zu folgendem Fehler:
Warning: Cannot modify header information - headers already sent by (output started at D:\xampplite\htdocs\workspace\***\classes\appHelper.class.php:1) in D:\xampplite\htdocs\workspace\***\classes\appHelper.class.php on line 13

Warum zum Teufel funktioniert das nicht?
 
soweit ich weiss darf vor header() kein weiterer php befehl stehen. (nur mal so als anhaltspunkt zum googlen)
 
hmm also ich habe jetzt mal alle leerzeichen und leerzeilen rausgenommen. Aber wenn ich nicht mal kommentare machen kann ist das echt blöd. Allerdings funktionierts immernoch nicht.
 
Also ich habe jetzt mal alles abgespeckt um andere Fehler auszuschliessen:
index.php
PHP:
<?php
function __autoload($class) {
  require_once('./classes/'.$class.'.class.php');
}
appHelper::redirectTo('http://www.google.ch');
?>
appHelper.class.php
PHP:
<?php
class appHelper {
  public static $db_con = null;
  public static function redirectTo($url) {
    header('Location: '.$url);
  }
  public static function isPost() {
	if(isset($_POST) and !empty($_POST)) {
	  return true;
	}
    return false;
  }
}
?>

und es funktioniert immer noch nicht. grml... bekomme wieder die selbe fehlermeldung.
 
balufreak schrieb:
hmm also ich habe jetzt mal alle leerzeichen und leerzeilen rausgenommen. Aber wenn ich nicht mal kommentare machen kann ist das echt blöd.

Da hast Du mich Mißverstanden! Innerhalb der PHP-Tags kannst Du Leerzeilen/(-zeichen lassen wie Du willst!

Es geht um den Rest außerhalb der Tags <?php..?>. Alles was davor/danach steht ist ja kein PHP mehr und wird eben nativ ausgegeben und vom Browser eben auch als Output registriert. Beginnt also die Datei mit einer Leerzeile vor dem <?php oder endet mit einer Leerzeile danach ( was manche Editoren gern ungefragt selbst erzeugen), so gab es schon Output BEVOR PHP gestartet wurde ( eben die Leerzeilen).

Dafür mußte bereits ein Header über den Content und Charset geschickt werden (text/html,...). Kommt dann im Sourcecode eine header-Anweisung, so wäre das eine 2te und der eigentliche Header wäre längst versandt!

Ähnlich verhält es sich mit dem BOM von UTF-8 ( wußte gar nicht das das Ding so heißt). Auch diese drei Zeichen werden ausgegeben und davor wird eben ein Header gesendet.


==> PHP-Dateien immer ohne leading oder trailing blanks oder anderen Whitespaces erzeugen. Wenn Davor/Danach Text steht ( lesbar oder nicht) sind header-Anweisungen nicht machbar. Das gilt nicht nur für UTF-8!
 
Zurück
Oben Unten