Wie fügen Sie eine Datei ein, die mehr als 2 Verzeichnisse enthält? Ich weiß, dass Sie ../index.php
eine Datei mit 2 Verzeichnissen zurückfügen können, aber wie machen Sie das mit 3 Verzeichnissen zurück? Macht das Sinn? Ich habe es versucht, .../index.php
aber es funktioniert nicht.
Ich habe eine Datei in /game/forum/files/index.php
und es verwendet PHP include, um eine Datei einzuschließen. Welches befindet sich in /includes/boot.inc.php
; /
das Stammverzeichnis sein.
php
include
filesystems
hakre
quelle
quelle
Antworten:
..
wählt das übergeordnete Verzeichnis aus dem aktuellen aus. Dies kann natürlich verkettet werden:Dies wären zwei Verzeichnisse.
quelle
define
verwendet wird, aber (1) das war hier nicht einmal die Frage. Und (2) Sie würden immer noch einen relativen Pfad in Ihrem verwendendefine
, es sei denn, Sie codieren tatsächlich den gesamten absoluten Serverpfad fest, und ich würde davon Abstand nehmen, da er nur Nachteile hat. Oder (die dritte Alternative) Sie können die Zeichenfolgenmanipulation verwenden, um das übergeordnete Verzeichnis aus dem (erweiterten) aktuellen Pfad zu extrahieren. Dies hat jedoch wiederum keine Vorteile für die Verwendung relativer Pfade./../
funktioniert../
möglicherweise oder funktioniert möglicherweise nicht oder funktioniert auch nicht auf drei verschiedenen Computern mit genau derselben Umgebung../
und../../
(Hinweis: kein führender Schrägstrich!), Funktioniert auf allen modernen Betriebssystemen. Es verwendete , um nicht arbeitet unter Windows und ( lange her) Mac , aber es funktioniert jetzt überall und hat zumindest in den letzten zehn Jahren. Wenn es irgendwo nicht funktioniert, liegt der Grund darin, dass die Dateistruktur unterschiedlich ist und / oder Sie sich in einem anderen Arbeitsverzeichnis befinden. Aber es hat nichts mit diesem Code zu tun./../
statt../
auf seiner Umgebung haben./../
macht der Pfad auf keinem System einfach Sinn (er entspricht/
oder ist ein Fehler). Sind Sie sicher , dass Sie nicht einfügen etwas vor ihm?Verwenden Sie, um eine Datei ein Verzeichnis zurück einzuschließen
'../file'
. Verwenden Sie für zwei Verzeichnisse zurück'../../file'
. Und so weiter.Realistisch gesehen sollten Sie jedoch keine Includes relativ zum aktuellen Verzeichnis ausführen. Was ist, wenn Sie diese Datei verschieben möchten? Alle Links würden brechen. Eine Möglichkeit, um sicherzustellen, dass Sie weiterhin Links zu anderen Dateien erstellen können, während Sie diese Links beibehalten, wenn Sie Ihre Datei verschieben, ist:
DOCUMENT_ROOT
ist eine Servervariable, die das Basisverzeichnis darstellt, in dem sich Ihr Code befindet.quelle
So
../
bekommt man ein Verzeichnis zurück nicht zwei .Kette
../
so oft wie nötig, um 2 oder mehr Level zu erreichen.quelle
ist hier die beste Wahl und vermeidet die meisten relativen Pfadfehler, die bei anderen Lösungen auftreten können.
In der Tat wird das Include gezwungen, immer relativ zur Position des aktuellen Skripts zu sein, an der dieser Code platziert ist (welcher Speicherort höchstwahrscheinlich stabil ist, da Sie die Architektur Ihrer Anwendung definieren). Dies unterscheidet sich von
include '../../index.php'
der einfachen Ausführung , die sich relativ zum ausführenden (auch als "aufrufend" bezeichneten) Skript und dann relativ zum aktuellen Arbeitsverzeichnis bezieht , das auf das übergeordnete Skript verweist, das Ihr Skript enthält, anstatt aus dem Pfad Ihres enthaltenen Skripts aufzulösen .Aus der PHP-Dokumentation:
Und der älteste Beitrag, den ich unter Berufung auf diesen Trick gefunden habe, stammt aus dem Jahr 2003 von Tapken .
Sie können mit folgendem Setup testen:
Erstellen Sie ein Layout wie folgt:
In
parent.php
, setzen Sie:In
sub/included.php
, setzen Sie:Ergebnis beim Zugriff
parent.php
:Wie wir sehen können, wird der Pfad im ersten Fall aus dem aufrufenden Skript aufgelöst
parent.php
, während mit demdirname(__FILE__).'/path'
Trick das Einschließen aus dem Skript erfolgt,included.php
in dem der Code platziert ist.Beachten Sie, dass das Folgende NICHT dem obigen Trick entspricht, der an anderer Stelle gelesen werden kann:
In der Tat funktioniert
/
das Voranstellen , aber es wird genau wieinclude ../../index.php
im aufrufenden Skript aufgelöst (der Unterschied besteht darin, dassinclude_path
es nicht nachgeschaut wird, wenn es fehlschlägt). Aus dem PHP-Dokument :quelle
..
Mitte des Pfades hinzufügen (relativ / absolut)...
die Mitte des Includes verwendet wird. es sollte immer der erste Teil von include sein../
ist ein Verzeichnis, Wiederholen Sie dies für zwei Verzeichnisse../../
oder sogar drei:../../../
und so weiter.Das Definieren von Konstanten kann die Verwirrung verringern, da Sie vorwärts in Verzeichnisverse und rückwärts bohren
Sie könnten einige Konstanten wie folgt definieren:
Wenn Sie 'BD' oder mein 'Basisverzeichnis' verwenden, sieht es so aus:
definieren(); Referenz
quelle
quelle
Jede Instanz von
../
bedeutet ein Verzeichnis hoch / zurück.quelle
Es gibt folgende Möglichkeiten, auf Ihre verschiedenen Verzeichnisse zuzugreifen:
quelle
Sie können tun
../../directory/file.txt
- Dies geht zwei Verzeichnisse zurück.../../../
- das geht drei. etcquelle
quelle
Seien Sie jedoch SEHR vorsichtig, wenn Sie einen Benutzer die Datei auswählen lassen. Sie möchten nicht wirklich zulassen, dass sie eine Datei mit dem Namen "z.
oder andere vertrauliche Systemdateien.
(Entschuldigung, es ist schon eine Weile her, seit ich ein Linux-Systemadministrator war, und ich denke, dies ist eine vertrauliche Datei, soweit ich mich erinnere)
quelle
quelle
Ich empfehle, das aktuelle PHP-Dateiverzeichnis
__DIR__
anzugeben . Überprüfen Sie hier den Grund.quelle
Wenn Sie PHP7 verwenden, können Sie die Dirname-Funktion mit dem Level-Parameter 2 verwenden, zum Beispiel:
Der zweite Parameter "2" gibt an, wie viele Stufen höher sind
Referenzname Referenz
quelle
Einschließen von Over-Verzeichnissen kann per Proxy-Datei verarbeitet werden
..... | _proxy.php
quelle
Versuchen Sie es
../../
. Sie können es entsprechend ändern, da Sie zwei Verzeichnisse zurückerhalten. Greifen Sie zuerst zum Stammverzeichnis und greifen Sie dann auf das gewünschte Verzeichnis zu.ZB Sie sind in
root/inc/usr/ap
und es gibt ein anderes Verzeichnisroot/2nd/path
. Sie können wie folgt auf daspath
Verzeichnis zugreifenap
:../../2nd/path
Gehen Sie zuerst zum Stammverzeichnis als gewünscht. Wenn nicht funktioniert, bitte teilen.quelle
Wenn Sie das Include
/
zu Beginn des Includes einschließen, wird das Include als Pfad vom Stammverzeichnis der Site verwendet.Wenn Ihre Website http://www.example.com/game/forum/files/index.php lautet , können Sie /includes/boot.inc.php ein Include hinzufügen, das in http://www.example.com aufgelöst wird /includes/boot.inc.php .
Sie müssen beim
..
Durchlaufen vorsichtig sein, da es auf einigen Webservern deaktiviert ist. Dies führt auch zu Problemen, wenn Sie Ihre Site auf einen neuen Computer / Host verschieben möchten und die Struktur etwas anders ist.quelle
Versuche dies
Dieses Beispiel ist ein Verzeichnis zurück
Dieses Beispiel ist zwei Verzeichnisse zurück
quelle
Ich habe Ihre Antworten gesehen und den Include-Pfad mit Syntax verwendet
und http server (Apache 2.4.3) haben den internen Fehler 500 zurückgegeben.
Als ich den Pfad zu geändert habe
alles ist gut.
quelle