PHP Schwerwiegender Fehler: Fehlgeschlagenes Öffnen erforderlich

8

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

Meine Website gibt weiterhin diesen Fehler aus: \

  

[Fr Mär 25 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:    Ссылка

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

Bearbeiten 1

Dies sind Includes / Requests, die selbst zusätzliche require oder include Statements enthalten können. Relative Pfade funktionieren nicht, also bitte nicht vorschlagen.

Meine .htaccess-Datei weist bereits alle Pfade auf das Site-Stammverzeichnis hin:

  

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 (und verursacht auch Probleme auf einer Windows-Maschine)

Aktualisieren

Vielleicht kann 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 von möglichen 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 aber 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 verknüpfen, weil es a nicht erkennt "Site-Root" bei der Ausführung in einer Testumgebung.

    
JM4 25.03.2011, 19:54
quelle

3 Antworten

8

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 sich um einen absoluten Pfad handelt. 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 haben, der relativ zu page.php ist.

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

%Vor%     
Andrew Moore 25.03.2011, 19:58
quelle
6

Sie müssen einen relativen Pfad verwenden. Wenn Ihre Dateinamen mit / beginnen, wird davon ausgegangen, dass Sie das Stammverzeichnis meinen. Das korrekte Präfix ist ./

%Vor%

Wenn Sie möchten, dass alle Ihre Pfade relativ zum Dokumentenstamm sind, ist dies eine übliche Methode:

%Vor%     
mario 25.03.2011 19:58
quelle
1

Sieht so aus, als müssten Sie den führenden Schrägstrich von der Include-Zeile entfernen.

Bearbeiten: Um Ihre Bedenken zu adressieren. Erstellen Sie in einer Prepend-Datei oder einem gemeinsamen Include eine Konstante wie DOCROOT . Sie können es dynamisch anhand Ihrer __FILE__ -Konstante ermitteln.

Dann:

%Vor%

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

    
Matthew 25.03.2011 19:58
quelle

Tags und Links