2013-03-04 14 views
5

Dopo aver seguito le istruzioni della guida utente trovate qui: http://ellislab.com/codeigniter/user-guide/general/cli.html Non riesco a eseguire lo script di test tramite riga di comando.Codeigniter Errore riga di comando - Errore irreversibile PHP: Classe 'CI_Controller' non trovato

mio controller che si trova in/var/www/mySite/application/controller/

class Tools extends CI_Controller { 

    public function message($to = 'World') 
    { 
     echo "Hello {$to}!".PHP_EOL; 
    } 
} 

Nel mio browser posso accedere

http://mysite/tools/message/ben 

E la funzione emette correttamente "Ciao ben"

Dal terminale dovrei essere in grado di eseguire:

$ php index.php tools message "Ben"

mio terminale dovrebbe stampare: "Ciao Ben"

Tuttavia ottengo il seguente errore:

PHP Fatal error: Class 'CI_Controller' not found in /var/www/mysite/system/core/CodeIgniter.php on line 233

Il mio server è abbastanza standard; ubuntu LAMP. CodeIgniter è abbastanza standard troppo e non ho alcun problema in esecuzione di script non CI tramite linea di comando

mio PHP binario si trova solo in/usr/bin/php <-This post suggerisce un problema in esecuzione CI direttamente da usr/bin/php , tuttavia, non sto gestendo un servizio PHP condiviso, e non vedo perché questo potrebbe fare la differenza su come PHP esegue uno script CI.

Qualsiasi aiuto o solo un'indicazione su come eseguire il debug di questo sarebbe molto apprezzato.

Grazie in anticipo.

+1

Suppongo che tu stia eseguendo lo script da/var/www/mysite /? – devrooms

+0

Sì, altrimenti otterrei immediatamente un errore "Impossibile aprire il file di input". – Mijahn

risposta

11

Risolto! (parzialmente) il problema era la registrazione degli errori CodeIgniters.

In application/config/config.php, che modifica la seguente proprietà di configurazione:

$config['log_threshold'] = 0; 

Questo disabilita la registrazione, e permette $ php index.php per eseguire.

Se qualcuno può spiegare perché CI mostra questo errore solo su CLI PHP, potrebbe aiutare chiunque abbia questo problema e abbia bisogno di risolverlo con la registrazione degli errori.

0

Questo site dice che per eseguire codeigniter dalla riga di comando, è necessario impostare la variabile $ _SERVER ['PATH_INFO'].

$_SERVER['PATH_INFO'] is usually supplied by php when a web request is made. However, since we are calling this script from the command line, we need to emulate this small part of the environment as a web request.

+0

Grazie, nel collegamento utilizza un documento PHP al di fuori della cartella dell'applicazione CI e carica CI includendo index.php. Ho bisogno di eseguire comandi su un controller CI all'interno della mia applicazione. Ho cambiato il mio $ config ['uri_protocol'] = "PATH_INFO", ma ho ancora lo stesso problema. – Mijahn

2

Per Mijahn:

Ho avuto questo stesso problema, e dopo circa due ore di tracciamento tramite il codice per capire il problema, sembra che ci sia una sorta di conflitto con il caricamento del CI_Controller quando si utilizza la funzione PHP nativa funzione load_class.

Ho risolto questo problema apportando le seguenti modifiche al file Common.php (Hack, lo so).

//$_log =& load_class('Log'); 
require_once('system/libraries/Log.php'); 
$_log = new CI_Log(); 

I miei registri quindi dove creato esattamente come volevo. Spero che questo trucco aiuti.

+0

Per me non erano i problemi di myking della classe Log ma il gestore delle eccezioni in Common.php Quindi ho dovuto modificare di conseguenza il caricamento della classe Exceptions: '// $ _error = & load_class ('Eccezioni', ' nucleo'); require_once ('system/core/Exceptions.php'); $ _error = new CI_Exceptions ('core'); ' – sp00n

3

Per risolvere l'errore "Class 'CI_Controller' non trovato" provare a passare a Application -> Config -> database.php quindi controllare il nome del database.

+0

Capisco, che non hai ancora abbastanza reputazione per postare commenti, ma questa risposta sembra davvero una. Prova ad aggiungere ulteriori dettagli. – arghtype

+0

@sanjeev goel Ci stai indicando nella giusta direzione, ma mi ci vuole un'ora per capire e capire tutto. Nel mio caso il problema è dovuto al driver db dell'elemento della configurazione, poiché il DB sul server locale è stato eliminato dallo sviluppatore del team, quindi l'errore è stato fornito da CI. Ma ovviamente l'errore da CI non è comprensibile. – hi0001234d

+0

.. vedi il database di configurazione. nome del database, nome utente e password devono coincidere. –

0

La risposta fornita in this Stack Overflow post ha funzionato per me.

All'interno system/core/CodeIgniter.php, intorno linea 75, modificare:

set_error_handler('_exception_handler');

a ...

set_exception_handler('_exception_handler');

Altri utenti hanno segnalato che questo ha dato loro un backtrace meglio con cui eseguire il debug del problema sottostante, ma per me questo ha effettivamente eliminato il problema.

Problemi correlati