Ich habe die folgende Struktur
otsg
> class
> authentication.php
> database.php
> user.php
> include
> config.inc.php
> encryption.php
> include.php
> session.php
> index.php
> registration.php
Die Datei include.php enthält Folgendes
ini_set('display_errors', 1);
error_reporting(E_ALL);
ini_set('include_path',ini_get('include_path').':/Applications/MAMP/htdocs/otsg/:');
require_once 'config.inc.php';
require_once '../class/database.php';
require_once '../class/user.php';
require_once 'encryption.php';
require_once 'session.php';
require_once '../class/authentication.php';
und in die index.php Seite hatte ich aufgenommen
require_once 'include/include.php';
Wenn ich die Seite index.php öffne, erhalte ich die folgende Warnung und einen schwerwiegenden Fehler. Ich verstehe nicht, was diesen Fehler verursacht. Wenn ich den absoluten Pfad angegeben habe, funktioniert es. Aber absoluter Weg ist keine gute Idee, glaube ich.
Warning: require_once(../class/database.php) [function.require-once]: failed to open stream: No such file or directory in /Applications/MAMP/htdocs/otsg/include/include.php on line 9
Fatal error: require_once() [function.require]: Failed opening required '../class/database.php' (include_path='.:/Applications/MAMP/bin/php5.3/lib/php:/Applications/MAMP/htdocs/otsg/include/:') in /Applications/MAMP/htdocs/otsg/include/include.php on line 9
Danke im Voraus
php
warnings
fatal-error
require-once
user525146
quelle
quelle
Antworten:
Verwenden
um den aktuellen Pfad des Skripts abzurufen, sollte dies Ihr Problem beheben.
So:
Dies verhindert Fälle, in denen Sie ein PHP-Skript aus einem anderen Ordner ausführen können und daher die Pfade der Verwandten nicht funktionieren.
Bearbeiten: Schrägstrichproblem behoben
quelle
__DIR__
ist neu in PHP 5.3. Wenn Sie dieses Skript für frühere Versionen von PHP benötigen, sollten Sie esdirname(__FILE__)
stattdessen verwenden.__DIR__
. Also:require_once(__DIR__.'/../class/user.php');
Gemäß der Dokumentation wird der abschließende Schrägstrich mit Ausnahme des Stammverzeichnisses weggelassen.__DIR__
das notwendig ist. Die PHP-Dokumente scheinen zu sagen, dass PHP standardmäßig das Verzeichnis des aktuellen Skripts durchsucht. Kann jemand etwas Licht ins Dunkel bringen?require "../a.php"
. Wenn diese Datei aus einer anderen Datei (x) indir1/dir2/x.php
der enthaltenen Datei importiert wird, ist dies der Falldir1/a.php
, aber wenn x vorhanden istdir1/dir2/dir3/x.php
, ist die enthaltene Dateidir1/dir2/a.php
usw. Oder irre ich mich?für PHP Version 5.2.17
__DIR__
wird nicht funktionieren, es wird nur mit PHP 5.3 funktionierenAber für ältere Version von PHP
dirname(__FILE__)
perfektZum Beispiel so schreiben
quelle
In meinem Fall funktioniert es nicht, auch wenn
__DIR__
odergetcwd()
es immer wieder den falschen Pfad auswählt. Ich habe das Problem gelöst, indem ich in jeder Datei, die ich benötige, einen Costant mit dem absoluten Basispfad des Projekts definiert habe:Ich habe MAMP mit PHP 5.4.10 und meine Ordnerhierarchie ist ähnlich:
....
quelle
Ich bin gerade auf dasselbe Problem gestoßen, bei dem alles gut funktioniert hat, bis zu dem Punkt, an dem ich ein Include in einem anderen Include hatte.
Lösung 1. (unerwünschte Hardcodierung meines öffentlichen HTML-Ordnernamens, aber es funktioniert):
Lösung 2. (unerwünschter Kommentar oben über DIR funktioniert erst seit PHP 5.3, aber es funktioniert):
Lösung 3. (Ich kann keine Nachteile erkennen und es funktioniert perfekt in meinem PHP 5.3):
quelle