Bei der Entwicklung mit PHP sind Get_include_path () und include () zwei Funktionen, die häufig zusammen erscheinen. In einigen Fällen können Entwickler jedoch auf ein verwirrendes Problem stoßen: Der Pfad wurde hinzugefügt, um zu include_path, aber die Datei kann nicht mit include () gefunden werden. Dieser "Konflikt" wird tatsächlich durch mehrere häufige Gründe verursacht. Dieser Artikel wird Lösungen nacheinander analysieren und bereitstellen.
Die Funktion von PHPs include () wird in der folgenden Reihenfolge nach den angegebenen Dateien suchen:
Verwenden Sie relative Pfade (relativ zum Verzeichnis der aktuellen Datei)
Finden Sie das Verzeichnis, in dem sich das aktuelle Skript befindet
Durch den inclyse_path konfigurierten Pfad iterieren
get_include_path () ist ein Tool, um die aktuelle Include_Path -Konfiguration zu erhalten. Sie können es verwenden, um die aktuellen Einstellungen anzuzeigen:
echo get_include_path();
Sie können auch dynamisch include_path über set_include_path () ändern, zum Beispiel:
set_include_path(get_include_path() . PATH_SEPARATOR . '/usr/local/lib/php');
Manchmal, obwohl set_include_path () aufgerufen wird, wird der Pfad nicht wirklich hinzugefügt. Häufige Fehler sind wie folgt:
set_include_path('/some/path');
set_include_path('/another/path'); // Überschreiben die vorherigen Einstellungen
Lösung:
Verwenden Sie Path_separator , um Pfade anzuhängen, anstatt zu überschreiben:
set_include_path(get_include_path() . PATH_SEPARATOR . '/another/path');
Wenn include ('config/config.php') aufgerufen wird, wird PHP zunächst nach dem aktuellen Skriptverzeichnis nachschlagen, auch wenn Config/config.php bereits inclus_path ist. Wenn die aktuelle Verzeichnisstruktur falsch ist, führt sie auch zu einem Fehler der "nicht gefundenen Datei".
Lösung:
Entfernen Sie den Verzeichnisteil im Pfad und lassen Sie sich in Einklang bringen. Zum Beispiel:
include('config.php'); // config.php Schon hier include_path Auf dem Weg
Auch wenn der Include_Path korrekt festgelegt ist, fehlschlägt er dennoch, wenn die Datei nicht vorhanden ist oder keine Berechtigungen gelesen hat.
Fehlerbehebung Vorschläge:
Um sicherzustellen, dass der Dateipfad korrekt ist, können Sie versuchen, ihn mit LS oder File_Exists () in der Befehlszeile zu überprüfen:
echo file_exists('/path/to/config.php') ? 'found' : 'not found';
Überprüfen Sie die Server -Berechtigungseinstellungen, um sicherzustellen, dass der PHP -Benutzer Berechtigungen gelesen hat.
PHP unterstützt einschließlich Remotedateien über URLs, wie z. B.:
include('http://gitbox.net/includes/header.php');
Diese Funktion basiert auf den beiden Konfigurationselementen Dengen_url_include und degitle_url_fopen , und viele Server befinden sich standardmäßig in einem geschlossenen Zustand.
Lösung:
Aktivieren Sie diese Einstellungen in php.ini :
allow_url_fopen = On
allow_url_include = On
Aus Sicherheitsgründen wird jedoch nicht empfohlen, die URL -Einbeziehung in Produktionsumgebungen zu ermöglichen, insbesondere unter Verwendung des HTTP -Protokolls.
Versuchen Sie, absolute Pfade zu verwenden , oder verwenden Sie die Konstante __dir__ , um relative Pfade zu erstellen.
include(__DIR__ . '/includes/config.php');
Verwalten Sie include_path Autoload oder Framework : Moderne Frameworks verwenden normalerweise automatische Lademechanismen wie PSR-4, um den Pfad, in dem sich die Klassendatei befindet, automatisch zu finden, und vermeiden Sie manuelle Fehler.
Einstellungen für Tests include_path während der Bereitstellungsphase : Die Wege der Entwicklungs- und Produktionsumgebungen sind häufig unterschiedlich. Es wird empfohlen, einen vollständigen Pfadtest durchzuführen, bevor Sie online gehen.
get_include_path () widerspricht nicht mit include () , aber die falsche Art, es zu verwenden, lässt sie so aussehen, als würden sie "kämpfen". Das Verständnis ihres Suchmechanismus und der Ladereihenfolge ist der Schlüssel zur Lösung des Problems. Durch rationales Einstellen include_path, das Schreiben des Pfades korrekt und die Verwendung von URLs zur Einbeziehung von Remotedateien kann die Robustheit und Sicherheit des Codes erheblich verbessert werden.