Fehlerbehebung

PHP-Fehler bei require_once, require, include_once oder include

Geprüft am 3 Min. Lesezeit errores php php

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

  1. Prüfen Sie den genauen Pfad aus dem Fehler, ob die Datei existiert und die Groß- und Kleinschreibung jedes Namens.
  2. Prüfen Sie das DocumentRoot und die tatsächliche Struktur des Deployments. Eine Website muss nicht unbedingt in /home/usuario/public_html liegen und kann Code außerhalb des öffentlichen Verzeichnisses laden.
  3. Prüfen Sie die Rechte der Datei, die Durchlaufrechte der übergeordneten Verzeichnisse und den Eigentümer.
  4. 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.
  5. 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

Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.