Mettendo da parte tutti questi consigli, le tue opzioni suggerite hanno questi pro e contro.
singolo file php
- (+) un punto centrale di esecuzione; puoi includere parti comuni di app, controlli di sicurezza, configurazione di env, ecc ... in un unico posto e per tutti
- (-) un punto centrale di esecuzione; devi indirizzare il traffico in un posto. questo potrebbe ingombrare il codice
- (-) fondamentalmente un url per tutto (certi parametri di query diversi); questo può essere un handicap quando i crawler / gli indicizzatori vengono sul tuo sito
separati file php principali
- (+) probabilmente più url per crawler e indicizzatori
- (-) devi includere esplicitamente parti comuni in ogni script di livello superiore
Ma c'è un altro modo tra questi due, continua a leggere.
Forse c'è un motivo per cui non vuoi usare una struttura consolidata, forse vuoi imparare esplorando. Non voglio giudicare, è una tua scelta.
Solo tu puoi mangiare la torta e averlo anche tu. Raccogli i vantaggi di entrambe le soluzioni ed elimina i principali svantaggi.
Propongo due (e metà) soluzioni, entrambe basate sullo scenario in cui stai utilizzando file .php
separati con i propri URL pubblici, diciamo:
/index.php
/section.php
/article.php?id=123
E vuoi includere implicitamente parti comuni in tutti gli script.
riscrive
Prima di tutto, puoi sfruttare le riscritture in apache
/ nginx
/ whatever-your-httpd-is
e indirizzare tutto il traffico a un singolo file php. In quel file puoi fare tutto ciò che vuoi per inizializzare l'applicazione e richiedere lo script richiesto in origine.
router.php :
<?php
$script = $_SERVER['SCRIPT_NAME'];
# add mandatory safety checks
require 'common.php';
require $script;
Ovviamente, puoi fare molto di più in router.php
o common.php
, ad es. impostare la connessione DB, il caricamento automatico, le opzioni di configurazione, gestire gli URL più belli, ecc ...
Fondamentalmente, questo è ciò che tutti questi framework fanno per te.
prepend / Aggiunta
Se riesci a copiare php.ini
o .htaccess
file, puoi impostare auto_prepend_file
( link ) direttiva per il tuo progetto. E possibilmente auto-append-file
( link ).
php.ini :
auto_prepend_file = prepend.php
auto_append_file = append.php
o .htaccess :
php_value auto_prepend_file prepend.php
php_value auto_append_file append.php
Questo ha esattamente lo stesso effetto dell'aggiunta delle dichiarazioni require
all'inizio e alla fine di ogni script .php
di livello superiore eseguito (cioè eseguibile con URL pubblico).
Questa soluzione ha aggiunto il vantaggio della gestione dell'interprete php nell'esecuzione di script di livello superiore, non del router. Quindi, se non è previsto che venga eseguito da una richiesta http, .htaccess
et al viene fatto. Devi gestirlo a mano quando usi riscrittura / router.
404 gestore
Questa è l'ultima opzione, ma non la raccomando poiché distrugge in modo efficace qualsiasi cosa diversa dalle richieste GET. Ma può essere utile se vuoi utilizzare sia gli URL piuttosto che gli script direttamente eseguibili.
Invece di riscrivere, puoi invece impostare 404 gestori. Se httpd non riesce a trovare la risorsa pubblica (che si tratti di file statico di file .php
), esegue invece il gestore definito. Se si tratta di un file .php
, è molto simile a router.php
dalla soluzione di riscrittura. Ma non voglio entrare nei dettagli qui. Faresti meglio a provare a giocarci da solo.
PATH_INFO
Un'altra osservazione forse ti è utile.
Esamina la variabile di ambiente PATH_INFO
(accessibile come $_SERVER['PATH_INFO']
da php). E prova a giocare con url come /article.php/123/pretty-name
. Non devi limitarti ai parametri di query (a.k.a. $ _GET). Un sacco di singoli URL quasi istantaneamente.