Ok, ora funziona, ma non capisco quale sia la differenza con il percorso relativo. Anche in questo caso, usando __DIR__, devo aggiustare il numero di /.. a dipendenza di dove si trova il file che sto modificando...
Immagina di avere 3 file omonimi di nome file.php collocati all'interno di cartelle diverse, per esempio:
Codice:
/home/fontanesi/folder_1/file.php
/home/fontanesi/folder_2/file.php
/home/fontanesi/file.php
Nota che /home/fontanesi/... è il percorso assoluto che identifica univocamente ogni file e cartella nel file system. L'esempio usa la sintassi di UNIX in quanto [quasi] tutti i web server usano sistemi operativi derivati da UNIX, tipicamente GNU/Linux. Il concetto è comunque presente Windows, dove i percorsi assoluti sono nella forma C:\\users\fontanesi\folder_1\file.php (o qualcosa del genere).
Se /home/fontanesi/folder_1/file.php volesse includere /home/fontanesi/folder_2/file.php come dovrebbe fare? Scrivere semplicemente file.php e aspettarsi che capisca da solo che deve andare nella cartella superiore, quindi spostarsi in folder_2 e leggere il file sarebbe assurdo. Tanto meno basterebbe indicargli di spostarsi di una cartella: troverebbe prima /home/fontanesi/file.php e restituirebbe lui. Per togliere ogni possibile forma di ambiguità è necessario e specificare la "sequenza di passi" esatta dal file di partenza a quello di arrivo:
Codice:
spostati in alto di una cartella
accedi alla cartella folder 2
accedi al file file.php
indicato in modo conciso tramite la solita sintassi ../folder_2/file.php. Questo si chiama percorso relativo.
Chiaramente, creando un nuovo file in /home/fontanesi/folder_3/subfolder/file.php e volendo includere /home/fontanesi/folder_2/file.php da quest'ultimo è chiaro che la sequenza di passi sia diversa, bisogna salire di una cartella in più, di conseguenza cambia anche il percorso relativo: ../../folder_2/file.php.
L'alternativa è usare appunto i percorsi assoluti, indicando esplicitamente la posizione esatta di ogni file nel sistema, per esempio /home/fontanesi/folder_2/file.php. Questo però crea un ovvio problema. Supponendo tu voglia sviluppare il tuo sito sul tuo computer che usa Windows, dovrai usare il percorso assoluto C:\\users\fontanesi\folder_2\file.php. Appena copierai il file sul server web, che usa GNU/Linux, il percorso assoluto non funzionerà più, perché il file system è strutturato diversamente. Anche se sviluppasi su un sistema GNU/Linux non avresti nessuna garanzia che questo seguisse la stessa configurazione del server.
La soluzione è [relativamente] semplice: usare percorsi assoluti generati dinamicamente:
Codice PHP:
__DIR__ . '/../folder_2/file.php
dove __DIR__ è una costante di PHP che rappresenta il percorso assoluto del file che la contiene. Una volta interpretato, il codice di prima produce la seguente stringa:
Codice PHP:
"/home/fontanesi/folder_1/file.php/../folder_2/file.php"
che è il percorso assoluto del secondo file. Può sembrare un po' strano che "entri" prima in folder_1 solo per poi "uscire" con i ".." e rientrare in folder_2, ma questo non rappresenta un problema.
Un'ulteriore alternativa per generare percorsi assoluti dinamicamente è ricorrere a $_SERVER['DOCUMENT_ROOT'], ma questo richiede che il server sia appositamente configurato per rendere disponibile quella variabile. Di solito è così, quindi generalmente non ci sono problemi.