2012-12-16 32 views
5

Moja struktura katalogów wygląda następująco:PHP - względna ścieżka "wymaga"

blog -> admin -> index.php 
blog.php 
db.php 
functions.php 

I zostały próbuje include (require, naprawdę) blog.php w admin/index.php, ale stoi wiele błędów. Śledzę kurs PHP, a instruktor robi to samo z powodzeniem.

admin/index.php:

require "../blog.php"; 

który z kolei wymaga jeszcze dwa pliki w swoim katalogu.

require "db.php"; 
require "functions.php"; 
+0

Myślę, że trzeba po prostu wydostać go na wyższy poziom, tj. '../../ blog.php' przy założeniu, że' blog.php' nie znajduje się w folderze 'blog'. – prodigitalson

+0

Nie sądzę, by to działało. 'blog.php' znajduje się w katalogu' blog'. – Rafay

+0

Ahh Twoja notacja dotycząca struktury katalogów była dla mnie myląca :-) – prodigitalson

Odpowiedz

18

Jeśli okaże się, że ścieżki względne zawierają nie działają zgodnie z oczekiwaniami, szybką poprawką jest dodanie przedrostka __DIR__ do początku ścieżki, którą próbujesz dołączyć.

require __DIR__ . "/../blog.php"; 

Jest względnie czysty i nie trzeba modyfikować ścieżki dołączania ani katalogu roboczego.

+0

To działało. Dzięki! Chociaż nie mam pojęcia, dlaczego muszę to zrobić. Instruktor radzi sobie z 'require" ../ blog.php ";' bez problemu. Czy to z powodu różnic OS? Jest na Macu i jestem w systemie Windows. – Rafay

+2

Nie jestem do końca pewien - uważam, że ma to związek z bieżącym katalogiem roboczym, który nie zawsze pasuje do katalogu skryptu. –

+1

@Rafay: i tak jest to zła praktyka. Powinieneś zawsze obliczyć absolutną ścieżkę, a następnie wymagać/uwzględnić. – prodigitalson

-3

Lubię otwierać moje pliki z chdir($_SERVER['DOCUMENT_ROOT']). To pozwala mi uzyskać ładną i logiczną ścieżkę podstawową dla wszystkich moich elementów.

+0

Dlatego właśnie masz dyrektywę include_path w pliku php.ini. –

+0

'include_path' nie stosuje się do rzeczy takich jak' file_exists' though;) –

+0

i jeden plik operacji na plik php bez rzeczywistego użycia. Rozważ użycie PSR-0 lub użycie __DIR__. –

1

Jeśli to tym pliki db.php and functions.php w index.php potem trzeba napisać ten kod

require "../db.php"; 
require "../functions.php"; 

lub jeśli jesteś w tym także to pliki w blog.php następnie napisać ten kod

require "db.php"; 
require "functions.php"; 
Powiązane problemy