У меня есть следующая структура
otsg > class > authentication.php > database.php > user.php > include > config.inc.php > encryption.php > include.php > session.php > index.php > registration.php
Файл include.php имеет следующее
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';
и на странице index.php я включил
require_once 'include/include.php';
Когда я открываю страницу index.php, я получаю следующее предупреждение и фатальную ошибку. Я не понимаю, что вызывает эту ошибку. Когда я дал абсолютный путь, он работает. Но абсолютный путь – это не очень хорошая идея, я верю.
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
заранее спасибо
использование
__DIR__
чтобы получить текущий путь к скрипту, и это должно устранить вашу проблему.
Так:
require_once(__DIR__.'/../class/user.php');
Это предотвратит случаи, когда вы можете запускать скрипт PHP из другой папки, и поэтому пути родственников не будут работать.
Изменить: проблема с косой чертой исправлена
для версии php 5.2.17 __ DIR __ не будет работать, он будет работать только с php 5.3
Но для более старой версии php dirname ( __ FILE __ ) отлично
Например, напишите так:
require_once dirname ( __ FILE __ ). '/db_config.php';
В моем случае это не сработает, даже с getcwd()
или getcwd()
он продолжает выбирать неправильный путь, я решил, определив costant в каждом файле, который мне нужен, с абсолютным базовым путем проекта:
if(!defined('THISBASEPATH')){ define('THISBASEPATH', '/mypath/'); } require_once THISBASEPATH.'cache/crud.php'; /*every other require_once you need*/
У меня есть MAMP с php 5.4.10, и моя иерархия папок базилярна:
q.php w.php e.php r.php cache/a.php cache/b.php setting/a.php setting/b.php
….