Anzeige:
Ergebnis 1 bis 13 von 13

Thema: Include aus verschieden tiefen Unterordnern

  1. #1
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549

    Include aus verschieden tiefen Unterordnern

    Guten Abend,

    erst mal gleich zum voraus: Ich habe null Plan von PHP (und eigentlich auch nicht wirklich vor das zu ändern ).

    Das Problem: Ich habe eine Webseite in der sich wie überall gewisse Elemente wiederholen. Entsprechend hab ich die Sachen in separate Dateien ausgelagert und via php-Includes eingebunden.

    Nicht sehr praktisch ist aber dass die relativen Pfade je nach dem wo ich bin im Ordnerpfad verschieden sind. Aber das geht noch so, hab ich halt angepasst.

    Allerdings möchte ich jetzt in meiner footer.php-Datei jeweils n paar so kleine Icons einbinden. Die liegen in /banner:
    Code:
    <a href="http://validator.w3.org/check/referer">
    		<img src="banners/xhtml11.png"/>
    </a>
    nur passt das natürlich nicht wenn ich mich in /bla/zeugs befinde denn von dort aus währe der Pfad ../../banners/xhtml11.png.

    Das schlauste was ich bisher gefunden habe ist ein Script was mir einfach .. an den Pfad anhängt bis es nicht mehr weitergeht. Aber das ist blöd.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Ich dödel, ist ja ganz einfach. Jetzt wo ich /banner geschrieben habe hab ich gerade festgestellt dass das ja geht und diese absoluten Pfade absolut zum Webserverroot sind.

    Vielen Dank an Peschmae und das Forum für die tatkräftige Hilfe

    Und bei php kann man einfach den include_path setzen. Soso. Nett.
    [Edit]
    Hmm, aber so einfach geht das in Php irgendwie nicht. Tipps?
    Also den Include-Path um den obersten Ordner erweitern der erreicht werden kann (halt document-root oder wie man dem sagt)
    [/Edit]

    MfG Peschmä
    Geändert von peschmae (15-02-2006 um 19:36 Uhr)
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von peschmae
    Vielen Dank an Peschmae und das Forum für die tatkräftige Hilfe

    Und bei php kann man einfach den include_path setzen. Soso. Nett.
    [Edit]
    Hmm, aber so einfach geht das in Php irgendwie nicht. Tipps?
    [/Edit]

    MfG Peschmä
    include_path wird glaube ich in den Apache configs gesetzt.
    Ich versteh dein Problem noch nicht so richtig. Du kannst doch
    includieren was du willst, und bekommst auch noch einen
    Rückgabewert, ob der include erfolgreich war.

    http://www.php.net/manual/en/function.include.php
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  4. #4
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Ja ich geb zu es ist n bisschen wirr ich versuchs noch mal

    Ordnerstruktur:

    /webseite
    /webseite/includes
    /webseite/bla
    /webseite/bla/blubb

    Nun hab ich in jedem dieser Ordner eine index.php-Datei die einige Dateien aus dem Include-Ordner includen möchte. Das gibt dann Dinge wie
    include("../../../../../include/include.php")
    was recht unschön ist.

    Ich möchte einfach
    include("include.php") oder include("/include/include.php") machen können. (Für Bilder und Stylesheets geht das offenbar - der Browser weiss wo gucken; aber bei php geht das so nicht)

    Die Serverconfig kann ich nicht ändern (bei mir schon natürlich aber nicht dort wo die Seite online ist).

    MfG Peschmä
    Geändert von peschmae (15-02-2006 um 19:57 Uhr)
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  5. #5
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von peschmae
    Ja ich geb zu es ist n bisschen wirr ich versuchs noch mal

    Ordnerstruktur:

    /webseite
    /webseite/includes
    /webseite/bla
    /webseite/bla/blubb

    Nun hab ich in jedem dieser Ordner eine index.php-Datei die einige Dateien aus dem Include-Ordner includen möchte. Das gibt dann Dinge wie
    include("../../../../../include/include.php")
    was recht unschön ist.

    Ich möchte einfach
    include("include.php") oder include("/include/include.php") machen können. (Für Bilder und Stylesheets geht das offenbar - der Browser weiss wo gucken; aber bei php geht das so nicht)

    Die Serverconfig kann ich nicht ändern (bei mir schon natürlich aber nicht dort wo die Seite online ist).

    MfG Peschmä
    include("../../../../../include/include.php")

    Also, wenn sich dort eine Datei befindet, und die Rechte Okay sind,
    sollte Sie includiert werden können. Ansonsten mal die Fehlermeldung posten.

    Anonsten gibt auch noch die Funktion file_exists() um zu überprüfen,
    ob die Datei auch im Pfad vorhanden ist.

    http://www.php.net/manual/en/function.file-exists.php


    Günstig auch mal <?phpinfo();?> aufzurufen um zu sehen wo du gerade bist
    (in welchem Verzeichnis)

    Ich würde das aber später etwas einfacher lösen z. B. mit:

    define("PATH","webseite");
    define("BILDER","pics");
    define("FUNKTIONEN","includes");

    Dann kannst Du dir bequem deinen Pfad zusammensetzen mit z. B.

    include(PATH.'/'.FUNKTIONEN.'/datei.php');
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  6. #6
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Zitat Zitat von Romanday
    include("../../../../../include/include.php")

    Also, wenn sich dort eine Datei befindet, und die Rechte Okay sind,
    sollte Sie includiert werden können. Ansonsten mal die Fehlermeldung posten.
    Wie ich geschrieben habe: Es funktioniert, aber es gefällt mir überhaupt ganz und gar nicht. Ich möchte lieber egal wo ich bin einfach include("include/include.php") hinschreiben können.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  7. #7
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    Zitat Zitat von PHPAPI


    Pfade und Verzeichnisse

    Tabelle G-5. Konfigurations-Optionen für Pfade und Verzeichnisse

    Name Standard Änderbar
    include_path PHP_INCLUDE_PATH PHP_INI_ALL
    doc_root PHP_INCLUDE_PATH PHP_INI_SYSTEM
    user_dir NULL PHP_INI_SYSTEM
    extension_dir PHP_EXTENSION_DIR PHP_INI_SYSTEM
    cgi.fix_pathinfo "0" PHP_INI_SYSTEM
    cgi.force_redirect "1" PHP_INI_SYSTEM
    cgi.redirect_status_env "" PHP_INI_SYSTEM
    fastcgi.impersonate "0" PHP_INI_SYSTEM
    cgi.rfc2616_headers "0" PHP_INI_SYSTEM


    Hier eine kurze Erklärung der Konfigurationsoptionen:



    include_path string
    Hier können Sie eine Liste von Verzeichnissen angeben, in dem die Funktionen require(), include() und fopen_with_path() nach Dateien suchen. Das Format ist ähnlich zur PATH-Umgebungsvariablen des jeweiligen Systems: Eine Liste von Verzeichnissen, getrennt durch einen Doppelpunkt unter UNIX oder ein Semikolon unter Windows.

    Beispiel G-1. include_path unter UNIX
    include_path=".:/php/includes"

    Beispiel G-2. include_path unter Windows
    include_path=".;c:\php\includes"

    Ein . in dieser Option ermöglicht, Dateien relativ zum aktuellen Verzeichnis einzubinden.
    Dementsprechend den Pfad zum include-Verzeichnis angeben. Fertig.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  8. #8
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    PHP-Code:
     /** In der Obesrten Ebene Von Document_Root Definiert! */ 
    $r realpath__FILE__ ); 
    $s dirname$r ); 
    define'DOCROOT'$s "/" ); 
    unset( 
    $r$s ); 
    ini_set'include_path'DEFAULT_INCLUDE_PATH DOCROOT "MeinBasisKlassenPfad" ); 
    Siehe auch Globale Konstanten! get_defined_constants()
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  9. #9
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    @Turbohummel: Das ist schon klar. Die Frage ist auch: Wie mache ich das ohne (1) den Pfad ganz absolut anzugeben - der kann ja von System zu System ändern (2) ohne den immer ganz relativ anzugeben weil ../../../../.. einfach blöd ist

    @undefined: Ja. Aber wie gehts dann weiter - ich meine ich tue das in die index.php in meinem DOCROOT. Wie kriege ich php dazu den include_path auch für andere php-Dateien so beizubehalten?
    Insbesondere sollte der natürlich auch passen wenn man direkt zu einer Unterseite geht und gar nie die Seite im DOCROOT lädt.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  10. #10
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von peschmae
    @Turbohummel: Das ist schon klar. Die Frage ist auch: Wie mache ich das ohne (1) den Pfad ganz absolut anzugeben - der kann ja von System zu System ändern (2) ohne den immer ganz relativ anzugeben weil ../../../../.. einfach blöd ist

    @undefined: Ja. Aber wie gehts dann weiter - ich meine ich tue das in die index.php in meinem DOCROOT. Wie kriege ich php dazu den include_path auch für andere php-Dateien so beizubehalten?
    Insbesondere sollte der natürlich auch passen wenn man direkt zu einer Unterseite geht und gar nie die Seite im DOCROOT lädt.

    MfG Peschmä
    include_path ist eine Variable die Global gesetzt wird und somit auch in
    jeder Datei verfügbar ist, ebenso wie __FILE__ + __LINE__.

    Es gibt keine universellen Lösungen sondern nur individuelle in Abhängigkeit
    von deinen Rechten.

    gibt doch mal die einzelnen Variablen und Konstanten mit echo aus, von
    @undefineds Script.

    Der Rest ist Konkatenation.
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  11. #11
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Du hast ein Projekt Model Fehler.
    In einer einzigen Datei auf der Root Ebene sagen wir mal sie heist Env.php
    Stehen deine Umgbungsvariablen/Konstanten und Header Informationen.
    Die Datei ziehst du in der Index auf die Zweite Zeile so das alle weiteren include Anweisungen erst von Env.php erben.
    Wenn du aber aber jetzt eine Externe PHP Datei aus deinem Projekt aufrufen möchtest die nicht von Index.php included wird kannst du auch nicht diese Informationen erben. Weil ini_set() oder Konstanten immer vor dem Parsen des Dokumenten-baumes erstellt werden.
    Du hast hier mehrere Möglichkeiten.
    1) Du erlaubst in der apache.config das Setzen von Umbebungsvariablen mit php_value in der .htaccess und Konfigurierst in dieser deine gnazen Umgebungs-Variablen (siehe FILES Match)
    2) Du verwendet in der apache.conf ein php_admin value und legst die Umgebungsvariablen fest.
    3) Du legst in der apache.config das php.ini Value auto_prepend_file mit php_admin_value fest ( nicht zu empfehlen weil ob_handler dann keine Errors mehr ausgibt).
    4) Du verwendest die Superglobale Konstante DOCUMENT_ROOT und ziehst in jeder Datei die Env.php aus dem DOCUMENT_ROOT Pfad.

    Letzeres ist zu empfehlen weil es Plattform Übergreifend ist und keine Administrative eingriffe erfordert.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  12. #12
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    [Nachtrag]
    Sagen wir mal deine Env.php liegt geschützt im Verzeichnis lib.

    Code:
    <document_root>
    	<lib> mit .htaccess geschützt (Order allow,deny Deny from all) nur local groups duerfen lesen!
    	<scripte>
    	<css>
    	<html>
    	<mypage>
    Damit kannst du jetzt auf Lokaler Ebene innerhalb deines VirtualHost auf diese Datei Zugreifen.
    Allen Anderen Hosts bleibt der Zugriff verweigert.
    PHP-Code:
    <?php
     
    include_once( $_SERVER['DOCUMENT_ROOT'] . "/lib/Env.php" );
    ?>
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  13. #13
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Danke, DOCUMENT_ROOT war genau das Ding was ich gesucht hatte. Das passt!

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •