Fehlerbehebung
PHP-Fehler bei require_once, require, include_once oder include
Wenn PHP eine Datei nicht öffnen kann, die mit require_once, require, include_once oder include angefordert wurde, nennt die vollständige Meldung den angeforderten Pfad, der relativ sein kann, die aufrufende Datei und deren Zeile. require hält die Ausführung an; include erzeugt normalerweise eine Warnung und lässt die Ausführung weiterlaufen.
Ein Beispiel für die Meldung:
Fatal error: require(): Failed opening required '/home/usuario_cpanel/public_html/fichero.php' (include_path='.:php') in /home/usuario_cpanel/public_html/index.php on line 1
Dieser Fehler zeigt, dass PHP die von require oder include angeforderte Ressource nicht öffnen konnte. Bewahren Sie auch die vorherige Warnung auf, denn sie kann genauer angeben, ob Pfad, Rechte, open_basedir oder include_path die Ursache sind.
Im Beispiel ruft index.php in Zeile 1 fichero.php auf. PHP meldet, dass es die Datei unter diesem Pfad nicht öffnen konnte; das beweist für sich allein nicht, dass die Datei nicht existiert.
Mögliche Ursachen und Lösungen
- Prüfen Sie den genauen Pfad aus dem Fehler, ob die Datei existiert und die Groß- und Kleinschreibung jedes Namens.
- Prüfen Sie das
DocumentRootund die tatsächliche Struktur des Deployments. Eine Website muss nicht unbedingt in/home/usuario/public_htmlliegen und kann Code außerhalb des öffentlichen Verzeichnisses laden. - Prüfen Sie die Rechte der Datei, die Durchlaufrechte der übergeordneten Verzeichnisse und den Eigentümer.
- Wenn die Datei existiert und lesbar ist, prüfen Sie Einschränkungen durch
open_basedir,include_path, Wrapper und das Arbeitsverzeichnis, das für einen relativen Pfad gilt. - Wenn sie verschwunden ist, vergleichen Sie Versionen, Deployments, Backups und Protokolle. Ziehen Sie einen Einbruch nur in Betracht, wenn Änderungen, Zugriffe oder andere Belege dafür sprechen.
Stabile Pfade und Abhängigkeiten
Wenn die Datei zum selben Projekt gehört, vermeidet ein Pfad auf Basis von __DIR__, dass er vom Verzeichnis abhängt, aus dem der Prozess gestartet wird:
require __DIR__ . '/config/bootstrap.php';
Das ist ein Beispiel: Diese Datei muss in der tatsächlichen Struktur Ihrer Anwendung existieren. Wenn vendor/autoload.php fehlt, prüfen Sie das Deployment der Abhängigkeiten mit Composer und dessen Lock-Datei; legen Sie keine leere Datei an und ersetzen Sie require nicht durch include, um das Problem zu verbergen. Bilden Sie keinen Include-Pfad direkt aus Daten einer Anfrage.
Das könnte Ihnen auch helfen
- Maximum execution time of X seconds exceeded in x.php Diagnostizieren Sie, was max_execution_time ausschöpft, und erhöhen Sie das Limit nur vorübergehend...
- Fehler in PHP-Anwendungen oder -Dateien debuggen Diagnostizieren Sie eine weiße Seite oder einen Fehler 500, indem Sie den Fehler nachstellen und zue...
- PHP-Fehlerprotokoll in cPanel aktivieren Aktivieren Sie log_errors vorübergehend für die tatsächlich genutzte Version im PHP-Selektor von cPa...
- PHP-Fehlerprotokoll über die Datei .htaccess aktivieren Konfigurieren Sie .htaccess so, dass PHP-Fehler vorübergehend außerhalb von public_html protokollier...
Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.