Include_Path ist eine wichtige Konfiguration, mit der häufig die Pfade in Dateien festgelegt werden. Über get_include_path () und set_include_path () können wir den Ort flexibel steuern, an dem PHP sucht, enthält Dateien. Viele Entwickler stoßen jedoch häufig auf ein verwirrendes Problem bei der Verwendung dieser beiden Funktionen: Der Pfad wurde festgelegt, aber noch auf Anzeichen , dass die Datei nicht gefunden werden kann. Warum ist das?
Zum Beispiel könnte Ihr Code so aussehen:
set_include_path('/var/www/html/libs');
include 'myLibrary.php';
Sie bestätigen, dass /var/www/html/libs/mylibrary.php existiert, aber der folgende Fehler tritt bei der Ausführung auf:
Warning: include(myLibrary.php): failed to open stream: No such file or directory
Zu diesem Zeitpunkt überprüfen Sie die Pfadeinstellungen:
echo get_include_path();
Die Ausgabe ist:
/var/www/html/libs
Dies bedeutet, dass der Pfad tatsächlich korrekt eingestellt ist, aber warum ist die Datei noch nicht gefunden?
Es gibt mehrere häufige Gründe, warum set_include_path () nach der Einstellung nicht funktioniert:
Wenn Sie es versehentlich irgendwo nach der Einstellung include_path überschreiben, zum Beispiel:
set_include_path('/var/www/html/libs');
// Andere Codes...
set_include_path('.');
Die nachfolgenden Einstellungen überschreiben den vorherigen Pfad, sodass der zuvor festgelegte Pfad nicht funktioniert.
Lösung :
Verwenden Sie beim Anhängen eines Pfades den ursprünglichen Pfad für PATH_SEPARATOR:
set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/html/libs');
Auch wenn der Pfad korrekt eingestellt ist und PHP keine Erlaubnis hat, auf das Verzeichnis oder die Datei zuzugreifen, wird ein Hinweis darauf eingeschlossen.
Lösung :
Bestätigen Sie, dass die Berechtigungen des Zielverzeichnisses und der Dateien für PHP-Benutzer lesbar sind (normalerweise www-data oder Apache).
chmod -R 755 /var/www/html/libs
In einigen Serverkonfigurationen kann Open_Basedir PHP auf nur bestimmte Verzeichnisse einschränken, wodurch Dateien auf anderen Pfaden nicht zugreifen können, selbst wenn include_path festgelegt wird.
Lösung :
Überprüfen Sie das Open_Basedir -Konfigurationselement in php.ini :
open_basedir = /var/www/html/:/tmp/
Sie müssen sicherstellen, dass der Einschlussweg, den Sie eingestellt haben, /var/www/html/libs im zulässigen Bereich enthalten sind.
Dies ist das grundlegendste, aber am einfachsten zu ignorierende Problem. Beispielsweise ist Dateinamen -Fallfehler, Pfadschreibung falsch usw. In Linux -Systemen sind mylibrary.php und mylibrary.php zwei verschiedene Dateien.
Angenommen, Sie möchten eine Datei in /var/www/html/libs/functions.php einfügen, und Ihr Code ist in /var/www/html/public/index.php . Sie können es so festlegen:
set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/html/libs');
include 'functions.php';
Ein besserer Ansatz ist es, relative Pfade in Kombination mit __Dir__ zu verwenden, um Probleme zu vermeiden, wenn sich der Einsatzpfad ändert:
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ . '/../libs');
include 'functions.php';
Oder verwenden Sie spl_autoload_register () , um das automatische Laden von Klassendateien einheitlich zu verwalten:
spl_autoload_register(function ($class) {
include $class . '.php';
});
Setzen Sie das Suchverzeichnis mit set_include_path () :
set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/html/libs');
Um zu bestätigen, welche Pfade PHP sucht, können Sie get_include_path () drucken, wenn ein Fehler auftritt, und verwenden Sie Stream_Resolve_include_path (), um die tatsächlichen Suchergebnisse anzuzeigen:
echo stream_resolve_include_path('functions.php');
Auf diese Weise können Sie schnell feststellen, ob der Pfad nicht festgelegt ist oder die Datei selbst nicht vorhanden ist.
Die Einstellung include_path funktioniert nicht und wird häufig durch Probleme wie Überschreiben von Pfaden, unzureichende Berechtigungen, Konfigurationsbeschränkungen oder Rechtschreibfehler verursacht. Der Schlüssel zur Lösung dieser Art von Problem ist:
Verwenden Sie Get_include_path () + path_separator , um Pfade anstatt zu überschreiben.
Stellen Sie sicher, dass der Pfad der Zieldatei korrekt ist und die Berechtigungen lesbar sind.
Überprüfen Sie, ob die Serverkonfiguration eingeschränkte Zugriffspfade enthält.
Verwenden Sie Debugging -Funktionen wie stream_resolve_include_path () , um die Diagnose zu unterstützen.
Nach dem Beherrschen dieser Fähigkeiten können Sie include_path besser nutzen, um die Modularität und Wartbarkeit Ihres Codes zu verbessern, wodurch Ihre PHP -Projektstruktur klarer und flexibler wird.
Weitere Beispiele oder Best Practices für das Ressourcenmanagement finden Sie unter: https://gitbox.net/php-resources