Ciao, ho creato un file per testare script in modo trasparente su un sito, e volevo sapere la vostra opinione di esperti, e se qualcuno di voi lo farebbe in modo migliore
Il mio file si chiama 'fork_flux.php', il cui codice è qui di seguito (il codice che vi mostro è scritto per funzionare su un forum phpBB).
Quello che fa è semplice: devia il codice su un file secondario sostitutivo, che ha lo stesso nome del file originario più un suffisso. Ad es. se il file originario è "prova.php" il file secondario sarà "prova2.php".
Il file sostitutivo viene eseguito solo da colui che lo debugga, mentre tutti gli altri non si accorgono di nulla (poiché continuano a eseguire il file originario). È quindi necessario un sistema di autenticazione (più o meno sicura) per poter sapere chi è autorizzato a vedere il file. L'accesso concorrente può essere implementato modificando opportunamente il file di debug.
Il file sostitutivo può trovarsi nella stessa cartella del file originario o in un'altra cartella: lo trovo comodo nel caso che i file originari siano localizzati in cartelle diverse, quindi metterò tutti i file secondari nella stessa cartella e accederò solo a quella, anziché fare avanti e 'ndré. I file modificati possono anche venire inclusi in altri file senza che il risultato cambi.
Per farlo funzionare, bisogna aggiungere una riga nei file originari (l'ho messa nello script) all'inizio del file, e mettere una graffa chiusa alla fine del file. Il controllo centralizzato è comodo perché, nel caso che si stiano modificando più file contemporaneamente, si può passare dalla modalità normale alla modalità di debug modificando solo un valore nel file di debug.
Aggiungereste/modifichereste qualcosa? Lo fareste in altro modo?
fork_flux.php :
Codice PHP:
<?php
/************************************/
/* Luffio © 2012 */
/************************************/
// Loads an alternative file. For testing purpose. Copy the following line to the very
// beginning of the original file after the 'Start session management' section and add a '}' to
// the very end of the file.
// You can specify './' (current path) or '/' (home path) or '/TREEPATH/' (where TREEPATH
// is like '/mydir1/mydir2/') as argument to 'define_flux'.
// include_once($phpbb_root_path . 'fork_flux.' . $phpEx); if($new_flux=define_flux()) include($new_flux);else{
if(!defined('FILENAME_SUFFIX'))
define('FILENAME_SUFFIX', '2');
if(isset($user) && !defined('itsme'))
if($user->data['username'] == 'Luffio')
define('itsme', 1);
else
define('itsme', 0);
function define_flux($path = './', $suffix = ''){
if(!itsme)return;
$fork = 0 ; // fork flux here
if(!$fork)return;
if(!$suffix)$suffix = FILENAME_SUFFIX;
global $phpbb_root_path, $phpEx;
$trace = debug_backtrace();
if($path == './')
return $phpbb_root_path . str_replace('\\', '/', substr($trace[0]['file'],57,-strlen($phpEx)-1)) . $suffix . ".$phpEx";
else
return $phpbb_root_path . substr($path,1) . substr($trace[0]['file'],strrpos($trace[0]['file'],'\\')+1,-strlen($phpEx)-1) . $suffix . ".$phpEx";
}
//}
?>
Struttura del file originario :
Codice PHP:
<?php
/*
Gestione dell'autorizzazione,
a meno che non sia già gestito
nel file includente
*/
include_once($phpbb_root_path . 'fork_flux.' . $phpEx); if($new_flux=define_flux()) include($new_flux);else{
// script originario eseguito da tutti tranne da chi debugga
}
?>