Dynamischer PHP Include

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Dynamischer PHP Include

    Hallo,

    bisher habe ich diesen Code:

    Quellcode

    1. <?php
    2. if (!isset($_GET['site'])) { $_GET['site']="news"; }
    3. if (file_exists($_GET['site'].".php")) { include($_GET['site'].".php"); } else { echo "
    4. <b><center>Noch nicht implementiert</center></b> "; }
    5. ?>

    Verwendet jedoch beinaltet er Sicherheitslücken und da es heist "index.php?go=asd" kommt es Teilweise zu Problemen mit Gästebüchern ETC.

    Kann mir jemand dazu eine Alternative anbieten damit ich genauso auf dem selben Effekt komm?

    Ziel:
    Einbinden anderer Seiten in den (Inhalte) in den Content.

    MfG
    --Kommt noch--
  • Hast du eine Bootstrap datei? Wie ist deine Ordner Struktur?

    eine möglichkeit ist du schützt deine applicationen mit .htaccess [deny from all]

    Und baust in deine Bootstrap folgendes ein.

    Quellcode

    1. switch (true) {
    2. case empty($_GET['modul']):
    3. require_once('default/view/home.php');
    4. break;
    5. default:
    6. require_once('default/view/home.php');
    7. }


    Du musst halt genau abfangen was übergeben werden darf und was nicht, bei der methode ist es so wenn irgend ein klump übergeben wird greift default; ein und hohlt sich die entsprechende Content datei.

    Wenn du das strikt auf Module aufbauen willst und sauber trennen willst, rate ich dir zu einem Framework, das macht das ganze einfacher...
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Unter einer Bootstrap Datei versteht man eine Datei, welche die Auslieferung der gesamten Website erledigt. Bei einer MVC-Anwendung (Model-View-Controller) sollte dies in der Regel die einzige ausführbare PHP Datei im öffentlichen Verzeichnis des Projektes sein. Durch das Aktivieren der RewriteEngine vom Apache Webserver haben wir sichergestellt, dass alle Anfragen an den Webserver auf diese Bootstrap Datei umgeleitet wird.

    Quelle: ralfeggert.de/2006/08/28/syste…nd-basisklasse/#bootstrap
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Habe ich dir doch oben schon geschrieben in meinem Code-Beispiel... Da steht genau wie man Dynamisch Content includiert und wie eine kleine Außnahmebehandlung.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Jetzt habe ich aber das selbe Problem wie vorher. Wenn ich jetzt zum Beispiel eine Datei namens gb erstellen würde.

    In der nur:

    Quellcode

    1. <?php include('gb/'); ?>


    Dann wird das gb in die datei gb.php includet jedoch kommt es dann zuu einen Konflikt mit dem Include Script der page denn bei den meisten GB´s is es so das es nach den selben system arbeiten sprich ?...=....
    --Kommt noch--
  • Mmh sag das doch , das du ein verlinkungs Problem hast.

    D0nut hat dir schon einen Lösungsvorschlag gegeben. Da ich chdir nicht mag, bevorzugere ich eine etwas elegantere Methode :)

    Quellcode

    1. date_default_timezone_set('Europe/Berlin');
    2. set_include_path('.' . PATH_SEPARATOR . '../library'
    3. . PATH_SEPARATOR . '../application/'
    4. . PATH_SEPARATOR . '../application/default/controllers/plugins/'
    5. . PATH_SEPARATOR . '../application/default/models/'
    6. . PATH_SEPARATOR . '../application/produkte/models/'
    7. . PATH_SEPARATOR . '../application/mynoro/models/'
    8. . PATH_SEPARATOR . '../application/cms/models/'
    9. . PATH_SEPARATOR . get_include_path());


    Ist im endefekt fast das gleiche :) kannst dir quasi eine aussuchen.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Bei Donuts Art wer es doch so das wenn ich meine gb.php hätte

    Könnte ich in die reinschreiben

    Quellcode

    1. <?php
    2. chdir('gb');
    3. include('index.php');
    4. ?>


    Jetzt sollte ich in der Verzeichnis gb sein und include die index.php. Aber im endeffekt include ich ja die gb.php wieder in meiner index über ?modul=gb und somit müsste es doch wieder zu einem Konflikt mit meinem ?modul=.... kommen! Da manche auch über dieses Art von Include laufen bsp. Triggers TG V.1! Würde damit in Konflikt kommen!
    --Kommt noch--
  • Wie gesagt: chdir, includepath, ... haben rein gar nichts damit zu tun, dass die Links umgeschrieben werden.
    Dazu brauchst du größere Geschütze.

    Entweder du änderst die Ausgabe indem du alles mit ob_start und ob_get_contents in einen Puffer schreibst und mit einem regulären Ausdruck die Links änderst.
    Oder änderst die Verarbeitung indem du per mod_rewrite alles über eine zentrale PHP Datei auswertest.
  • Wenn du das wie D0nut vorgeschlagen hast über eine zentrale datei laufen lässt, sind wir wieder beim thema Bootstrapping!! Dann kannst du wunderbar in der datei mit set_include_path() sagen wo deine Files liegen und kannst das alles mit switch & case abfragen, was oben schon alles steht wie man das macht.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • include ist da um php quelltexte einzubinden. Nicht um Linkpfade, Bildpfade oder sonstiges zu ändern.

    Schau dir mal deinen Quelltext an...
    <html><body>hauptseite<html>coppermine</body></html>

    So kommst du nicht weiter.. du templates bearbeiten, linkpfade ändern, controller dateien erstellen, ... viel spaß ;)
    Ansonsten nimm dir halt nen iframe.