относительный путь в require once не работает
у меня есть следующая структура
otsg
> class
> authentication.php
> database.php
> user.php
> include
> config.inc.php
> encryption.php
> include.php
> session.php
> index.php
> registration.php
включить.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';
и в индексе.php страница, которую я включил
require_once 'include/include.php';
когда я открываю страницу индекс.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
спасибо заранее
3 ответов:
использовать
__DIR__чтобы получить текущий путь скрипта, и это должно решить вашу проблему.
Так:
require_once(__DIR__.'/../class/user.php');это предотвратит случаи, когда вы можете запустить PHP-скрипт из другой папки, и поэтому пути родственников не будут работать.
Edit: Исправлена проблема косой черты
для php версии 5.2.17 __реж__ не будет работать он будет работать только с php 5.3
но для более старой версии php dirname (__ FILE__) прекрасно
писатьrequire_once dirname(__ FILE__). '/db_config.php';
в моем случае это не работает, даже с
__DIR__или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 и моя иерархия папок basilar:
q.php w.php e.php r.php cache/a.php cache/b.php setting/a.php setting/b.php....
Comments