von longnetpro
Zitat:
Der Einbindungspfad in PERL und PHP war schon immer ein schwieriges Problem, das hauptsächlich mit dem Betriebssystem und dem WEB-Server zusammenhängt. Es ist unmöglich, dieses Pfadproblem sehr intelligent zu lösen. Im Vergleich zu PERL ist der Pfad von PHP viel besser und einfacher zu lösen, da der relative Pfad von PHP jederzeit in einem PHP-Programm verwendet werden kann, im Gegensatz zu PERL, wo in bestimmten Anweisungen absolute Pfade verwendet werden müssen, was zu einer äußerst komplexen Transplantation führt .
Darauf aufbauend habe ich in PHP eine absolut solide Lösung entworfen, wie unten beschrieben.
grundsätzlich:
Verwenden Sie relative Pfade, aber verwenden Sie absolute Pfade innerhalb relativer Pfade (etwas kompliziert, später im Detail erklärt). Zweitens ist es leicht zu ändern und hat eine klare Struktur zu erweitern.
Detaillierte Schritte:
1. Bestimmen Sie zunächst das Stammverzeichnis eines Programms, nicht das virtuelle Verzeichnis unter dem WEB-Server. Im Allgemeinen ist der relative Pfad des Unterverzeichnisses unter dem Verzeichnis jedoch derselbe URL von.
2. Erstellen Sie in jedem Unterverzeichnis unter dem definierten Programmstammverzeichnis (eigentlich nicht unbedingt in jedem, je nach Bedarf) eine Settings.php und definieren Sie darin eine Variable oder Konstante (Konstanten sind besser, da der Umfang größer ist), z APPROOT, aber dieser APPROOT ist kein absoluter Pfad, sondern ein relativer Pfad des Verzeichnisses relativ zum von Ihnen angegebenen Programmstammverzeichnis.
3. Schreiben Sie require_once('settings.php'); in den ersten Satz aller Programmeintragsdateien in diesem Verzeichnis (das heißt, die erste Datei, die andere Dateien enthält, oder Dateien, die das direkte Durchsuchen im Browser ermöglichen); Beachten Sie, dass es am besten ist, diesen Satz nicht allen enthaltenen Dateien hinzuzufügen – tatsächlich ist es in Ordnung, ihn hinzuzufügen, da Sie schreiben können if(!defined(APPROOT)) define(APPROOT, '../. .'); Diese Art von Anweisung verhindert eine Neudefinition.
4. Wenn Sie andere Dateien direkt oder indirekt einbinden möchten, können Sie include(APPROOT.$path); schreiben, wobei $path der absolute Pfad der eingebundenen Datei relativ zum von Ihnen angegebenen Programmstammverzeichnis ist.
Prinzip:
Das ermittelte Stammverzeichnis des Programms ist ein relativer Pfad, der spezifische Verzeichnisort ist jedoch ein absoluter Pfad relativ zu diesem Stammverzeichnis. Die Kombination aus beiden ist der relative Pfad der spezifischen Datei relativ zum Stammverzeichnis des Programms. Beispielsweise ist das Verzeichnis c:wwwrootapp das von Ihnen angegebene Programmstammverzeichnis, und dann gibt es zwei Dateien c:wwwrootappaindex.php und c:wwwrootappbinc.php . Für das Unterverzeichnis a ist APPROOT „..“, und für das Programmstammverzeichnis ist der absolute Pfad von inc.php $path='/b/inc.php', und die Kombination der beiden ist „../b“. /inc.php‘. Wenn Sie inc.php in index.php einbinden möchten, müssen Sie include('../b/inc.php'); schreiben. Ist dieser Pfad nicht nur der APPROOT.$-Pfad, der gerade kombiniert wurde?
abschließend:
Nach der obigen Verarbeitung ist jeder Pfad absolut sauber und einheitlich. Das Einzige, was etwas umständlich ist, ist, dass APPROOT in jedem Verzeichnis definiert werden muss, aber in jedem Verzeichnis nur einmal in der Datei „settings.php“ definiert werden muss Verzeichnis. Wenn Ihr gesamtes Programm nur eine Eintragsdatei hat, z. B. index.php, und alle anderen Dateien direkt oder indirekt in dieser einzigen Eintragsdatei enthalten sind, müssen Sie nur die Datei „settings.php“ in dem Verzeichnis hinzufügen, in dem sich „index.php“ befindet es einmal und es ist OK. Wenn ein Freund ein Delphi-Projekt durchgeführt und die Projektdateien studiert hat, wird er feststellen, dass die gerade erwähnte Situation, dass ein Programm nur eine Haupteintragsdatei hat, dem Delphi-Projekt sehr ähnlich ist, da Delphi nur eine Hauptprogrammdatei (dpr.) hat Datei), der Rest sind alles Unit-Dateien oder Ressourcendateien und können nicht unabhängig ausgeführt werden. Wenn diese Situation in PHP auftritt, müssen Sie APPROOT nur einmal definieren und require_once('settings.php'); in den ersten Satz der Hauptprogrammdatei schreiben. Alle nachfolgenden Includes können include(APPROOT.$ path) verwenden. ;, es wird garantiert keine Probleme geben, es sei denn, Sie schreiben dies nicht: „Enthält den absoluten Pfad der Datei relativ zum Programmstammverzeichnis“ $path.
Ich habe diese Methode mehr als einmal angewendet, mit guten Ergebnissen. Darüber hinaus können Sie sich auch auf die Art und Weise beziehen, wie der Pfad in WEB-INFO von JSP definiert ist.
Dies ist ein formelhafter Plan, der als Reaktion auf sich ständig ändernde Änderungen unverändert bleibt. Wenn jemand einen besseren Plan hat, können Sie ihn gerne besprechen! Wenn Sie etwas nicht verstehen, fragen Sie einfach nach.