Tengo la siguiente estructura
otsg
> class
> authentication.php
> database.php
> user.php
> include
> config.inc.php
> encryption.php
> include.php
> session.php
> index.php
> registration.php
El archivo include.php tiene lo siguiente
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';
y en la página index.php que había incluido
require_once 'include/include.php';
Cuando abro la página index.php, aparece la siguiente advertencia y error fatal. No entiendo qué causa este error. Cuando di la ruta absoluta, funciona. Pero creo que el camino absoluto no es una buena idea.
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
Gracias por adelantado
php
warnings
fatal-error
require-once
usuario525146
fuente
fuente
Respuestas:
Utilizar
para obtener la ruta actual del script y esto debería solucionar su problema.
Entonces:
Esto evitará los casos en los que puede ejecutar un script PHP desde una carpeta diferente y, por lo tanto, las rutas relacionadas no funcionarán.
Editar: problema de barra fijo solucionado
fuente
__DIR__
es nuevo en PHP 5.3. Si necesita que este script se ejecute en versiones anteriores de PHP, debería usarlodirname(__FILE__)
en su lugar.__DIR__
. Entonces: segúnrequire_once(__DIR__.'/../class/user.php');
la documentación , se omite la barra diagonal, excepto para el directorio raíz.__DIR__
es necesaria. Los documentos de PHP parecen decir que PHP buscará en el directorio del script actual de forma predeterminada. ¿Alguien puede arrojar algo de luz?require "../a.php"
. Si este archivo se importa de otro archivo (x) endir1/dir2/x.php
el archivo incluido serádir1/a.php
, pero si x está endir1/dir2/dir3/x.php
, el archivo incluido serádir1/dir2/a.php
, etc. ¿O me equivoco?para php versión 5.2.17
__DIR__
no funcionará, solo funcionará con php 5.3Pero para la versión anterior de php
dirname(__FILE__)
perfectamentePor ejemplo, escribe así
fuente
En mi caso, no funciona, incluso con
__DIR__
ogetcwd()
sigue eligiendo la ruta incorrecta, lo resolví definiendo una costante en cada archivo que necesito con la ruta base absoluta del proyecto:Tengo MAMP con php 5.4.10 y mi jerarquía de carpetas es basilar:
....
fuente
Me encontré con el mismo problema, en el que todo funcionaba bien, hasta el momento en que tenía una inclusión dentro de otra inclusión.
Solución 1. (codificación no deseada del nombre de mi carpeta html pública, pero funciona):
Solución 2 (comentario no deseado arriba sobre DIR que solo funciona desde php 5.3, pero funciona):
Solución 3 (no puedo ver ninguna desventaja y funciona perfectamente en mi php 5.3):
fuente