Announcement

Collapse
No announcement yet.

headers already sent by

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • headers already sent by

    Hallo, beim ausführen eines PHP-Scripts bekomme ich immer eine Fehlermeldung die sich auf den Header beziehen:
    Code:
    Warning: Cannot modify header information - headers already sent by (output started at /mnt/web2/30/88/5787488/htdocs/Tippspiel/connect.php:6) in /mnt/web2/30/88/5787488/htdocs/Tippspiel/Admin/Login/login.php on line 26
    Line26:
    header('Location: index.php');

    Gibt es eventuell noch einen anderen Weiterleitungsbefehl?
    Ich hab das Ganze schon nach Leerzeichen oder der gleichen durchsucht, aber das wird nicht der Fehler sein, denke ich.
    Muss man vielleicht etwas an der php.ini umstellen? Wenn ja, kann man das ganze ja eh vergessen, da ich darauf keinen Zugriff habe (Stratowebspace) =/

  • #2
    Hallo goodfella,

    diese Fehlermeldung kommt immer dann, wenn vor dem Modifizieren des Headers schon Inhalt von PHP an den Client ausgegeben und damit implizit bereits ein Header gesendet wurde. Mit Einstellungen in der PHP.ini hat das nichts zu tun, die Gründe liegen eher in deinem Programm.
    Das Senden von Inhalt kann explizit, z.B. durch echo oder print() erfolgt sein, kann aber auch "unbeabsichtigt" durch Leerzeilen vor dem öffnenden <?php oder nach dem schließenden ?> sein. Dies gilt natürlich kaskadierend auch für alle per include() oder require() eingebundenen Scripts.
    Wenn du die explizite Variante durch echo, print, etc. ausschließen kannst, dann bleiben dir nur zwei Möglichkeiten:
    1.: Du durchsuchst deine Scripte nach "versteckten" Ausgaben und entfernst diese. Das wäre die sauberste (aber Aufwendigere) Variante.
    2.: Du verwendest die Ausgabepufferung von PHP durch den Einsatz von ob_start(). Damit wird verhindert, daß irgendwelche Ausgaben vor dem Scriptende gesendet werden.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Die Datei "connect.php" ist eine externe Datei in der nur der
      Connectionstring steht. Diesen include ich in jeder weiteren Datei.
      KÖnnte es damit zusammenhängen?

      Danke für die Hilfe!!

      Comment


      • #4
        Mach mal in der include-Datei alle leeren Zeilen raus.

        Daran lag das bei mir mal, wenn ich mich richtig erinnere...bin mir nicht sicher, aber versuchen kann mans ja mal.

        Also statt
        PHP Code:
        <?php
        $var 
        "foo";

        connect();
        ?>
        PHP Code:
        <?php
        $var 
        "foo";
        connect();
        ?>

        Comment


        • #5
          jap, daran lag es auch. in der connect.php, welche includet wird, war eine leerzeile -.-
          naaaja :P

          Vielen Dank für die Hilfe!!!

          Comment


          • #6
            Hallo,

            das Problem ist nicht sowas:
            PHP Code:
            <?php
            $var 
            "foo";
            +
            connect();
            ?>
            sondern sowas:
            PHP Code:
            +
            <?php
            $var 
            "foo";

            connect();
            ?>
            oder sowas:
            PHP Code:
            <?php
            $var 
            "foo";

            connect();
            ?> 
            +
            oder sowas:
            PHP Code:
            .<?php
            $var 
            "foo";

            connect();
            ?>
            Zur besseren Sichtbarkeit habe ich Leerzeilen mit + und Leerzeichen mit . gekennzeichnet.

            Alles was nicht zwischen <?php ?> steht, wird von PHP als HTML-Content aufgefasst und ausgegeben.

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Ah, mir kam meine eigene Aussage schon merkwürdig vor, weil php Leerzeilen ja normalerweise egal sind, solange sie zwischen <?php und ?> liegen...wieder was gelernt

              Comment


              • #8
                Mittlerweile ist es "best practice" das schließende PHP-Tag einfach wegzulassen, um genau solche Probleme zu vermeiden. Ein Nachteil entsteht dadurch nicht.
                --
                Ultraschallbilder 7. Schwangerschaftswoche bis 26. SSW (Junge)

                Comment


                • #9
                  Originally posted by thomberg View Post
                  Mittlerweile ist es "best practice" das schließende PHP-Tag einfach wegzulassen, um genau solche Probleme zu vermeiden. Ein Nachteil entsteht dadurch nicht.
                  Ob das nun "sauberer" ist als darauf zu achten das man keine "Schmutzzeichen" im Quelltext hat?
                  Außerdem erledigst du damit nur den Fall2 (Leerzeilen am Ende).

                  Gruß Falk
                  Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                  Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                  Comment


                  • #10
                    Wie gesagt, das Weglassen des schließenden PHP-Tags bringt keine Nachteile, sondern nur Vorteile.
                    Gerade bei größeren Projekten mit mehreren Entwicklern ist es sinnvoll, dass sich alle daran halten.
                    Aber ich gebe zu, dass es auch Stimmen gibt, die auf ein schließendes Tag bestehen.

                    Der Zend-Coding-Standard verbietet sogar das schließende PHP-Tag am Ende von Dateien.
                    http://framework.zend.com/manual/en/...ormatting.html
                    For files that contain only PHP code, the closing tag ("?>") is never permitted. It is not required by PHP. Not including it prevents trailing whitespace from being accidentally injected into the output.
                    --
                    Ultraschallbilder 7. Schwangerschaftswoche bis 26. SSW (Junge)

                    Comment

                    Working...
                    X