Frage PHP Fataler Fehler: Fehlgeschlagenes Öffnen erforderlich


Ich habe ein Skript namens 'sess-start.php', das in einem / include-Verzeichnis in meinem httpdocs-Verzeichnis liegt.

Meine Website gibt weiterhin diesen Fehler: \

[Fr 25. März 14:52:24 2011] [Fehler]   [Client 12.3.3.3] PHP Schwerwiegender Fehler:   require () [function.require]:   Fehlgeschlagenes Öffnen erforderlich   '/includes/sess-start.php'   (include_path = '.:') in   /var/www/vhosts/site.com/httpdocs/page.php   in Zeile 4, Referer:    https://www.site.com/

obwohl www.site.com/includes existiert. Was gibt!

Bearbeiten 1

Dies sind Includes / Requests, die selbst zusätzliche Require- oder Include-Anweisungen enthalten können. Relative Pfade funktionieren nicht, also bitte nicht vorschlagen.

Meine .htaccess-Datei verweist bereits auf alle Pfade zum Site-Stammverzeichnis:

php_value include_path   .: / var / www / vhosts / site.com / httpdocs

Bearbeiten 2

Nicht alle meine Include- oder erforderlichen Scripts sind in einem einzigen Verzeichnis enthalten, daher wird vorgeschlagen, das Verzeichnis / includes einfach in den include_path zu stellen (wird auch auf einer Windows-Maschine zu Problemen führen).

Aktualisieren

Vielleicht könnte eine Klärung eines realen Beispiels dazu beitragen, das Problem zu lösen, für das unser Team zu lösen versucht:

Auf einer Seite kann ein Benutzer eine Anzahl von Optionen eingeben, die folgende Seite führt die notwendigen Berechnungen durch und basierend darauf leitet der Kunde eine Anzahl potentieller Optionen ab, die alle zu Anweisungen für einen DB-Eintrag führen.

Dann, innerhalb des DB-Eintrags (oder einer anderen Aktion), wenn alles reibungslos abläuft, hat das Mitglied möglicherweise zuvor eine E-Mail-Bestätigung basierend auf seiner / ihrer Aktion erhalten. Diese require-Anweisung liegt innerhalb der 2. require (db insert), befindet sich jedoch in einem anderen Verzeichnis als die zweite und verursacht somit einen Konflikt, da die erste Datei die Verknüpfung falsch behandelt.

Die absolute Kodierung des absoluten Pfads oder sogar das Festlegen des entsprechenden Include-Pfads pro Seite ist "ok", aber dann deaktiviert es die Fähigkeit unseres Teams, Dateien mit dreamweaver (oder einem anderen Programm, das das gleiche tut) zu verbinden, da es kein "site root" erkennt 'wenn in einer Testumgebung ausgeführt wird.


8
2018-03-25 19:54


Ursprung


Antworten:


Vor dem Pfad steht ein Schrägstrich (/).

Wenn Sie in einem POSIX-kompatiblen System einen Pfad haben, der mit einem Schrägstrich beginnt, bedeutet dies, dass es ein absoluter Pfad. Der erste Schrägstrich steht für die Wurzel des Dateisystems.

Entfernen Sie den Schrägstrich von Ihrem Pfad, und Sie sollten dann einen Pfad relativ zu haben page.php.

BEARBEITEN: Da relative Pfade nicht funktionieren, können Sie verwenden dirname(__FILE__) um den absoluten Pfad des Verzeichnisses zu erhalten, in dem sich die aktuelle Datei befindet.

require(dirname(__FILE__) . '/includes/sess-start.php');

8
2018-03-25 19:58



Sie müssen einen relativen Pfad verwenden. Wenn Ihre Dateinamen mit beginnen / PHP wird davon ausgehen, dass Sie das Root-Verzeichnis meinen. Das korrekte Präfix ist ./

include('./includes/sess-start.php');

Wenn Sie möchten, dass alle Ihre Pfade relativ zum Dokumentstamm sind, ist dies eine gängige Methode:

include("$_SERVER[DOCUMENT_ROOT]/includes/sess-start.php");

6
2018-03-25 19:58



Offenbar müssen Sie den führenden Schrägstrich aus der Include-Zeile entfernen.

Bearbeiten: Um Ihre Bedenken zu adressieren. Erstellen Sie in einer Prepend-Datei oder einem allgemeinen Include eine Konstante DOCROOT. Sie können es dynamisch von Ihrem bestimmen __FILE__ Konstante.

Dann:

include(DOCROOT.'myfile.php');

Persönlich würde ich versuchen, Dinge einzurichten, um so etwas zu vermeiden.


1
2018-03-25 19:58