2012-12-16 15 views
5

mia struttura di directory simile a questo:PHP - percorsi relativi "richiedono"

blog -> admin -> index.php 
blog.php 
db.php 
functions.php 

ho cercato di include (require, in realtà) blog.php nel admin/index.php, ma di fronte un sacco di errori. Sto seguendo un corso PHP e l'istruttore fa la stessa cosa con successo.

admin/index.php:

require "../blog.php"; 

, che, a sua volta, richiede più di due file nella sua directory.

require "db.php"; 
require "functions.php"; 
+0

Penso che sia necessario semplicemente uscire da un livello, vale a dire. '../../ blog.php' assumendo che' blog.php' non sia nella cartella 'blog'. – prodigitalson

+0

Non penso che funzionerebbe. 'blog.php' è nella directory' blog'. – Rafay

+0

Ah, la tua notazione sulla struttura delle directory mi ha confuso :-) – prodigitalson

risposta

18

Se si rileva che i percorsi di inclusione relativi non funzionano come previsto, una soluzione rapida è di anteporre __DIR__ all'inizio del percorso che si sta tentando di includere.

require __DIR__ . "/../blog.php"; 

È ragionevolmente pulito e non è necessario modificare il percorso di inclusione o la directory di lavoro.

+0

Questo ha funzionato. Grazie! Anche se non ho idea del motivo per cui devo farlo. L'istruttore ottiene via 'require" ../ blog.php ";' senza alcun problema. È a causa delle differenze OS? Lui è su Mac e io sono su Windows. – Rafay

+2

In realtà non ne sono del tutto sicuro - credo che abbia a che fare con la directory di lavoro corrente che non corrisponde sempre alla directory dello script. –

+1

@Rafay: è comunque una cattiva pratica. Dovresti sempre calcolare il percorso assoluto e quindi richiedere/includere. – prodigitalson

-3

Mi piace iniziare i miei file con chdir($_SERVER['DOCUMENT_ROOT']). Questo mi consente di ottenere un percorso di base valido e logico per tutti i miei inclusi.

+0

Ecco perché hai la direttiva include_path nel php.ini. –

+0

'include_path' non si applica per cose come' file_exists' però;) –

+0

e un file di operazione per file php senza uso reale. Prendi in considerazione l'utilizzo di PSR-0 o l'utilizzo di __DIR__. –

1

Se si include questo file db.php and functions.php in index.php allora dovete scrivere questo codice

require "../db.php"; 
require "../functions.php"; 

o se si è incluso questo file nella blog.php poi scrivere questo codice

require "db.php"; 
require "functions.php"; 
Problemi correlati