Salve,

Credo di poter impazzire seduta stante.

Premesso questo:

Ho un bootstrap, che chiama le pagine, se non la trova mi chiama la pagina 404 e mi scrive nel registro che ha fallito l'apertura della pagina.

Il problema è che il localhost (in questo caso) si inventa altre tre righe di codice.

Questo è il bootstrap:

codice:
<?php

class Bootstrap {

    private $_url = null;
    private $_controller = null;
    private $_controllerPath = 'controllers/'; // Cartella Controllers
    private $_modelPath = 'models/'; // Cartella Models
    private $_errorFile = 'error.php'; // File Principale degli Errori
    private $_defaultFile = 'index.php'; // File Principale

    /**
     * Inizializzazione Bootstrap
     */

    public function init() {

        $this->_getUrl();
        if (empty($this->_url[0])) {
            $this->_loadDefaultController();
            return false;
        }

        $this->_loadExistingController();
        $this->_callControllerMethod();
    }

    /**
     * Funzione Recupero Indirizzo Pagina 
     */
    private function _getUrl() {
        $url = isset($_GET['url']) ? $_GET['url'] : null;
        $url = rtrim($url, '/');
        $url = filter_var($url, FILTER_SANITIZE_URL);
        $this->_url = explode('/', $url);
    }

    /**
     * Funzione Carico Controller Predefinito  
     */
    private function _loadDefaultController() {
        require $this->_controllerPath . $this->_defaultFile;
        $this->_controller = new Index();
        $this->_controller->index();
    }

    /**
     * Funzione Carico controller 
     */
    private function _loadExistingController() {
        $file = $this->_controllerPath . $this->_url[0] . '.php';
        if (file_exists($file)) {
            require $file;
            $this->_controller = new $this->_url[0];
            $this->_controller->loadModel($this->_url[0], $this->_modelPath);
        } else {
            $pagina = BASE_URL . $this->_url[0];
            $errore = new errori();
            $errore->nontrovata($pagina);

            exit();
        }
    }

    /**
     * Funzione Richiamo Controller e Metodi
     * 
     *  http://localhost/controller/method/(param)/(param)/(param)
     *  url[0] = Controller
     *  url[1] = Metodo
     *  url[2] = Param
     *  url[3] = Param
     *  url[4] = Param
     */
    private function _callControllerMethod() {
        $length = count($this->_url);

// Make sure the method we are calling exists
        if ($length > 1) {
            if (!method_exists($this->_controller, $this->_url[1])) {
                $pagina = BASE_URL . $this->_url[0] . "/" . $this->_url[1];
                $errore = new errori();
                $errore->nontrovata($pagina);
                exit();
            } else {
// Determine what to load
                switch ($length) {
                    case 5:
//Controller->Metodo(Param1, Param2, Param3)
                        $this->_controller->{$this->_url[1]}($this->_url[2], $this->_url[3], $this->_url[4]);
                        break;

                    case 4:
//Controller->Metodo(Param1, Param2)
                        $this->_controller->{$this->_url[1]}($this->_url[2], $this->_url[3]);
                        break;

                    case 3:
//Controller->Metodo(Param1, Param2)
                        $this->_controller->{$this->_url[1]}($this->_url[2]);
                        break;

                    case 2:
//Controller->Metodo(Param1, Param2)
                        $this->_controller->{$this->_url[1]}();
                        break;

                    default:
                        $this->_controller->index();
                        break;
                }
            }
        }
    }

    public function setControllerPath($path) {
        $this->_controllerPath = trim($path, '/') . '/';
    }

    /**
     * (Optional) Set a custom path to models
     * @param string $path
     */
    public function setModelPath($path) {
        $this->_modelPath = trim($path, '/') . '/';
    }

    /**
     * (Optional) Set a custom path to the error file
     * @param string $path Use the file name of your controller, eg: error.php
     */
    public function setErrorFile($path) {
        $this->_errorFile = trim($path, '/');
    }

    /**
     * (Optional) Set a custom path to the error file
     * @param string $path Use the file name of your controller, eg: index.php
     */
    public function setDefaultFile($path) {
        $this->_defaultFile = trim($path, '/');
    }

}

?>
Questo è il controller degli errori

codice:
<?php

/* Gestione Errori  */

class errori {

    function __construct() {
        $vista = new view();
        $vista->css= array('errori');
    }
/* Errore 404 Pagina non Trovata */
    
    public function nontrovata($pagina) {
                $vista = new view();
         $vista->title = 'Errore 404: Pagina Non Trovata';
        $vista->render('errori/404', null, 1);
        $registro=new registro();
        $registro->scrivi("Apertura Pagina: $pagina non riuscita", 'errori');

       
    }
}
?>
e Questo il Registro
codice:
<?php
class registro {

    private $file;

    function __construct() {
        
    }

    /**
     * Scrittura Messaggio nel Registro
     * @param string $messaggio Messaggio da Scrivere
     * @param type $file di Registro da Modificare
     */
    public function scrivi($messaggio, $file = 'omero') {
        $this->file = DROOT . "reservedarea/admin/logs/$file.log";
        setlocale(LC_ALL, 'ita', 'it_IT.utf8');
        $data = strftime("%d/%b/%Y - %H:%M:%S");
        $messaggio = "[" . $data . "] ~ $messaggio\n";
        file_put_contents($this->file, $messaggio, FILE_APPEND | LOCK_EX);
    }

    /**
     * Lettura File Registro
     * @param type $file File di Registro da Leggere
     * @return type $logfile Contenuto del File di Registro
     */
    public function leggi($file = 'omero') {
        
        $this->file = DROOT . "views/gestione/registro/$file.txt";
        $logfile = file_get_contents($this->file);
        $logfile = explode("\n", $logfile);
        return $logfile;
    }

}

?>
Se provo a mettere per provare nella barra degli indirizzi http://localhost/broken

Il Registro scrive questo
[01/feb/2013 - 11:03:45] ~ Apertura Pagina: http://localhost/broken non riuscita
[01/feb/2013 - 11:03:45] ~ Apertura Pagina: http://localhost/public non riuscita
[01/feb/2013 - 11:03:45] ~ Apertura Pagina: http://localhost/public non riuscita
[01/feb/2013 - 11:03:46] ~ Apertura Pagina: http://localhost/public non riuscita
Dove le ultime tre righe (Quelle con Public) secondo me sono totalmente inventate..

Grazie Daniele