Eu tenho a seguinte estrutura
otsg
> class
> authentication.php
> database.php
> user.php
> include
> config.inc.php
> encryption.php
> include.php
> session.php
> index.php
> registration.php
O arquivo include.php tem o seguinte
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';
e na página index.php eu incluí
require_once 'include/include.php';
Quando abro a página index.php, recebo o seguinte aviso e erro fatal. Não entendo o que causa esse erro. Quando dei o caminho absoluto, funciona. Mas o caminho absoluto não é uma boa ideia, eu acredito.
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
desde já, obrigado
php
warnings
fatal-error
require-once
user525146
fonte
fonte
Respostas:
Usar
para obter o caminho atual do script e isso deve resolver seu problema.
Assim:
Isso evitará casos em que você possa executar um script PHP de uma pasta diferente e, portanto, os caminhos relativos não funcionarão.
Editar: problema de barra corrigido
fonte
__DIR__
é novo no PHP 5.3. Se você precisa que este script seja executado em versões anteriores do PHP, você deve usá-lodirname(__FILE__)
.__DIR__
. Portanto: Derequire_once(__DIR__.'/../class/user.php');
acordo com a documentação , a barra final é omitida, exceto para o diretório raiz.__DIR__
é necessário. Os documentos do PHP parecem dizer que o PHP pesquisará o diretório do script atual por padrão. Alguém pode lançar alguma luz?require "../a.php"
. Se este arquivo for importado de outro arquivo (x),dir1/dir2/x.php
o arquivo incluído serádir1/a.php
, mas se x estiverdir1/dir2/dir3/x.php
, o arquivo incluído serádir1/dir2/a.php
, etc. Ou estou errado?para php versão 5.2.17
__DIR__
não funcionará, só funcionará com php 5.3Mas para uma versão mais antiga do php
dirname(__FILE__)
perfeitamentePor exemplo, escreva assim
fonte
No meu caso ele não funciona, mesmo com
__DIR__
ougetcwd()
mantém escolher o caminho errado, eu resolvido, definindo um costant em cada arquivo que eu preciso com o caminho de base absoluta do projeto:Eu tenho MAMP com php 5.4.10 e minha hierarquia de pastas é basilar:
....
fonte
Acabei de me deparar com o mesmo problema, onde tudo funcionava bem, até o ponto em que tinha um includes dentro de outro includes.
Solução 1. (codificação indesejada do nome da minha pasta html pública, mas funciona):
Solução 2. (comentário indesejado acima sobre o DIR só funcionar desde o php 5.3, mas funciona):
Solução 3. (Não consigo ver nenhuma desvantagem e funciona perfeitamente no meu php 5.3):
fonte