Newsgroup: it.comp.www.php
Titolo: php include

ciao a tutti ho un quesito da porvi, sto usando php da una decina di giorni
e mi sono fermata su questa cosa, ho una pagina index.php al suo interno vi
sono diversi include("nomepagina.php"); vorrei sapere come fare per
riconoscere la "chiamata" di inclusione.. cioč legittima fatta da index.php
(HTTP_REFERER posto in nomepagina.php sembra non funzionare) tutto ciň al
fine di impedire che se nomepagina.php viene richiamata via url senza 
passare
per index.php mi deve dare pagina bianca. ma appunto non so come fare e
mi son fermata.
§ara 

 richiamata via url senza passare per index.php mi deve dare pagina bianca.
La prima che mi viene in mente č questa sotto, da inserire all'inizio di
ciascuna pagina inclusa:
  $UrlAssolutoPaginaInclusa="
http://urlAssoluto.include.php
";
 
  if ( $UrlAssolutoPaginaInclusa== "http://" . $_SERVER['HTTP_HOST'] .
$_SERVER["SCRIPT_NAME"]) {
  exit();
  }
... ma il problema, come era d'uso dire negli anni 70, sta a monte. Per
quale motivo fai produrre output dalle pagine incluse?
Io non sono un esperto del settore, ma un po' di php l'ho masticato, e
non mi sono mai imbattuto in un'esigenza del genere.
-- 
mailto: y = i
------------------------------------------------------
http://www.catarsi.it
Vivo nel terrore di non essere frainteso (Oscar Wilde)

 §ara
Come suggeriscono gli esempi della funzione get_included_files, puoi
confrontare:
__file__
con
$_SERVER['SCRIPT_FILENAME']
Se sono uguali, il file incluso è chiamato direttamente, altrimenti
no.
Puoi provare questo esempio:
index.php
-----------------
<?php
     echo "INDEX.PHP : <br>";
     echo "__file__ : ".__file__."<br>";
     echo "SF : ".$_SERVER['SCRIPT_FILENAME']."<br>";
     include('incluso.php');
?>
incluso.php
------------------
<?php
     echo "INCLUSO.PHP : <br>";
     echo "__file__ : ".__file__."<br>";
     echo "SF : ".$_SERVER['SCRIPT_FILENAME']."<br>";
?>
Prova a chiamare prima il file index.php (che include incluso.php) e
poi incluso.php direttamente.
Saluti,
     Fabrizio
--website: 
http://www.negusweb.it
--lightest streaming player: 
http://www.radioconnectsoftware.com

 fermata.
Confronta __FILE__ con $_SERVER['SCRIPT_FILENAME'].
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

 per index.php mi deve dare pagina bianca.
puoi fare di meglio che non una pagina bianca: è sufficiente che tu
metta le pagine da includere in una directory fuori dall'albero di
apache, in modo che non possano mai essere chiamate tramite una URL
(se ci provi becchi un 404). La direttiva include invece le
raggiungerà senza problemi. Eventualmente puoi anche aggiungere il
path della directory con le inclusioni alla direttiva include_dir del
php.ini e così non hai neanche bisogno di specificarlo tutte le volte.
In alternativa, puoi cambiargli l'estensione (ad esempio chiamarle
*.inc invece che *.php) e poi proibire ad Apache di servire le
pagine .inc con una direttiva in un file .htaccess.
Se non usi apache... beh, adatta queste indicazioni al web server che
usi ;^)
bye!

 neanche bisogno di specificarlo tutte le volte.
La direttiva e' include_path (non include_dir) e comunque ne sconsiglio
l'utilizzo: crea problemi di performance e di inclusione nel caso di
file con lo stesso nome.


 file con lo stesso nome.
Huh? Problemi di performance? E' la prima volta che lo sento dire, a
che ti riferisci?
bye!

 che ti riferisci?
Al fatto che ogni volta che esegui un include di un file, il PHP deve
verificarne l'esistenza in ogni directory definita nell'include_path
fino a che non trova il file. L'utilizzo di path assoluti elimina
questo overhead.


 fino a che non trova il file.
Ah bè, ovviamente. Ma a meno che tu non metta una trentina di path
nella direttiva, non penso sia un gran problema.
bye!

 nella direttiva, non penso sia un gran problema.
In una applicazione mono utente, forse. Ma quando si tratta di gestire
decine di utenti concorrenti, il collo di bottiglia diventa l'accesso
al disco con tutti i seek necessari per effettuare la ricerca dei file.


 al disco con tutti i seek necessari per effettuare la ricerca dei file.
Hm, continuo ad essere scettico. Dietro le chiamate per includere file
ci saranno le chiamate di sistema a fstat e fopen, che sono cachate,
almeno sotto linux (sotto windows non so, ma tanto non metterei mai un
sito con php per windows aperto a decine di utenti concorrenti...).
L'accesso effettivo al disco, al massimo, mi aspetterei lo facesse ad
ogni respawn che apache fa del processo, tra l'uno e l'altro dei quali
potrebbero passare anche diverse centinaia di richieste. Ciò detto,
non posso che concordare che se vuoi ottimizzare al massimo per siti
ad alto traffico, anche passare a include con path assoluti può
aiutare.
bye!

 che sono cachate,
Mmm, fa quasi ridere.

 Mmm, fa quasi ridere.
sono sempre contento quando riesco a sollevare l'umore del prossimo.
bye!