header("Location") funktioniert nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Sorry @ Max3D + gleiwitz
    Habe das mal ausprobiert und das echo wird im Erfolgsfall wirklich nicht angezeigt. Somit mein Fehler (hoffentlich nicht böse
    Wenn aber eine Funktion dem header() folgt, dann kann diese auch im Erfolgsfall ausgeführt werden. Wobei ihr im einfachsten Fall nur unnötige Operationen macht oder im Schlimmsten Fall etwas ausführt was ihr gar nicht wollt.
    PHP-Code:
    header('Location: http://meine_seite.de/index.php');
    mail('me@meine_domain.de','Und ich kriege sie doch','Irgendwie krieg ich die mail'); 
    Diese Mail kriege ich obwohl der Header erfolgreich gesendet wurde. Hab's gerade getestet.

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #17
      also ganz schnell, ich muss mich beeilen:

      Original geschrieben von 3DMax
      warum soll das nicht direkt mit dem fehler zu tun haben, wenn du es schon so hervorhebst, und mit einer todsünde gleichstellst?
      weil kollege thread-opener andere dinge missachtet hat, wie z.b. http://www.php-resource.de/forum/sho...threadid=62965 oder register_globals (die $Send - variable) .
      wenn er den output "funzt nich" sehen kann, hat er weiter oben einen fehler gemacht, sonst wär er schon lange nicht mehr auf der seite.

      wie jahlives schon sagt, es funktioniert mit den meisten browsern. es muss aber nicht mit allen funktionieren, und ich hatte z.b. das beispiel schon einmal - ein einfacher java-http-proxy hat's z.b. nicht verstanden und wir haben damals eine woche damit verschwendet, den fehler zu suchen. das muss nicht jedem nochmal passieren, oder? also: rtfm http://www.php.net/header und benutze folgendes:
      PHP-Code:
      $uri 'http://my/absolute/uri';
      header('Location: ' $uri);
      printf("Sie werden zu %s weitergeleitet, falls Ihr Browser das nicht versteht"$uri);
      exit(
      0); 
      gleiwitz19 hat recht, denn es könnte einen client geben, der den location-header nicht versteht oder (z.b. aus sicherheitsgründen, wenn die domain plötzlich wechselt) blockt. dann kommt die ausgabe.

      wir können aber davon ausgehen, dass der client des topic-starters nicht gerade zu den besonderheiten gehört, und aus diesem grund meine ich immer noch, dass kollege den fehler weiter oben gemacht hat. im zweifelsfall ist wieder mal das BOM vor <?php dran schuld.

      und zum schluss noch die beiden typischen quizfragen:
      PHP-Code:
      <?php
      header
      ('Location: http://www.yahoo.com');
      header('Location: http://www.google.com');
      exit();
      wo landen wir?

      PHP-Code:
      <?php
      ob_start
      (); // oder php.ini - setting, auch nicht ganz unüblich.
      header('Location: http://www.yahoo.com');
      print 
      "Sie werden zu yahoo umgeleitet\n";
      header('Location: http://www.google.com');
      exit();
      und jetzt?

      exit() ist also unabdingbar und nicht mit ausgabe zu substituieren.

      cya
      axo
      Zuletzt geändert von axo; 03.08.2006, 08:08.

      Kommentar


      • #18
        Hallo zusammen,

        danke für die angeregte Diskussion, der ich allerdings nur zu Teilen folgen konnte, da ich mehr oder weniger ein Newby bin.

        Ich bin dem Rat von Axo gefolgt und habe den Befehl

        PHP-Code:
        error_reporting(E_ALL); 
        eingegeben. Wie ihr schon erwartet habt, folgte als Ergebnis

        Cannot modify header information - headers already sent by
        Nun habe ich mich im Netz umgesehen und versucht diese Meldung für mich zu entschlüsseln. Die Kernaussage die ich daraus gezogen habe ist, dass vorab keine Ausgabe erfolgen darf. Und das verstehe ich nicht, wie es gemeint ist.

        Kann es etwas mit den beiden Includes zu tun haben, die ich vorangestellt habe? Der eine Include soll die Session verwalten und die Passwortabfrage unterstützen, im anderen Include habe ich meine SQL-Abfragen untergebracht.

        Ansonsten habe ich (wissentlich) vor dem Header keine Ausgabe. Oder kann es etwas mit dme Formular zu tun haben, das ich in der selben Datei aber weiter unten stehen habe?

        Und was bedeutet am Ende der Fehlermeldung
        output started at /homepage/.../bestell.php:3
        das php:3?

        Der direkte Link funktioniert übrigens auch nicht. Und es nützt nichts, wenn ich meine Ausgabezeile
        PHP-Code:
        print "Es klappt nicht"
        lösche.

        Kommentar


        • #19
          zu dieser fehlermeldung siehe den sticky-thread in diesem forum.

          "php:3" steht für die dritte zeile.
          Ansonsten habe ich (wissentlich) vor dem Header keine Ausgabe.
          das sieht php anders..

          Kommentar


          • #20
            Es reicht schon wenn du das <? setzt und dann das ?> als endtag und hinter dem letzten tag ein leerzeichen machst. Auch wenn der Befehl mit dem header("Location:"); vor dem ?> kommt - das Leerzeichen am Ende reicht um diese Fehlermeldung zu produzieren.

            Kommentar


            • #21
              der op hatte anfangs keinen fehler: "Cannot modify header information - headers already sent by ", erst nachdem er error_reporting(E_ALL) gesetzt hat.
              gut, jetzt kann es sein, dass error_reporting bei ihm so eingestellt ist, dass keine warnings angezeigt werden, das glaube ich aber nicht.

              ich würde vorschlagen, der op erstellt eine php-datei, wo nur der header location gesetzt wird (mit absoluter url!) und testet somit, ob grundsätzlich weitergeleitet wird.

              die e-notices abzustellen, kann auch nicht falsch sein aber wie gesagt, ich denke, das ist jetzt nur ein folgefehler.

              Kommentar


              • #22
                nettes Codefitzelchen gefällig?
                PHP-Code:
                <?php
                function redirect($url) {
                    
                session_write_close();
                    
                    
                // Für URLs wie /bla/
                    
                $arr parse_url($url);
                    if (!isset(
                $arr['scheme'])) {
                        
                $url 'http://' $_SERVER['SERVER_NAME'] . $url;
                        if (
                defined('SID') AND SID != '') {
                            
                $url .= (strpos($url'?') ? '&' '?') . SID;
                        }
                    }
                    
                    if (!
                headers_sent()) {
                        if (
                ob_get_level() != 0) {
                            
                ob_end_clean();
                        }
                        
                header("Location: " $url);
                    }
                    
                ?>
                    <html>
                        <meta http-equiv="Refresh" content="0;url=<?=$url?>">
                        <body onload="try { self.location.href='<?=$url?>' } catch(e) {}">
                            <a href="<?=$url?>">Redirect</a>
                        </body>
                    </html>
                    <?php
                    
                die();
                }
                ist nicht von mir, habs nur aufgegriffen, etwas verbessert und verwurschtelt, aber ich finde es toll ^^
                Das Ding greift sich auch Angaben wie redirect('/bla') und macht daraus korrekt eine absolute Angabe, ggf. inklusive SID

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #23
                  @fun_fred:

                  (1) in php ist alles Ausgabe, was nicht zwischen <? und ?> steht. Vor allem kann es vor dem <? zB ein Leerzeichen oder eine Leerzeile haben. Es kann sich auch um ein in UTF-8, dh. Unicode abgespeichertes skript handeln, das wäre tückischer.

                  (2) so eine viertel Fehlermeldung wie von Dir zitiert, hilft nicht weiter, das php:3 ist nicht ein anhängsel, und Du hast insgesamt nicht mehr als die Hälfte der ganzen Fehlerinformation gebracht, welche php ausgibt. Wie kommst Du dazu, so ungenau zu denken? Du verwendest immerhin sogar includes - ohne weitere Angabe.

                  Was Du im Netz herumgegugelt hast ,wird wohl auch von derselben Qualität sein.

                  @alle: warum zieht php-resource immer solche Frager an, können die nicht anderswo hin gehen??

                  Kommentar


                  • #24
                    Hallo zusammen,

                    leider konnte ich nicht eher an mein Script ran (Job und Familie ...) . Ich habe nun endlich die Zeit gefunden und auch den Fehler.

                    @gleiwitz19:
                    Deine Hilfestellung hat mich weiter gebracht. Ich habe in der selben Datei vor dem Script noch HTML-Informationen gehabt. Die haben zu der Fehlermeldung geführt, die ich oben genannt habe. Damit war das Problem aber noch nicht behoben, denn in einer der Include-Dateien dümpelten am Ende nach dem ?> noch zwei Blanks.

                    Nun klappt es!!!! Danke, ich bin fast wahnsinnig geworden.

                    Nochmal @gleiwitz019:
                    Sorry, wenn ich euch mit meiner laienhaften Fragerei gestört habe. Da ich aber das ganze als Hobby betreibe und niemanden in meinem Bekanntenkreis habe, der PHP programmiert, habe ich meine Frage in diesem Forum abgesetzt. Mir war nicht klar, dass es ausschließlich für Cracks gedacht ist. Kannst du mir einen Tipp geben, wo ich als Anfänger meine Frage absetzen kann, wenn ich für euch "zu ungenau denke", wie du es nennst.

                    Dennoch: noch mal vielen Dank an dich und auch an die Anderen, die sich meiner banalen Fragestellung angenommen haben!

                    Kommentar


                    • #25
                      Bitte gerne geschehen, Dank wird immer gerne entgegengenommen.

                      А как всегда - маленькое маленькое замечание - высланных благодарят. Высылавших ругают.

                      Kommentar


                      • #26
                        Web xnxx errors

                        Zitat von gleiwitz19 Beitrag anzeigen
                        echo nach allen header() ist nicht falsch und sogar höchst üblich.

                        echo vor header() ist falsch (und nur das hat jahlives gemeint).
                        +1

                        Es ist klar, dass dies nicht das Problem ist, da es in jedem Web sehr verbreitet ist

                        Kommentar


                        • #27
                          Gratulation, sir********************!! Du holst einen elf Jahre alten Thread aus der Versenkung. Respekt!!!

                          Kommentar


                          • #28
                            Zitat von bandit600 Beitrag anzeigen
                            Gratulation, sir********************!! Du holst einen elf Jahre alten Thread aus der Versenkung. Respekt!!!
                            Das ist nur ein Spam-Account. Erwarte dir keine Antwort.

                            Kommentar

                            Lädt...
                            X