Include-File automatisch finden?

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

  • Include-File automatisch finden?

    Ich habe ein kleines Programm mit mehreren Seiten Unterverzeichnissen. Diese Programm sollen später auch Leute ohne jegliche HTML- und PHP-Kentnisse installieren können.
    Alle Dateien greifen auf eine Konfig-Datei "conf.inc" zurück.
    Die Unterverzeichnisse, die der (noch gedachte) User anlegt, sollen von ihm frei wählbar sein.

    Gibt es die Möglichkeit, beim Erstaufruf einer Datei den Pfad zu der "conf.inc" automatisch suchen zu lassen und beispielsweise aus dem Eintrag
    Code:
    include ("platzhalter/conf.inc");
    den "echten" Eintrag:
    Code:
    include ("/home/realer_pfad/htdocs/lib/conf.inc");
    zu erstellen?


  • #2
    rekursives verzeichnis-scanning nach conf.inc und dann eintragen: einlesen der dateien, in denen das include geändert werden muss, dann mit nem regular replace drüber und die datei wieder schreiben. include anweisung am besten immer in der ersten zeile damit nicht soviel daten geschaufelt werden müssen *tweak*...

    CAT Music Files

    Kommentar


    • #3
      Also, das ist jetzt soweit klar mit dem Einlesen Neuschreiben der Datei, ist schnell erstellt.
      Nur wie kriege ich dieses "rekursive verzeichnis-scanning" hin?
      Ich habe es mit verschiedenen Suchmaschinen-Scripts versucht, aber das funktioniert irgendwie nicht.

      Kommentar


      • #4
        Original geschrieben von Guido
        Also, das ist jetzt soweit klar mit dem Einlesen Neuschreiben der Datei, ist schnell erstellt.
        Nur wie kriege ich dieses "rekursive verzeichnis-scanning" hin?
        Ich habe es mit verschiedenen Suchmaschinen-Scripts versucht, aber das funktioniert irgendwie nicht.

        Nimm zum Beispiel etwas in der Art:

        Code:
        function traverseDirectory($dirid)
        {
        while (($file = readdir($dirid)) !==false)
        {
        if (($file !== ".") && ($file !== ".."))
        {
        if (is_dir($file))
        {
        chdir($file);
        $newdir = opendir(".");
        $closedir = traverseDirectory($newdir);
        closedir($closedir);
        chdir("..");
        }
        else
        echo "$file $isdir
        \n"; # **** diagnostic
        }
        }
        return ($dirid);
        }
        $dirid = opendir(".");
        $closedir = traverseDirectory($dirid);
        closedir($closedir);
        statt dem echo solltest du dann eben ne if-clause reinschreiben, die überprüft, ob die datei "conf.inc" heißt.

        mehr dazu gibt's in den user notes auf http://www.php.net/manual/en/function.readdir.php


        [Editiert von Sky am 09-07-2001 um 21:18]

        CAT Music Files

        Kommentar


        • #5
          Vielen Dank, ich werde mich mal jetzt an die Arbeit machen und damit befassen

          Kommentar


          • #6
            Wenn du nur aus den Unterverzeichnissen auf die conf.inc zugreifen willst, die garantiert in einem der übergeordneten Verzeichnisse liegt, empfehle ich diese Lösung hier:
            - wesentlich kürzer
            - braucht weniger Resourcen, da sie auf Rekursion und das Öffnen jedes einzelnen Verzeichnisses verzichtet
            - wechselt das Verzeichnis nicht -> damit bleiben die relativen Pfade zu anderen Skripten erhalten.

            einziger Nachteil: es geht halt nur nach oben.


            Code:
            $dir = '';
            while (!file_exists($dir.'conf.inc'))
            {
              $dir .= '../';
              if (!is_dir ($dir))
                break;
            };
            require $dir.'conf.inc';
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              Habe beide Varianten probiert!.
              Bei der von Sky (function traverseDirectory) würde ich diese ja gleich in einer Art install.php ausführen wollen, anschließend alle php-files suchen, in denen
              Code:
              include ("no_conf");
              steht und diesen durch
              Code:
              include ("/gefundener/absoluter/pfad/conf.inc");
              ersetzen lassen.
              Das Finden des Pfades klappt auch primstens, aber da hängt es wieder an der Funktion zum Suchen und Ersetzen (ich muss noch viel lernen! ). Ich probier schon wie der Teufel.

              Der Code von Titus scheint auch super zu sein und funktioniert.
              Also dachte ich mir, suche ich doch gleich den Pfad ("lib"), in dem alle Includes liegen. Kam das bei raus:
              Code:
              $lib_dir = '';
              while (!file_exists($lib_dir . "lib")) {
                $dir .= "../";
                if (!is_dir ($lib_dir))
                  break;
                };
              include ($lib_dir . "lib/conf.inc");
              include ($lib_dir . "lib/" . $template);
              ...
              etc
              ...
              Habe diesen Code jetzt generell am Anfang der entsprechenden PHP-Seiten stehen.

              Die Lösung von Sky werd ich trotzdem nochmal probieren, und wenn ichs geschafft habe, hier veröffentlichen. Habe mich zumindest schon intensivst mit dem Artikel
              http://www.php.net/manual/en/function.readdir.php
              befasst und bin ein bisschen vorwärtsgekommen.

              Kommentar


              • #8
                die funktion zum suchen & ersetzen ist nicht schwer. nehmen wir an du hast eine datei sample.php3, in der eben dieser pfad vom installationsscript upgedatet werden muss. dann könnte das include in dieser datei z.B. so aussehen:

                Code:
                include('config_insertmarker');
                das install-script liest dann die datei zum beispiel in die variable $content und führt die folgende funktion aus:

                Code:
                $content = eregi_replace('config_insertmarker','/pfad/conf.inc',$content);
                titus: ich denke nicht, dass geschwindkeit hier relevant ist, da das installscript im normalfall nur einmal ausgeführt werden muss.

                greetings,

                Sky

                CAT Music Files

                Kommentar


                • #9
                  einmal bei jedem Seitenaufruf
                  mein Sport: mein Frühstück: meine Arbeit:

                  Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                  Kommentar


                  • #10
                    naja, das wäre wohl sehr unpraktisch. ein install-script wird ja wohl noch jeder starten können, bevor er die scripts dann benutzt. meine lösung lief ja auch von vornherein darauf hinaus.

                    CAT Music Files

                    Kommentar


                    • #11
                      also, ich denke auch, das eine einmalig Installation auch für Dummys möglich ist.
                      Das Konzept sieht dies wirklich vor:
                      Aufruf einer Install.php, in der als erstes genau diese Variable in den notwendigen Dateien neu geschrieben wird, anschliessend ein Formular, mit dem man weitere Variablen (z.B. Templates, Inhalte etc. ...) editieren kann.

                      Im Moment habe ich die Variante von Titus verwendet.
                      Die gefällt mir sehr, weil sie flexibel und schnell einsetzbar ist, ohne Install.
                      Aber bei der Anwendung wird ja trotzdem ein Install ausgeführt.
                      Jetzt bastle ich Variante 2 (hat auch den Vorteil, dass ich aus Version 0.0.0.1 die Version 0.0.0.1.a machen kann - es lebe die eigene Versions-Nummer ):
                      Ich lass die Funktion beim Start der install.php3 zwei mal durchlaufen, einmal, um die conf.inc zu finden und ein zweites mal, um alle .php3-Dateien zu finden und dort die Variable zu ersetzen.
                      Muss nur aufpassen, das der nicht das ganze System des Providers durchsucht
                      Das dauert vielleicht beim ersten Aufruf etwas länger, aber dann wars das. Wer 60 Minuten auf eine zu unvollkommene Windowsinstallation warten kann, wird wohl mal 3 Minuten auf eine komplett fertige PHP-Anwendung warten können.

                      Kommentar


                      • #12
                        nun, 3 minuten wird es wohl sowieso nicht dauern. ich weiss zwar nicht, wo du deine site hostest, aber auf jedem durchschnittlichen webserver sollte das ganze in ein paar sekunden browserfertig sein.

                        vielleicht solltest du dir auch gedanken über die dateiendung machen, da es damit viel ärger geben kann. PureTec z.B. unterstützt nur '.php3 und '.php4,' andere wiederum nur '.php'.
                        das ließe sich auch mit ein wenig aufwand als option in das installscript mit einbauen. ich habe eine zentrale konfigurationsdatei, in der eine variable $scriptext gesetzt wird (enthält z.B. '.php4'), die später bei allen links genutzt wird, also z.B. so:

                        print '<a href="script'.$scriptext.'">link</a>';

                        wie gesagt, ein wenig aufwand, aber ich denke das könnte sich später wirklich lohnen.

                        CAT Music Files

                        Kommentar


                        • #13
                          Wir haben unser "Kram" bei Schlund liegen, ist die selbe Server-Farm.
                          Ich löse diese Probleme mit einer .htaccess mit folgendem Inhalt:
                          Code:
                          AddType x-mapp-php .php
                          AddType x-mapp-php3 .php
                          AddType x-mapp-php4 .php
                          und wahlweise auch noch mit der Zeile
                          Code:
                          DirectoryIndex index.php index.php3

                          Kommentar


                          • #14
                            mhm problem dabei ist eben dass es auch so 'nette' hosts gibt die .htaccess dateien ausgeschaltet haben - nicht gerade üblich und sinnvoll, aber so etwas gibt es auch...

                            CAT Music Files

                            Kommentar

                            Lädt...
                            X