Die Verwendung von PHP umfasst mehrere Verzeichnisse / Unterverzeichnisse mit relativen Pfaden

8

Ich habe Schwierigkeiten mit Pfaden in einem cms-System, das ich zu bauen versuche. Ich habe im Grunde einen Ordner mit meinen Dateien header.php und footer.php drin.

Diese sind in index.php enthalten und funktionieren gut. Aber dann, wenn ich versuche, dieselben Includes in einer Datei in meinem Admin-Unterverzeichnis zu verwenden, sind die Images und CSS fehlerhaft, offensichtlich weil der relative Pfad jetzt falsch ist.

Also meine Frage ist, wie kann ich das überwinden?

Nachdem ich einige der anderen Fragen hier und verschiedene andere Quellen gelesen habe, glaube ich, dass absolute Pfade der Weg nach vorne sind, aber ich habe immer relative Pfade verwendet, daher sind die verschiedenen Konzepte der Verwendung von Konfigurationsdateien zur Angabe eines absoluten Pfads verwirrend ich.

Normalerweise schaffe ich es, Dinge für mich selbst auszuarbeiten, aber es war ein langer Tag und ich bin ratlos!

    
Alastair Hodgson 28.09.2009, 17:20
quelle

5 Antworten

19

Normalerweise habe ich eine Datei namens config in meinem Anwendungsstamm und darin definiere ich eine Konstante für den Basispfad und einige andere:

%Vor%

und ich schließe meine Dateien wie

ein %Vor%

Auf diese Weise kann ich meine Anwendung in ein beliebiges Verzeichnis stellen, und ich kann Dateien ohne große Probleme verschieben.

auch die Verwendung des vollständigen Pfades macht das Include schneller

    
Gabriel Solomon 28.09.2009, 17:26
quelle
5

Ich bevorzuge die Einstellung der Umgebungsvariablen (in Apache mit .htaccess oder der .conf). Auf diese Weise können Sie alle Ihre Dateien frei überall in Webroot verschieben und haben Zugriff auf diese Variablen.

%Vor%

Sie können auch die im obigen .htaccess-Snippet genannte Variable namens 'environ' verwenden, um eine serverspezifische Datei als Konfigurationsdatei in alle Ihre Skripte einzufügen und dort verschiedene Variablen zu setzen.

%Vor%

Genieße deine Freiheit!

    
Anshul 28.09.2009 18:11
quelle
2

oder ...

include ($ _ SERVER ['DOCUMENT_ROOT']. '/ includes / header.php');

    
catfarm 28.09.2009 17:37
quelle
1

Relative und absolute Pfade in PHP sind etwas fragil, da sie nicht nur vom aktuellen Verzeichnis der Include-Datei, sondern auch vom aktuellen Arbeitsverzeichnis abhängen.

Sie brauchen also eine zweiteilige Lösung.

Zunächst benötigen Sie einen Redirector. Dies ist im Grunde genommen eine Include-Datei, die als Single-Point-of-Call für alle anderen Seiten dient. Seine Aufgabe ist es, den Rest Ihrer Infrastruktur zu integrieren. Alle Ihre Seiten rufen diesen Redirector und nur diesen Redirector auf (aber Sie können sie verketten).

Dieses Redirector tut jetzt

%Vor%

Damit können Sie die Include-Datei oder den Speicherort Ihrer Infrastruktur ändern, und alles, was Sie aktualisieren müssen, ist eine Datei. Der Aufruf dirname() löst alle relativen und absoluten Probleme und sucht den nächsten Schritt relativ zu sich selbst. Und per Definition ändert sich das nur, wenn Sie es ändern, also wird es immer funktionieren.

Der zweite Teil ist ein benutzerdefinierter Includer, so dass Sie Inhalt nach Name mit einer Funktion aufrufen können und es geht und erhält die richtige Datei. Begraben Sie dies in Ihrem Infrastruktur-Verzeichnis ist, wo es geht. Es wird dann zu einer Black-Box, die die Seiten außerhalb dieses Bereichs aufrufen, ohne zu wissen und ohne zu wissen, wie es funktioniert oder wo es ist. Dadurch müssen Pfadkonstanten keine Seitenfragmente mehr enthalten, da Sie einen Ort haben, der alles für Sie erledigt.

    
staticsan 28.09.2009 23:21
quelle
0

Ich habe dieses ähnliche Problem gehabt und diese Abfrage in diesem Link in SO gepostet. Die URL lautet: Problem mit PHP-Include mit globalem Pfad .

Während ich an den Lösungen arbeitete, die von Leuten gegeben wurden, und verschiedene Threads (einschließlich dieser - die ich in meiner Lösung im unteren Abschnitt meines Beitrags zitiert hatte) anschaute, hatte ich einen Weg! Ich hatte die Lösung auch gepostet. Es kann jemandem helfen, der sich einem ähnlichen Problem gegenübersieht.

    
itsraghz 22.12.2014 02:01
quelle

Tags und Links