Sauberer Code???

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

  • #16
    DocumentRoot ist der Pfad aus der entsprechenden Apache-Direktive des umgebenden (v)Host. Das kann bei CLI-Aufrufen gar nicht gesetzt sein.

    Wie wäre es mit wget?

    Kommentar


    • #17
      wie soll wget helfen? damit lade ich den inhalt von dateien/urls?
      verantwortlich für Elygor - Das kostenlose Browserspiel

      Kommentar


      • #18
        Bei "wget http://example.com/yourscript.php" statt "php /path/to/yourscript.php" läuft dein Script im Kontext deines Webservers und nur dann gibt es auch ein DocRoot.

        Kommentar


        • #19
          belastet das den server nicht mehr als wenn ich direkt über php aufrufe? ich halte das für meine zwecke nicht für die lösung de sproblems, da ich noch andere komponenten habe die mit einspielen. ich suche eine lösugn für ein fehlendes DOCUMENT_ROOT
          verantwortlich für Elygor - Das kostenlose Browserspiel

          Kommentar


          • #20
            __FILE__ ist immer gegeben. einfach den dateinamen abschneiden und du hast den absoluten pfad
            it's not a bug,
            it's a feature!

            Kommentar


            • #21
              Das klingt nach PHP_SELF, bringt mir aber leider auch nichts.

              DOCUMENT_ROOT gibt beispielsweise

              /usr/www/httpdocs aus, so dass ich darauf meine include festlegen kann

              z.b.

              $_SERVER['DOCUMENT_ROOT']/ebene1/ebene2/class.php

              wenn ich aber __FILE__ oder PHP_SELF verwende und mich einmal in ebene1 udn einmal in ebene2 befinde haben die variablen verschiedende werte und meine includes wären unterschiedlich und haken dann ...
              verantwortlich für Elygor - Das kostenlose Browserspiel

              Kommentar


              • #22
                Es gibt keine Alternative. DR wird vom Webserver nur deswegen reingereicht, damit man Links bauen kann. Viele Scripte nutzen es auch, um ihre Includes zu finden. Das ist aber Pfeffer.

                Die Idee hinter
                include $_SERVER['DOCUMENT_ROOT'].'/incs/functions.php';
                ist, dass man nicht wissen muss, wo das Verzeichnis incs liegt. Aber es bringt eben die Einschränkung mit sich, dass incs nicht außerhalb des DR liegen kann.

                tick tack tick tack


                Doch, kann es!
                include $_SERVER['DOCUMENT_ROOT'].'/../incs/functions.php';
                Die Einschränkung ist also, dass der Programmierer die relative Position von incs kennen muss und zwar relativ zu irgendwas, was er wiederum nicht kennen muss.

                Ganz toll, bringt aber nichts. Die gewonnene Flexibilität ist die, dass man den DR als Ganzes verschieben kann. Einzelne Dateien kann man allerdings nicht verschieben.
                Die relative Position der Datein zueinander ist also fix, lediglich der Standort des alles umgebenden Verzeichnisses ist flexibel. Das wäre aber auch dann der Fall, wenn sich die Scripte relativ zueinander referenzieren, also mit
                include '../incs/functions.php';


                Wenn du das auch so machst, so relativ, dann brauchst du keine Variable für DR.

                Kommentar


                • #23
                  Original geschrieben von sEeb
                  Das klingt nach PHP_SELF, bringt mir aber leider auch nichts.

                  DOCUMENT_ROOT gibt beispielsweise

                  /usr/www/httpdocs aus, so dass ich darauf meine include festlegen kann

                  z.b.

                  $_SERVER['DOCUMENT_ROOT']/ebene1/ebene2/class.php

                  wenn ich aber __FILE__ oder PHP_SELF verwende und mich einmal in ebene1 udn einmal in ebene2 befinde haben die variablen verschiedende werte und meine includes wären unterschiedlich und haken dann ...
                  Mach ein Config-File, in dem die Pfade gesetzt werden und du weißt, wo sich dieses Datei befinden. Wo ist also das Problem?

                  Kommentar


                  • #24
                    Sowas macht man über den Include Path. Alles andere ist Müll.

                    Kommentar


                    • #25
                      das problem ist folgendes:

                      ich möchte z.b. datei

                      DOCUMENT_ROOT/ebene1/class.php einbinden.
                      diese beinhaltet ein include nach '../class2.php' als auf DOCUMENT_ROOT/class2.php

                      wenn ich nun aber von DOCUMENT_ROOT/ebene1/ebene2/class.php
                      aus versuche die datei einzubinden würde aus include '../class2.php' ein DOCUMENT_ROOT/ebene1/class2.php und das ganze schlägt fehl ...

                      das setzen eines config files bringt mir dabei auch nicht viel, denn wenn ich da in jeder datei den absoluten pfad angebe und ich die datei mal verschiebe warum auch immer, müssen dutzende dateien angepasst werden
                      verantwortlich für Elygor - Das kostenlose Browserspiel

                      Kommentar


                      • #26
                        Die .. beziehen sich nicht auf die Position des zuletzt inkludierten Files sondern aufs aktuelle Verzeichnis.

                        Beispiel:

                        /path/to/yourscript.php wechselt nach dirname(__FILE__) und inkludiert "../incs/foo/class1.php". Der ganze Pfad ist also /path/to/../incs/foo, effektiv ist das /path/incs/foo.
                        /path/incs/foo/class1.php inkludiert nun seinerseits "../class2.php".

                        Na, wo muß class2.php liegen?
                        Der ganze Pfad liest sich /path/to/../incs2, effektiv /path/incs2 und nicht, wie du anscheinend glaubst /path/incs/foo/../incs2! Der Grund ist klar: Die relativen Pfade beziehen sich auf das Arbeitsverzeichnis, nicht auf den Standort der Datei, in der sie benutzt werden. In Code ausgedrückt:
                        include '../class.php';
                        ist das selbe wie
                        include getcwd().'/../class.php';
                        aber nicht das selbe wie
                        include dirname(__FILE__).'/../class.php';
                        Zuletzt geändert von onemorenerd; 14.11.2008, 13:16.

                        Kommentar


                        • #27
                          Arbeite mit autoload, dann ersparst du dir 99% der includes.

                          Kommentar


                          • #28
                            das aktuelle verzeichnis kann genausogut variieren. auf autoload habe ich keinen einfluss derzeit ...
                            verantwortlich für Elygor - Das kostenlose Browserspiel

                            Kommentar


                            • #29
                              1. Der Server ist komisch konfiguriert.
                              2. Eine vernünftige Lösung (autoload) willst/kannst du nicht.
                              3. Du hast vor ganze Programmverzeichnis herumzuschieben.

                              Das sind 3 Dinge, die alleine schon furchtbar sind, aber alles zusammen... Unter den Bedingungen würde _ich_ nicht programmieren wollen.

                              Kommentar


                              • #30
                                wie h3ll schon sagt: arbeite mit autoload().
                                und noch wichtiger: sammel deine klassen in einem ordner.
                                it's not a bug,
                                it's a feature!

                                Kommentar

                                Lädt...
                                X