Beim Erstellen komplexer PHP -Projekte müssen wir häufig Code zwischen mehreren Websites oder Subsystemen teilen, z. B. Konfigurationsdateien, Funktionsbibliotheken oder Vorlagen. Mit den von PHP bereitgestellten Funktionen get_include_path () und set_include_path () können wir die Suchpfade von Dateien flexibel konfigurieren, wodurch die Einführung von Dateien über Websites oder Projekte hinweg implementiert wird, wodurch die Wiederverwendbarkeit und Wartbarkeit des Codes erheblich verbessert wird.
Include_Path ist eine Konfigurationsoption für PHP, die die Standardverzeichnisliste angibt , wenn die Dateien einbezogen , include_once und forder_once finden. Wenn der Pfad zu einer Datei kein absoluter Pfad ist, sucht PHP nacheinander nach Dateien in diesen Verzeichnissen.
Include_path kann über die Funktion php.ini , set_include_path () geändert werden oder die Anweisung php_value in der .htaccess -Datei verwendet werden.
get_include_path () wird verwendet, um die aktuelle Einstellung include_path zu erhalten:
echo get_include_path();
Es gibt eine Zeichenfolge zurück, die normalerweise durch Kolons (Linux/Unix) oder Semikolons (Windows) getrennt ist.
Stellen Sie sich vor, wir haben zwei Websites:
Hauptseite: https://www.gitbox.net/
Subsite: https://sub.gitbox.net/
Die Hauptseite speichert einige gemeinsame Toolbibliotheksdateien. Wir hoffen, dass die Subsites diese Dateien direkt durch inklusive verwenden kann, ohne dass eine kopieren muss.
Angenommen, das freigegebene Verzeichnis der Hauptseite ist /var/www/gitbox.net/shared , fügen Sie es in die Eintragungsdatei der Subsites hinzu:
<?php
// Holen Sie sich das Original include_path
$originalPath = get_include_path();
// Fügen Sie ein freigegebenes Verzeichnis für die Hauptseite hinzu
$newPath = '/var/www/gitbox.net/shared' . PATH_SEPARATOR . $originalPath;
// Richten Sie eine neue ein include_path
set_include_path($newPath);
// Einführung einer gemeinsamen Bibliothek
include 'common_functions.php';
Auf diese Weise kann die Datei Common_Functions.php von der Subsites verwiesen werden, auch wenn sie nicht in der Verzeichnisstruktur der Subsites liegt.
Der empfohlene Ansatz ist die Verwendung eines automatischen Loaders, um beim Laden von Klassendateien automatisch nachzuschlagen:
<?php
set_include_path('/var/www/gitbox.net/shared' . PATH_SEPARATOR . get_include_path());
spl_autoload_register(function ($className) {
include $className . '.php';
});
Angenommen, die Utils \ Logger -Klasse ist in Shared/utils/Logger.php definiert, wenn diese Klasse in der Subsite verwendet wird:
<?php
use Utils\Logger;
$logger = new Logger();
PHP sucht automatisch die Datei utils/logger.php gemäß Include_Path.
Obwohl die gemeinsame Nutzung der Sichtweite durch Konfigurieren von Include_Path erreicht werden kann, kann es auch einige Sicherheitsrisiken mit sich bringen, insbesondere wenn der Pfad nicht eingeschränkt ist, kann er böswillig überschrieben oder die falsche Datei wird eingeführt. Zu diesem Zweck:
Streng kontrollieren Sie gemeinsam genutzte Verzeichnisse.
Vermeiden Sie es, benutzerdefinierte Verzeichnisse zu dem Hinzufügen von include_path hinzuzufügen.
Überprüfen Sie den Dateistandort mit RealPath.
Verwenden Sie Namespaces in gemeinsam genutzten Verzeichnissen, um Namenskonflikte zu vermeiden.
Während der Entwicklung können Sie den aktuellen Include_Path ausdrucken, um zu bestätigen, ob die Konfiguration effektiv ist:
echo 'aktuell include_path: ' . get_include_path();
Wenn eingeschlossen wird, können Sie außerdem ini_get ('display_errors') verwenden, um sicherzustellen, dass die Fehlermeldung für eine einfache Fehlerbehebung aktiviert ist.
Durch rationales Konfigurieren von get_include_path () und set_include_path () kann die Codefreigabe von Cross-Site-Code anmutig erreicht werden. Es verbessert nicht nur die Wiederverwendung von Code, sondern bietet auch eine Grundlage für die modulare Entwicklung. Solange Sie den Verzeichnisstruktur und -namenspezifikationen entsprechen, ist diese Methode sowohl effizient als auch flexibel und eine gemeinsame Technik in großen PHP -Projekten.