118 Stimmen

relativer Pfad in require_once funktioniert nicht

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 hat folgenden Inhalt

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 der index.php Seite hatte ich folgendes eingefügt

require_once 'include/include.php';

Wenn ich die Seite index.php öffne, erhalte ich die folgende Warnung und einen fatalen Fehler. Ich verstehe nicht, was diesen Fehler verursacht. Wenn ich den absoluten Pfad eingebe, funktioniert es. Aber absoluten Pfad ist nicht eine gute Idee, ich glaube.

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

Vielen Dank im Voraus

246voto

Raisen Punkte 4225

Utilice

__DIR__

um den aktuellen Pfad des Skripts zu erhalten, und das sollte Ihr Problem lösen.

Also:

require_once(__DIR__.'/../class/user.php');

Dadurch wird verhindert, dass Sie ein PHP-Skript von einem anderen Ordner aus starten können und daher die Verwandtenpfade nicht funktionieren.

Edit: Schrägstrichproblem behoben

20voto

Mobile Tech. Punkte 709

Für php Version 5.2.17 __DIR__ wird nicht funktionieren, es funktioniert nur mit php 5.3

Aber für ältere Versionen von php dirname(__FILE__) perfekt

Schreiben Sie zum Beispiel so

require_once dirname(__FILE__) . '/db_config.php';

1voto

linuxatico Punkte 1790

In meinem Fall funktioniert es nicht, auch nicht mit __DIR__ o getcwd() Ich habe das Problem dadurch gelöst, dass ich in jeder Datei, die ich benötige, den absoluten Basispfad des Projekts angegeben habe:

if(!defined('THISBASEPATH')){ define('THISBASEPATH', '/mypath/'); }
require_once THISBASEPATH.'cache/crud.php';
/*every other require_once you need*/

Ich habe MAMP mit php 5.4.10 und meine Ordnerhierarchie ist basilar:

q.php 
w.php 
e.php 
r.php 
cache/a.php 
cache/b.php 
setting/a.php 
setting/b.php

....

0voto

hamish Punkte 1074

Ich bin gerade auf das gleiche Problem gestoßen, bei dem alles gut funktionierte, bis zu dem Punkt, an dem ich ein Include innerhalb eines anderen Includes hatte.

require_once '../script/pdocrud.php';  //This worked fine up until I had an includes within another includes, then I got this error:
Fatal error: require_once() [function.require]: Failed opening required '../script/pdocrud.php' (include_path='.:/opt/php52/lib/php')

Lösung 1. (unerwünschte Hardcodierung des Namens meines öffentlichen HTML-Ordners, aber es funktioniert):

require_once $_SERVER["DOCUMENT_ROOT"] . '/orders.simplystyles.com/script/pdocrud.php';

Lösung 2. (Unerwünschter Kommentar oben, dass DIR erst seit php 5.3 funktioniert, aber es funktioniert):

require_once __DIR__. '/../script/pdocrud.php';

Lösung 3. (Ich kann keine Nachteile erkennen, und es funktioniert perfekt in meinem php 5.3):

require_once dirname(__FILE__). '/../script/pdocrud.php';

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X