Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Document Root

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Document Root

    Hallo Leute,

    Ich habe folgendes Problem:
    Ich baue mein Webprojekt lokal auf und dann schiebe ich es einfach auf den Webserver.

    Beispielsweise setze ich ein Bild im HTML Code und möchte nun keinen relativen, sondern einen Absoluten Pfad benutzen um direkt auf die Datei zu kommen, auch wenn sich die momentane HTML Datei in dem Dateibaum verschiebt. Und as möglichst dynamisch mit PHP.

    Ich habe versucht mit $root = $_SERVER["DOCUMENT_ROOT"]; das gewünschte Ergebnis zu erzielen, aber der Pfad ist der Serverinterne Pfad von Strato, jedoch nicht aboslut. - Irgendwie so was:
    /home/strato/http/power/web9/XX/XX/XXXXXXXXX/htdocs

    Habt ihr ne Idee wie man das realisieren kann?.

    Vielleicht von Interesse, ich bin mir da nicht sicher:

    Bei der PHP Config im Core Teil, hat die Direktive:
    doc_root
    den Wert: no value ,also keinen sowohl lokal als auch master.

    mit $_SERVER["DOCUMENT_ROOT"]; Teilweise geht es mit dieser Variablen, aber manchmal auch nicht.


    Gruß,
    FortyTwo


  • #2
    Definiere dir doch selbst eine Konstante.
    http://hallophp.de

    Kommentar


    • #3
      Und was ist, wenn das Webprojekt irgendwann auf einen anderen Server portiert wird. Ich möchte nicht 200 Dateien verändern.

      Oder meinst du eine globale PHP Variable?
      Ich weiss nicht, inwiefern ich die php auf meinem Webserver bei Strato verändern kann.

      Kommentar


      • #4
        Eine Konstante musst du doch nur an zentraler Stelle zu definieren. Da musst du nichts 200 mal ändern.

        Oder meinst du eine globale PHP Variable?
        Nein.
        Ich weiss nicht, inwiefern ich die php auf meinem Webserver bei Strato verändern kann.
        Wie ist das gemeint? Du kannst doch eine Datei, z.B. config.inc.php, anlegen, dort die Konstante definieren und diese dann einbinden. Dann kannst du überall auf die Konstante zugreifen.

        PHP-Code:
        define('PROJECT_PATH''http://www.example.de/');

        echo 
        PROJECT_PATH
        http://hallophp.de

        Kommentar


        • #5
          Vielen Dank erst einmal. Mir stellt sich jedoch noch folgende Frage:

          Diese config.inc.php muss ich ja dann wieder relativ einbinden, oder etwa nicht?

          Der Vorteil von ein PHP Server Variable, wie etwa: _SERVER["SERVER_NAME"]
          ist ja, das man von überall aus Zugriff drauf hat.

          Die config config.inc.php müsste ich ja bei jeder Datei per include importieren und wenn ich nun solch eine Datei eine Baum tiefer schieben würde, dann wäre der relative Pfad futsch.

          Achja:
          URL file-access is disabled in the server configuration

          Das heisst, dass ich nicht über eine absolute url Zugriff auf includes habe. .

          Gruß,
          FortyTwo

          Kommentar


          • #6
            PHP-Code:
            defined('APPLICATION_PATH')
                || 
            define('APPLICATION_PATH'realpath(dirname(__FILE__))); 
            I like cooking my family and my pets.
            Use commas. Don't be a psycho.
            Blog - CoverflowJS

            Kommentar


            • #7
              Das sieht ja schon sehr vielversprechend aus, aber wenn ich das so benutze:
              Inhalt von global.php (global.php befindet sich auf domain.de/global.php
              PHP-Code:
              <?php
              define
              ('DOCROOT''http://www.domain.de/')
                  || 
              define('DOCROOT'realpath(dirname(__FILE__)));  
                  
              echo 
              DOCROOT;
              include(
              DOCROOT."includes/echo.php");
              ?>
              Und wenn ich nun die global.php im Web aufrufe:
              (Strato Server)

              Code:
              http://www.domain.de/
              Warning: include() [function.include]: URL file-access is disabled in the server configuration in /mnt/web9/62/49/kundennummer/htdocs/global.php on line 6
              
              Warning: include(http://www.domain.de/includes/echo.php) [function.include]: failed to open stream: no suitable wrapper could be found in /mnt/web9/62/49/kundennummer/htdocs/global.php on line 6
              
              Warning: include() [function.include]: Failed opening 'http://www.domain.de/includes/echo.php' for inclusion (include_path='.:/opt/RZphp5/includes') in /mnt/web9/62/49/kundennummer/htdocs/global.php on line 6

              Habt Ihr da noch eine Idee?

              Kommentar


              • #8
                Was soll das auch? Oben steht was anderes!

                defined('A
                und auch keine Definition mit einer URL.
                --

                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                --

                Kommentar


                • #9
                  Ich habe das aus bestimmten Gründen so geschrieben, und zwar weill ich es überlesen habe. Und dir URL kommt aus meinem alten Script.

                  Du hast ja Recht, ein wenig Denkzeit sollte schon angebracht sein, aber wenn man so kurz am Amfang steht, dann sind die Denkabläufe noch nicht so strukturiert.

                  Aber auf jedenfall funktioniert das Ganze.
                  Vielen Dank

                  Was da jetzt passiert, dass weiss ich auch nicht so genau, aber das werde ich mir dann anschauen. Oder kann jemand ein kurzes Resumeé dazu abgeben?


                  Gruß,
                  FortyTwo

                  Kommentar


                  • #10
                    Das ist eine Syntax, die das Verhalten des OR-Operators ausnutzt. Kurz gesagt wird ein Ausdruck von links nach rechts nur so weit durchlaufen, bis ein Term der OR-Operation erfüllt ist.

                    Ist also defined erfüllt (liefert true) dann ist mit dem Statement dort Schluß. Ansonsten läufts weiter und definiert die entspr. Konstante.

                    Übersichtlicher wäre:
                    PHP-Code:
                    if (!defined ('APPLICATION_PATH')) {
                      
                    define('APPLICATION_PATH'realpath(dirname(__FILE__)));  

                    Was so ziemlich das selbe bewirkt.
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar


                    • #11
                      Ah verstehe. Danke für die Erklärung.

                      Es funktioniert jetzt teilweise, was mich verwundert.

                      Mein PHP/HTML sieht so aus:
                      PHP-Code:
                      <?php
                      defined
                      ('DOCROOT')
                          || 
                      define('DOCROOT'realpath(dirname(__FILE__)));  
                      $path DOCROOT."/includes/";
                      include(
                      $path."paths.php");
                      ?>
                      <?php 
                      include($doctype); ?>
                      <html>
                          <?php include($head_start); ?>    
                          <body>
                              <?php include($before_header);?>
                                  <?php include($header_start);?>
                                  <img src="<?php echo $root."/images/shadow_down.png";?>">
                                  <?php include($content_start);?>
                                          
                                  <?php include($footer_start);?>
                              </div><!-- page ENDE -->
                          </body>
                      </html>
                      Und in der paths.php befindet sich noch das hier:
                      $root = DOCROOT;

                      Nun möchte ich ein Bild einfügen:
                      PHP-Code:
                      <img src="<?php echo $root."/images/shadow_down.png";?>">

                      Das steht alles in der index.php

                      das Bild befindet sich unter (relativ) "images/shadow_down.png".

                      Das funktioniert aber nicht, der ausgewertete Pfad sieht dann lokal so aus:
                      <img src="C:\xampp\htdocs/images/shadow_down.png">

                      und im WWW:
                      PHP-Code:
                      <img src="/mnt/web9/62/49/kundennummer/htdocs/images/shadow_down.png" class="shadow_down" alt="shadow_down"
                      Knoten im Kopf,
                      FortyTwo

                      Kommentar


                      • #12
                        Bilder immer über den Webpfad referenzieren - absolut oder relativ zum Webpfad der aufgerufenen Adresse.

                        Im Prinzip also
                        PHP-Code:
                        <img src="/images/shadow_down.png"
                        / zeigt hier auf den Docroot Deiner Domain, bspw. für http://example.com/ müsste das Bild dann @ http://example.com/images/shadow_down.png liegen. Wo das auf dem Server ist, kann variieren, je nachdem wohin der Docroot gemappt ist.
                        Relativ sähe das so aus:
                        PHP-Code:
                        <img src="./shadow_down.png"
                        wenn z.B. die aktuelle Adresse http://example.com/images/index.html beträgt, bezieht sich ./ auf den aktuellen Pfadanteil in der URL.
                        --

                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                        --

                        Kommentar


                        • #13
                          Ich habe es teilweise begriffen und angewendet. Klappt super.

                          Mit der Theorie muss ich mich nochmal auseinadnersetzen.


                          Deine Ausführungen und die von den Anderen haben mir sehr geholfen und mein Problem gelöst.

                          Gruß,
                          FortyTwo

                          Kommentar


                          • #14
                            Ich habe gerade einen Wikiartikel gestartet.
                            --

                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                            --

                            Kommentar

                            Lädt...
                            X