Marco: Verzeichnisstruktur aufwärts nach bestimmten Ordner durchsuchen

Hallo miteinander,

für mein Seitenprojekt benötige ich einmal ein kleine Hilfestellung.

Ein beliebige Seite (tief in einer Verzeichnisstruktur verborgen) soll mittels einer PHP Funktion die Verzeichnisstruktur durchsuchen um einen Ornder mit einem bestimmten Namen zu finden.

Der Sinn ist, dass auf einer bestimmten Ebene die Ordner mit den wichtigen CSS Dateien und weiteren PHP Funktionen liegen.
Als Rückgabe ist dann faktisch der komplette Pfad angedacht.

Zum Beispiel kann die Seite folgendermaßen angelegt sein:

D:Dateien/htdocs/alleSeiten/DasProjekt/Thema/Kategorie
bzw.
www.neueSeite.de/alleSeiten/DasProjekt/Thema/Kategorie

Der gewünschte Ordner CSS_Dateien soll gefunden werden und als Rückgabe dann erfolgen:
D:Dateien/htdocs/CSS_Dateien

Ich muss ehrlich gestehen, dass ich mit dem Aufwärtssuchen und dem Verzeichniswechsel nämlich nicht so ganz zurecht komme.
Vielleicht gibt es ja einen guten Ansatzpunkt, sodass es für mich klarer als Kloßbrühe wird.

Viele Grüße
Marco

  1. Hi,

    Ein beliebige Seite (tief in einer Verzeichnisstruktur verborgen) soll mittels einer PHP Funktion die Verzeichnisstruktur durchsuchen um einen Ornder mit einem bestimmten Namen zu finden.

    Dass das nicht sonderlich performant wird, ist dir klar?

    Ich muss ehrlich gestehen, dass ich mit dem Aufwärtssuchen und dem Verzeichniswechsel nämlich nicht so ganz zurecht komme.

    Dein erstes Problem ist, dass du nicht erkannt hast, dass du nicht aufwärts in einem vorgegebenen Pfad suchen möchtest - das wäre nämlich reichlich trivial - sondern dass du offenbar von einem Wurzelverzeichnis aus wieder abwärts suchen willst.

    Vielleicht gibt es ja einen guten Ansatzpunkt, sodass es für mich klarer als Kloßbrühe wird.

    Vielleicht möchtest du nur irgendwo ein Pfadpräfix in der globalen Konfiguration hinterlegen, so dass es mit dem setzen einer Einstellung getan ist?

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hi ChrisB,

      nein, ich möchte nich auf- und dann wieder abwärts suchen.
      Natürlich wäre es einfach, in die Seite die *globale* Pfadangabe zu schreiben.

      Allerdings müssen dann Seiten die kopiert oder verschoben werden (einen anderen Pfad bekommen), alle manuell geändert werden.

      Auf der obersten Ebene der Internetpräsenz gibt es Verzeichnisse für CSS-Dateien, JavaScript-Dateien und PHP-Dateien (ausgelagerte Funktionen).

      Um diese nun unabhängig vom Ort der Datei einbinden zu können, soll jede Seite zuerst in das eigene Verzeichnis schauen:
       -Gibt es den Ornder?
       -Wenn nicht, dann eine Ebene höher
       -Gibt es den Ornder?
       ...
      Wird der Ordner gefunden, dann soll der globale Pfad zurück gegeben werden.
      Nun wird die oben beschriebenen Dateien (CSS, JavaScript und die PHP Funktionen) eingebunden.

      Warum sollte das nicht effektiv sein?
      Verschiebe ich eine Datei, dann muss ich nicht selbst die globale Variable verändern. Auch läuft dann das Projekt auf "localhost" und im WWW.

      Viele Grüße
      Marco

      1. Hi,

        Um diese nun unabhängig vom Ort der Datei einbinden zu können, soll jede Seite zuerst in das eigene Verzeichnis schauen:
        -Gibt es den Ornder?
        -Wenn nicht, dann eine Ebene höher
        -Gibt es den Ornder?

        Na und was ist dein Problem dabei, das umzusetzen?

        Da reichen doch simple Stringoperationen schon fast für aus.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      2. Hey Marco,

        weiß nicht genau, ob ich Dich richtig verstehe. Aber so wie es sich für mich anhört wäre doch evtl. eine Konzeption Deiner Seite mittels Front-Controller, Rewrite-Engine und statischen Inhalten (einer statischen Sub-Domain für CSS, JS und Co) oder Vergleichbarem eine Überlegung wert!? Das dürfte wohl perfomanter sein. Unter dem Stichwort "MVC", also Model-View-Controller, findet man auf jeden Fall einige Ansätze hierzu (auch wenn MVC nicht zwingend das Thema ist).

        Gruß, Dennis

  2. Hallöchen,

    gestern sah ich den Wald vor Bäumen nicht...

    Ich brauche doch lediglich abzufragen, ob bspw. "localhost" im URL zu finden ist und kann dann das globale Verzeichnis auf dem Rechner angeben und wenn nicht, dann gibt es das globale Verzeichnis fürs Internet.

    Alles andere wäre blödsinnig und kostet nur Rechnerzeit (und -leistung).

    Trotzdem vielen Dank an die antwortenden Schreiber.

    Viele Grüße
    Marco

    1. Hello,

      gestern sah ich den Wald vor Bäumen nicht...

      Ich brauche doch lediglich abzufragen, ob bspw. "localhost" im URL zu finden ist und kann dann das globale Verzeichnis auf dem Rechner angeben und wenn nicht, dann gibt es das globale Verzeichnis fürs Internet.

      Noch einfacher wäre es, wenn Du Dir für Dein Projekt grundsätzlich einen Webserver (nebst Virtual-Host) auf dem Localhost einrichtest und dann zum Testen einfach einen Eintrag in der lokalen Hosts-Datei vornimmst.

      Dann hättest Du immer gleiche oder zumindest sehr ähnliche Voraussetzungen für den Test- und den Live-Auftritt.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hallo miteinander,

        ich habe jetzt mal ein wenig probiert. Das Verzeichnis soll also von "oben" nagegeben werden (ohne ../../ usw.)

        Als erstes wird geschaut, ob "localhost" oder nicht. Wenn ja, dann muss noch ein Ordner gesprungen werden.

        Für die Variable $php_funktionen muss noch der entsprechende Ordner mit dem Sammlung von Funktionen angehangen und über include() eingebunden werden.

        Leider funktioniert das Ganze nicht

          
          $absolute_adresse = "http://" . $_SERVER['SERVER_NAME'] . (($_SERVER['SERVER_NAME'] == "localhost") ? "/Modellstrassenbahnclub" : "");  
          
          $php_funktionen = $absolute_adresse . "/_php_funktionen_/Kernfunktionen.php";  
          
          echo $php_funktionen;  
          
          include($php_funktionen); <- funktioniert nicht  
            (die Ausgabe wäre 'http://localhost/Modellstrassenbahnclub/_php_funktionen_/Kernfunktionen.php')  
          
          include('D:\Server\htdocs\Modellstrassenbahnclub\_php_funktionen_\Kernfunktionen.php');  
            <- das funktioniert  
        
        

        Gebe ich allerdings alles mit Laufwerk usw. ein, dann klappt es.
        Bei php.net war angegeben, dass man auch den Pfad wie aus meiner Überlegung angeben kann.
        Nun erschließt sich mir nicht, woran es hapert.
        Wer kann mir denn einen Tipp geben?

        Vielen Dank und Grüße
        Marco

        1. Tach auch.

          Für die Variable $php_funktionen muss noch der entsprechende Ordner mit dem Sammlung von Funktionen angehangen und über include() eingebunden werden.

          Vielleicht hilft dir eher folgende Idee: den Sammel-Ordner, in dem deine "globalen" Funktionen, Klassen usw sind, kannst du auch per set_include_path PHP bekannt machen, und sie dann einfach als "lokale" Datei einbinden (lokal meint hier soviel wie "liegt im selben Ordner wie die aktuelle Datei").

          Das kannst du dann in deinen Umgebungsoptionen einstellen. Ich mache das üblicherweise in den Einstellungen vom Webserver, da ich den eh je nach Projekt einstelle.

          Bis die Tage,
          Matti

        2. Hallo,

          Für die Variable $php_funktionen muss noch der entsprechende Ordner mit dem Sammlung von Funktionen angehangen

          du meinst "angehängt"?
          Ein Räucherschinken ist vielleicht gut abgehangen, aber Wäsche wird aufgehängt, eine Wortendung angehängt.
          Den sprachlichen Ausrutscher "angehangen" habe ich schon mehrmals in den letzten Tagen gesehen, du bist nur zufällig derjenige, bei dem ich mal was dazu sage.

          $absolute_adresse = "http://" . $_SERVER['SERVER_NAME'] . (($_SERVER['SERVER_NAME'] == "localhost") ? "/Modellstrassenbahnclub" : "");

          $php_funktionen = $absolute_adresse . "/php_funktionen/Kernfunktionen.php";

          echo $php_funktionen;

          include($php_funktionen); <- funktioniert nicht
              (die Ausgabe wäre 'http://localhost/Modellstrassenbahnclub/php_funktionen/Kernfunktionen.php')

          include('D:\Server\htdocs\Modellstrassenbahnclub_php_funktionen_\Kernfunktionen.php');
              <- das funktioniert

            
          Mach dir bitte klar, was wirklich passiert, wenn du über das HTTP-Protokoll ein PHP-Script includierst. Du bekommst nicht das Script selbst geliefert, das Script wird ausgeführt und du bekommst seine Ausgabe (oder ein leeres Dokument, wenn das Script keine unmittelbare Ausgabe macht). PHP-Includes sollten immer mit einem Dateisystempfad angegeben sein, dicht mit einer HTTP-URL.  
            
          
          > Gebe ich allerdings alles mit Laufwerk usw. ein, dann klappt es.  
            
          Natürlich, dann ist ja auch kein HTTP im Spiel.  
            
          So long,  
           Martin  
          
          -- 
          Das einzige Problem beim Nichtstun: Man weiß nie, wann man damit fertig ist.  
            
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          
          1. Hallo Martin,

            das ist ja eine Hängerei hier...
            Das macht nichts, sonst korrigiere ich immer die anderen ("öfters", "macht Sinn", usw.)
            Da hat es mal den Richtigen getroffen.

            So, dann muss ich mich doch noch viel mehr mit PHP beschäftigen. Aber man lernt ja dazu.

            Viele Grüße
            Marco

        3. So,

          da ja über http es nicht funktionieren kann, dann muss mittels $_SERVER['DOCUMENT_ROOT'] eingebunden werden.
          Das funktioniert auch.

          Den alternativen Vorschlag mittels set_include_path zu arbeiten, lasse ich erst einmal außen vor. Es ist mir nicht ganz ersichtlich, was da passiert.

          So wie ich es verstanden habe, ändere ich die Grundeinstellungen des Ablageortes von php_includes für alles, was so auf "meinem" Webspace rumgeistert.

          Grüße
          Marco