2012-10-18 12 views
27

Mam następującą strukturę plików:PHP require() błąd względny ścieżka

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

file1.php wymaga plik3 i file4 z dir2 takiego:

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

file2.php wymaga file1.php takiego:

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

ALE następnie wymagają w pliku1 nie można otworzyć pliku3 i file4 (być może ze względu na relativeness path)

Jednak to, co jest przyczyną i co mogę zrobić dla file2.php tak file1.php właściwie wymagać plik3 i file4

+2

http://stackoverflow.com/questions/11383960/how-to-refer-back-to-public-html-root-file-using-include-after-going-up-one-file Tutaj znajdziesz jasne wyjaśnienie. –

Odpowiedz

37

spróbuj dodać dirname(__FILE__) przed ścieżką, jak:

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

Powinien zawierać plik rozpoczynający się od katalogu głównego

+9

Jeśli masz 5 lat.3 lub wyżej, lepiej użyj __DIR__, tak samo jak dirname (__ FILE__), ale zachowaj "kosztowne" wywołanie dirname(). –

+1

dzięki ... możesz powiedzieć mi różnicę między "/../dir" i "../dir" –

+1

w tym przypadku użyjesz /../ ponieważ dirname (__ FILE__) zwraca ciąg znaków typu: '/ root/dir1/dir2/dir3 ', brakuje ostatniego "/", więc bez scalenia dwóch ścieżek stałoby się "/root/dir1/dir2/dir3../". – Baronth

-1

Myślę, że twój plik cwd to dir2. Spróbuj:

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

Właściwa rada tutaj, to nigdy nie używać takich rzeczy jak "../../" względnych ścieżek w aplikacjach internetowych . Trudno to odczytać i straszne z powodu konserwacji.

  1. Jak możesz potwierdzić. To sprawia, że ​​niezwykle trudno jest wiedzieć, co wskazujesz.

  2. Jeśli musisz zmienić poziom folderu swojej aplikacji lub jej części. Jest całkowicie podatny na błędy i prawdopodobnie zepsuje coś, co jest okropne do debugowania.

Zamiast define kilka stałe w pliku bootstrap dla głównej ścieżki (ów), a następnie użyć:

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

Przenoszenie aplikacji stamtąd jest tak proste, jak zastępowanie stałych MY_DIR w jeden pojedynczy plik.

Powiązane problemy