User Tools

Site Tools


Sidebar

No ai soldati italiani all'estero

Indice

Eventi

Energia

Rigacci.Org usa energia elettrica da fonti rinnovabili, grazie al gruppo di acquisto Merci Dolci.

Merci Dolci - Energia Rinnovabile

Software libero!

Petizione contro i brevetti software

Faunalia: Soluzioni GIS professionali

Debian

www.gnu.org www.kernel.org

doc:appunti:prog:php_include

Include in PHP

I file richiamati dalla funzione include() e dalla funzione require() del PHP cercano nell'ordine:

  1. Ogni directory della include_path. Percorsi relativi si intendono rispetto alla working directory.
  2. Nella directory dello script principale.
  3. Nella directory dello script incluso.

In questo esempio abbiamo un file incluso che ne include a sua volta un'altro, in directory diverse:

index.php: inlcude('lib/header.php')
   |
   |-- lib\
   |    |
   |    |-- header.php: include('it/menu.php')
   |    |
   |    \-- it\
   |      |
   |      \-- menu.php
   |
   \-- it\
        |
        \-- menu.php

Qual'è il contesto in cui viene valutato l'include del file lib/header.php?

Contrariamente a quello che si potrebbe pensare la working directory riportata da getcwd() è la directory principale, ed anche lo script corrente riportato da $_SERVER['SCRIPT_NAME'] è sempre index.php. Quindi il contesto predefinito rimane quello dello script principale (del file index.php nel nostro caso).

Solo se la funzione include() fallisce viene cercato il contesto più interno (la sottodirectory lib nel nostro caso).

Evitare path assoluti

Quando si utilizza una include() è bene usar sempre percorsi relativi, in modo che le pagine PHP possano essere spostate nel filesystem senza problemi.

Tuttavia se abbiamo più livelli di include() in file che risiedono in directory diverse, la faccenda si complica perché il contesto predefinito è inteso relativo al primo script interpretato.

In questo esempio l'include di header.php funziona per index.php, ma fallisce per it/index.php:

index.php: inlcude('inc/common.php')
   |
   |-- it\
   |    |
   |    \-- index.php: inlcude('../inc/common.php')
   |
   |-- inc\
   |    |
   |    |-- common.php: include('inc/header.php')
   |    |
   |    \-- header.php

Una soluzione è quella di usare la variabile __FILE__ per determinare a runtime il percorso assoluto dello script incluso.

Ad esempio per essere certi che common.php includa header.php dalla sua directory si può usare:

include(dirname(__FILE__) . '/' . 'header.php');
doc/appunti/prog/php_include.txt · Last modified: 2009/03/05 18:02 by niccolo