Automatischer Verweis ohne Verw. header()?

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

  • Automatischer Verweis ohne Verw. header()?

    Hi,

    schreibe gerade mein eigenes CMS, welches auf meine Bedürfnisse zugeschnitten ist (kein Monster Joomla oder ähnliches).
    Dabei ist ein eigentlich simples Problem aufgetaucht, aber irgendwie war das googlen nicht erfolgreich oder hab falsche key-words eingegeben...

    Ich verwalte alle meine Inhalte alle über die /index.php (Controller). Der genaue Content wird über eine GET Variable 'link' ermittelt, (z.B. /index.php?link=bla). Ich will nur existierende Werte von 'link' annehmen (die über eine interne xml-datei verwaltet werden), ansonsten soll ein verweis auf bla.com/index.php?link=home geschehen.

    Wenn einer also in den Browser einträgt http://bla.com/index.php?link=linkWhichNotExists soll der Browser ihm automatisch http://bla.com/index.php?link=home anzeigen.
    Ich will nur die Funtion von php wissen, die das erledigt. Der restliche Code (Überprüfung, ob links da sind oder nicht) steht schon.

    leider funktioniert ein header() nicht, da hier auf die gleiche seite verwiesen wird (->index.php).

    Sorry falls dieses Problem zu leicht zu lösen ist, dass es eigentlich wert ist beantwortet zu werden .
    Zuletzt geändert von aldana; 23.01.2006, 01:54.

  • #2
    Re: Automatischer Verweis ohne Verw. header()?

    Wieso nicht?
    PHP-Code:
    if ($_GET['link'] == 'linkWhichNotExists') {
        
    header('Location: http://example.com/index.php?link=home');
        exit;

    Kommentar


    • #3
      Erstmal danke (ich verwende php 5.1.1).

      Ich habs nochmal per copy/paste ausprobiert. Leider die gleiche Fehlermeldung:
      Warning: Cannot modify header information - headers already sent by (...../index.php).

      Er kann die Header nicht ändern, weil meine Auswertung über links erst im <body> geschieht.

      Wie kann ich also einen verweis per php-code erreichen, der im <body> aufgerufen wird.

      thnx.
      Zuletzt geändert von aldana; 23.01.2006, 02:13.

      Kommentar


      • #4
        PHP-Version spielt hierbei keine Rolle.
        http://www.php-resource.de/forum/sho...threadid=62965
        http://de2.php.net/manual/en/ref.outcontrol.php

        Kommentar


        • #5
          hab ich mir schon gedacht, dass die version keine rolle spielt, aber nur zur info angegeben, falls da neue funktionen hinzugekommen sind, die im <body> weiterleitungen ausführen können.

          Vielleicht gibt es ja eine built-in php funktion für die Ausführung eines simplen GET requests?

          Kommentar


          • #6
            Was hast du denn vor? Sagt dir allow_url_fopen was? Ansonsten mit fsockopen() usw.

            Kommentar


            • #7
              naja da header() ja nicht möglich ist, suche ich eine funktion

              goto_url('http://bla.com/index?link=bla');

              die im <body> teil immer automatisch zur angegeben url weiterleitet. jetzt dafür low-level runterzugehen und einen socket zu öffnen etc. scheint mir schon etwas umständlich.

              eine obige funktion auf http-abstraktion wäre also echt toll... muss es bei den millionen von scripts doch geben...

              danke und gute n8.

              Kommentar


              • #8
                --> http://de2.php.net/manual/en/function.header.php
                Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.
                Es darf nichts vor dem Aufruf von header() an den Client geschickt werden ... das weißt Du ja mittlerweile. Also solltest Du Deine Dateien anders strukturieren.

                Es ist doch genauso gut möglich, dass Du die Überprüfung vor der ersten Ausgabe machst. Es dürfte genau keine Einschränkungen verursachen.

                Das hier wäre eine alternative Möglichkeit, allerdings eben auf JavaScript basierend ... .. muss man selbst wissen, ob man das nutzen möchte

                Grüße Ben.
                Java, PHP, (X)HTML, CSS, XML, Linux, Webserver, ... uvm.

                Kommentar


                • #9
                  Mach doch einfach folgendes:
                  (Ich gehe davon aus das dein header und so eine eigene PHP datei ist da du erst im body tag deine links auswertest)

                  index.php:
                  PHP-Code:
                  <?php
                  include "./header.php";
                  include 
                  "./menu.php";
                  if(isset(
                  $_GET['link']) && file_exists("./ordner mit PHP dateien".$_GET['link'].".php")) {
                    include 
                  "./order...".$_GET['link'].".php";
                  } else {
                    include 
                  "./ordner.../main.php";
                  }
                  include 
                  "./footer.php";
                  ?>
                  Dann kannst du die XML datei rausschmeisen und musst nur noch .php datein anlegen die automatisch über die index gefunden werden.
                  Zuletzt geändert von Schanz; 23.01.2006, 08:47.

                  Kommentar


                  • #10
                    meine seite ist nach einem template aufgebaut, welches sections benutzt. header-teil, menu-teil, main-content teil und footer-teil. diese section rufen dann selber immer das entsprechende modul über php-functions auf (wie content_mod(), menu_mod() etc..).
                    es exisitiert also nur eine index.php.

                    vielleicht habt ihr recht, ich sollte die auswertung, ob link existiert etc. einfach in den header verlagern, das gehört da (von der aufgabe betrachtet her) auch irgendwie besser hin. also in header_mod() integrieren.
                    ich hatte halt zuvor gedacht, dass das weiterleiten im body ohne probleme über EINE einfache built-in function realisiert werden könnte.

                    auf java-script will ich unbedingt verzichten. macht den code nur unwartbarer (falls java-script nicht selber generiert wird).

                    danke leute!

                    Kommentar


                    • #11
                      ....

                      Hi,

                      Ich würde das an Deiner Stelle so machen ....:



                      <?


                      if (!isset($_GET["link"]) OR $_GET['link'] == "")
                      {
                      $link = "seiten/start.php";
                      } else {
                      $link = $_GET["link"];
                      }

                      $link = basename($link); //Diese Zeile sorgt dafür, dass Pfadangaben entfernt werden, zum Schutz gegen Hacker, das fremde Seiten nicht eingebunden werden können.... :-)

                      if(!@file_exists("seiten/$link"))
                      {
                      @include "seiten/start.php";
                      } else {
                      @include "seiten/$link";
                      }
                      echo "<br>";

                      ?>


                      Deine Links müssten dann nach dem Muster aufgerbaut sein: index.php?link=meineseite.php

                      Wenn die Seite in dem Ordner "seiten" existiert, wird sie in der index.php includiert, wenn nicht wird zu der start.php (oder wie sie auch bei dir heisst) weitergeleitet, bzw. includiert. Du könntest z.B. auch eine 404.php-Datei zur Fehlerausgabe benutzen, o.ä.....

                      Das Script kannst du natürlich an deinen Bedürfnissen noch anpassen oder erweitern....

                      Gruss Andre
                      Webagentur Gelsenkirchen
                      Artikelverzeichnis für kostenlose Backlinks

                      Kommentar

                      Lädt...
                      X