2012-10-18 6 views
27

i die folgenden Dateistruktur:PHP erfordern() relativ Wegfehler

 
rootDIR 
    dir1 
     subdir1 
      file0.php 
      file1.php 
    dir2 
     file2.php 
     file3.php 
     file4.php 

file1.php erfordert file3 und file4 von dir2 wie folgt aus:

require('../../dir2/file3.php') 

file2.php erfordert file1.php wie folgt aus:

require('../dir1/subdir1/file1.php') 

ABER dann verlangen in Datei1 schlägt fehl, Datei3 zu öffnen und file4 (vielleicht aufgrund des Pfades Relativität)

Doch was ist der Grund, und was kann ich für file2.php so file1.php richtig erfordern file3 und file4

+2

http://stackoverflow.com/questions/11383960/how-to-refer-back-to-public-html-root-file-using-include-after-going-up-one-file Hier finden Sie a klare Erklärung. –

Antwort

37

Versuchen Hinzufügen dirname(__FILE__) vor dem Pfad, wie:

require(dirname(__FILE__).'/../../dir2/file3.php'); 

Es sollte die Datei beginnend mit dem Stammverzeichnis

+9

Wenn Sie auf 5 sind.3 oder höher verwenden Sie besser __DIR__, dasselbe wie dirname (__ FILE__), aber sparen Sie den "kostspieligen" Aufruf von dirname(). –

+1

danke..können Sie mir sagen, der Unterschied zwischen '/../dir' und '../dir' –

+1

In diesem Fall verwenden Sie /../ weil dirname (__ FILE__) geben Sie eine Zeichenfolge wie: '/ root/dir1/dir2/dir3 ', fehlt das letzte'/', also ohne dass es die 2 Pfade zusammenführt, würde es'root/dir1/dir2/dir3../' werden. – Baronth

-1

Ich denke, Ihre cwd ist dir2. Versuchen:

require("file3.php"); 
require("file4.php"); 
3

Eine richtige Beratung hier ist nie solche Dinge wie "../../" relative Pfade in Ihrem Web-Apps zu nutzen, . Es ist schwer zu lesen und schrecklich für die Wartung.

  1. Wie Sie bestätigen können. Es macht extrem schwierig zu wissen, worauf Sie zeigen.

  2. Wenn Sie die Ordnerebene Ihrer Anwendung oder Teile davon ändern müssen. Es ist völlig fehleranfällig und wird wahrscheinlich etwas kaputt machen, das zu debuggen ist.

Stattdessen define einige Konstanten in der Bootstrap-Datei für Ihre Hauptweg (n) und verwenden Sie dann:

require(MY_DIR.'/dir2/file3.php'); 

Bewegen Sie Ihre App von dort, so einfach ist Ihre my_dir Konstanten als Ersatz in eine einzige Datei.