2012-12-16 10 views
5

Meine Verzeichnisstruktur sieht wie folgt aus:PHP - Relative Pfade "require"

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

Ich habe versucht, zu include (require, wirklich) blog.php im admin/index.php, aber mit Blick auf viele Fehler. Ich verfolge einen PHP-Kurs und der Kursleiter macht das Gleiche erfolgreich.

admin/index.php:

require "../blog.php"; 

was wiederum erfordert zwei weitere Dateien in seinem Verzeichnis.

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

Ich denke, Sie müssen nur ein Level, dh. '../../ blog.php' unter der Annahme, dass' blog.php' nicht im 'blog'-Ordner ist. – prodigitalson

+0

Ich glaube nicht, dass das funktionieren würde. 'blog.php' befindet sich im Verzeichnis' blog'. – Rafay

+0

Ahh deine Schreibweise der Verzeichnisstruktur war für mich verwirrend :-) – prodigitalson

Antwort

18

Wenn Sie feststellen, dass die relativen Include-Pfade nicht wie erwartet funktionieren, ist eine schnelle Lösung, __DIR__ dem Anfang des Pfads voranzukommen, den Sie aufnehmen möchten.

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

Es ist einigermaßen sauber, und Sie müssen den Include-Pfad oder das Arbeitsverzeichnis nicht ändern.

+0

Das hat funktioniert. Vielen Dank! Obwohl ich keine Ahnung habe, warum muss ich das tun. Der Lehrer kommt mit "require" ../ blog.php ";' ohne Probleme. Liegt es an Betriebssystemunterschieden? Er ist auf dem Mac und ich bin auf Windows. – Rafay

+2

Ich bin mir eigentlich nicht ganz sicher - ich glaube, es hat damit zu tun, dass das aktuelle Arbeitsverzeichnis nicht immer dem Verzeichnis des Skripts entspricht. –

+1

@Rafay: Es ist sowieso eine schlechte Praxis. Sie sollten immer den absoluten Pfad berechnen und dann anfordern/einbeziehen. – prodigitalson

-3

Ich möchte meine Dateien mit chdir($_SERVER['DOCUMENT_ROOT']) starten. Dies ermöglicht mir einen schönen und logischen Basispfad für alle meine Includes.

+0

Deshalb hast du die include_path Anweisung in der php.ini. –

+0

'include_path' gilt nicht für Dinge wie' file_exists' though;) –

+0

und eine Dateioperation pro PHP-Datei ohne echte Verwendung. Ziehen Sie PSR-0 in Betracht oder verwenden Sie __DIR__. –

1

Wenn Sie dies einschließlich Dateien db.php and functions.php in index.php dann müssen Sie diesen Code

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

schreiben oder wenn Sie diese Dateien auch in blog.php dann schreiben Sie diesen Code

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