2011-07-11 18 views
9

He estado programando en PHP desde hace varios años y nunca ha encontrado este error antes.Require_once PHP Error

Aquí está mi archivo widget.php:

require_once('fruit.php'); 
echo "I am compiling just fine!!!"; 

Y mi fruit.php archivo:

$bVar = true; 

Cuando estos dos archivos se ven así^entonces todo se compila sin errores y recibo el mensaje de error "Estoy compilando muy bien !!!".

Ahora, el momento en que me mueva el fruit.php un archivo de directorio de nivel superior, y cambiar mi widget.php archivo para reflejar la reestructuración directorio:

require_once('../fruit.php'); 
echo "I am compiling just fine!!!"; 

Ahora todos los repentina, me obtener advertencias PHP & errores fatales:

Warning: require_once(../fruit.php) [function.require-once]: failed to open stream: No such file or directory in /webroot/app/widget.php on line 1 

Fatal error: require_once() [function.require]: Failed opening required '../fruit.php' (include_path='.:/usr/local/php5/lib/php') in /webroot/app/widget.php on line 1 

En todos mis años de trabajo con PHP, he Nunca se en require_once() falla así antes. ¡¿¡¿Algunas ideas?!?!

+5

Lo único que puedo pensar inmediatamente, ¿ha comprobado los permisos del usuario del servidor web para la carpeta principal?Es posible que desee confirmar el sistema operativo, el servidor web, etc. Puedo ver que es relevante en este caso. –

+0

+1 para Jeff ... el "usuario" del servidor web tiene acceso al directorio padre. – sdolgy

+0

@Jeff Parker - eso nunca pasó por mi mente; Tendría que llamar al anfitrión y preguntar. ¿Sería esto una variable en Apache o PHP? ¿Qué archivo y nombre de variable? ¡Y gracias! – Kim

Respuesta

1

Recuerde que en el segundo caso, especifica una ruta, pero en el primer caso usa la ruta include. Tal vez en lugar de especificar explícitamente ... en el segundo caso, usted puede modificar su ruta de inclusión.

http://php.net/manual/en/function.set-include-path.php

+0

gracias por la sugerencia y lo investigaré esta mañana, pero nunca tuve un problema con el uso de "./" o "../" antes dentro de un require_once() declaración, y nunca una vez tuvo que usar la función set_include_path() para corregir cualquier problema como este antes. ¡Gracias de nuevo! – Kim

+0

En mi humilde opinión, establecer la ruta de inclusión no es significativa cuando se incluye directamente un archivo como lo está haciendo @kim, corrígeme si me equivoco. – Kumar

+0

Podría ser si alguien hizo un chdir o algo así. –

-1
require_once('fruit.php'); 

Esta expresión busca fruit.php en el mismo directorio que está en widget.php, no importa lo que el directorio de trabajo actual.

require_once('../fruit.php'); 

, esto busca fruit.php en un directorio por encima del directorio actual , no en el directorio superior al que se encuentra en widget.php.

+0

No, eso está mal. 'fruit.php' intenta resolver la ruta usando' include_path' (recuerde que el directorio de trabajo actual '.' usualmente forma parte de él) y' ../ fruit.php' intenta resolverlo _only_ con el trabajo actual directorio. – KingCrunch

+0

Adicional: Llamar 'fruit.php' no significa que el directorio de trabajo actual apunta al directorio, donde' fruit.php' es: 'php some/directory/fruit.php'. O cambió usando 'chwd()' – KingCrunch

13

Quizás esté en el directorio de trabajo mal. Es una mala idea confiar en él (excepto que explícitamente quiera acceder a él) de todos modos. Utilice

require __DIR__ . '/../fruit.php'; 

o con pre-5,3

require dirname(__FILE__) . '/../fruit.php'; 

Recuerde, que las rutas a partir de .., o . son no resuelta contra la ruta de inclusión, pero sólo contra el directorio de trabajo actual.

0

Sé que la pregunta es antigua, pero sigue siendo relevante.

En mi experiencia, el "open_basedir" directive es más probable que cause este problema.