У меня следующая структура
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
заранее спасибо
php
warnings
fatal-error
require-once
user525146
источник
источник
Ответы:
Использовать
чтобы получить текущий путь к сценарию, и это должно решить вашу проблему.
Так:
Это предотвратит случаи, когда вы можете запустить PHP-скрипт из другой папки, и поэтому родственные пути не будут работать.
Изменить: исправлена проблема с косой чертой
источник
__DIR__
является новым в PHP 5.3. Если вам нужно, чтобы этот сценарий работал в более ранних версиях PHP, вам следует использоватьdirname(__FILE__)
вместо него.__DIR__
. Итак:require_once(__DIR__.'/../class/user.php');
Согласно документации , косая черта в конце опускается, за исключением корневого каталога.__DIR__
это нужно. Документы PHP, кажется, говорят, что PHP по умолчанию будет искать каталог текущего скрипта. Кто-нибудь может пролить свет?require "../a.php"
. Если этот файл импортирован из другого файла (x) вdir1/dir2/x.php
включенном файле будетdir1/a.php
, но если x находится вdir1/dir2/dir3/x.php
, включенный файл будетdir1/dir2/a.php
и т.д. Или я ошибаюсь?для php версии 5.2.17
__DIR__
не будет работать, будет работать только с php 5.3Но для более старой версии php
dirname(__FILE__)
отличноНапример, напишите так
источник
В моем случае это не работает, даже с
__DIR__
илиgetcwd()
он держит выбирая неправильный путь, я решил, определив Костант в каждом файле , мне нужно с абсолютным базовым путем проекта:У меня есть MAMP с php 5.4.10, и моя иерархия папок базовая:
....
источник
Я только что столкнулся с той же проблемой, когда все работало нормально, вплоть до того момента, когда у меня были включения в другие включения.
Решение 1. (нежелательное жесткое кодирование имени моей общедоступной html-папки, но оно работает):
Решение 2. (нежелательный комментарий выше о том, что DIR работает только с php 5.3, но работает):
Решение 3. (Я не вижу недостатков, и он отлично работает на моем php 5.3):
источник