2011-07-11 11 views
9

Ho programmato in PHP da diversi anni e non ha mai riscontrato questo errore prima di.Require_once Errore PHP

Ecco il mio file widget.php:

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

E il mio fruit.php di file:

$bVar = true; 

Quando questi due file simile a questa^poi tutto viene compilato senza errori e ricevo il messaggio "Sto compilando bene" ".

Ora, minuto mi muovo il fruit.php file di una directory di primo livello, e cambiare il mio widget.php file per riflettere la ristrutturazione directory:

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

Ora tutto il tratto, ottenere avvisi PHP & errori fatali:

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 

In tutti i miei anni di lavoro con PHP, non ho mai SE it require_once() fallisce come prima. Qualche idea?!?!

+5

L'unica cosa che posso immediatamente pensare, hai controllato le autorizzazioni dell'utente del server web per la cartella genitore?Potresti voler confermare il sistema operativo, il server web, ecc. Posso vedere che è rilevante in questo caso. –

+0

+1 per Jeff ... il server web "utente" ha accesso alla directory principale. – sdolgy

+0

@Jeff Parker - non è mai passato per la testa; Dovrei chiamare l'host e chiedere. Questa sarebbe una variabile in Apache o PHP? Quale file e nome della variabile? E grazie! – Kim

risposta

1

Ricorda che nel secondo caso, stai specificando un percorso, ma nel primo caso utilizza il percorso include. Forse piuttosto che specificare esplicitamente .. nel secondo caso, il tuo caso modifica il tuo percorso di inclusione.

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

+0

grazie per il suggerimento e ci guarderò stamattina, ma non ho mai avuto problemi con l'uso di "./" o "../" prima di un require_once(), e mai una volta ha dovuto usare la funzione set_include_path() per correggere qualsiasi problema come questo prima. Grazie ancora! – Kim

+0

IMHO, il set include path non è significativo quando si include direttamente un file come @kim sta facendo, correggimi se ho torto. – Kumar

+0

Potrebbe essere se qualcuno ha fatto un chdir o qualcosa del genere. –

-1
require_once('fruit.php'); 

Questo cerca fruit.php nella stessa directory widget.php è dentro, non importa quale sia la directory di lavoro corrente è.

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

Questo cerca fruit.php in una directory sopra la directory corrente , non nella directory sopra quella widget.php è.

+0

No, questo è sbagliato. 'fruit.php' prova a risolvere il percorso usando' include_path' (ricorda che la cartella di lavoro corrente '.' è di solito parte di esso) e' ../frutta.php' cerca di risolverlo _solo_ usando il lavoro corrente directory. – KingCrunch

+0

Additional: Chiamare 'fruit.php' non significa che la cartella di lavoro corrente punta alla directory, dove' fruit.php' è: 'php some/directory/fruit.php'. Oppure è stato cambiato usando 'chwd()' – KingCrunch

13

forse siete nella directory di lavoro sbagliato. È una cattiva idea affidarsi ad esso (eccetto che tu voglia esplicitamente accedervi). Utilizzare

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

o con pre-5,3

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

Ricordare, che i percorsi a partire da .., o . sono non risolto contro il include-percorso, ma solo contro la directory di lavoro corrente.

0

So che la domanda è vecchia, ma è ancora pertinente.

In base alla mia esperienza, è probabile che lo "open_basedir" directive causi questo problema.

Problemi correlati