2011-10-06 9 views
11

Sto seguendo this tutorial sull'esecuzione di Codeigniter tramite la CLI. Ho eseguito tutto ciò che hanno fatto (copiato e incollato) ora quando eseguo questo comando, non fa ciò che ci si aspetta tranne che emette il contenuto dell'indice del sito web.L'esecuzione di Codeigniter tramite CLI genera la radice del sito Web anziché il risultato previsto

$ cd /Users/MyUsername/Sites/code 
$ php index.php tools message 

L'output che ottengo è la sorgente HTML della pagina indice, ad es. http://localhost/code.

Il risultato atteso dovrebbe essere

Hello World! 

Come posso ottenere questo per farlo funzionare?

+0

Qual è la versione di CodeIgniter? – Vikk

+0

La mia versione è 2.0.3. – MacMac

+1

E quando accedi a strumenti/messaggi nel browser, ottieni "Hello World!" ? – imm

risposta

9

provare questo:

php index.php/controller/function/param1/param2/param3 etc 

o

php index.php controller function param1 param2 param3 etc 

anche, inviare il contenuto del vostro $ _SERVER var e il valore della variabile 'uri_protocol' dal config.php.

$ config [ 'uri_protocol'] dovrebbe essere 'AUTO'

+4

Ho il problema simile, ma quando uso un 'php index.php/tools/messaggio 'Ho' Nessun file di input specificato. error – Mikhail

+0

Mikhail, ho lo stesso problema di te. Hai trovato una soluzione? –

+0

'php index.php/tools/message' non funziona quando eseguo' docker exec', devo cambiare $ config ['uri_protocol'] per essere 'AUTO'. – zx1986

1

L'output che ottengo è la sorgente HTML della pagina indice, ad es. http://localhost/code.

Si è verificato un errore nel routing, il nuovo controller CLI di esempio non viene attivato, ma un altro controller. L'errore che si ha con il routing è difficile da dire, poiché non hai mostrato l'intero codice.

5

Per me questo è stato risolto modificando :

$config['uri_protocol'] = 'AUTO' 

nel file di configurazione principale.

precedenza avevo cambiato per

'REQUEST_URI' 

che non funziona con CLI a quanto pare.

+0

Grazie! Questo lo ha fatto esattamente per me. – fool4jesus

+0

Cercavo di eseguire da cli con uri_protocol impostato su "PATH_INFO" non funzionava, quindi cambiarlo in "AUTO" lo ha fatto per me. Grazie! –

1

So che questa domanda è vecchia ed è già stato risposto, ma per me e gli altri, la risposta selezionata non funziona. Quello che ho trovato per funzionare è solo usando wget. Prima di votare votarmi perché stai cercando qualcosa che non permetta visitatori esterni, ascoltami!

Se si utilizza wget in combinazione con $this->input->ip_address(); è possibile assicurarsi che l'unica macchina che accede al proprio script sia il proprio server web. Non è buono come essere in grado di chiamare il file localmente usando php index.php controller function, ma è un fallback.

Ecco cosa ho creato, che ha lavorato per un paio di mesi senza alcun problema:

  1. Creare una directory da qualche parte sul server che si può semplicemente usare come appunti per i file temporanei creati da wget. Ho creato una cartella denominata cron un livello sotto la cartella public_html.

    ex. /home/myuser/cron

  2. Costruisci il tuo comando cron. È possibile raggruppare i comandi utilizzando &&.

    i. cd /home/myuser/cron && - passare alla directory zero

    ii. wget http://www.site.com/cron/foo && - wget your file

    iii. rm -f foo - Rimuovere il file scaricato "pippo" dalla directory zero

  3. Il comando finale sarà simile a questa:

    cd /home/myuser/cron && wget http://www.site.com/cron/foo && rm -f foo

  4. Verificare che l'indirizzo IP accedere ai file cron è uguale webserver di IP:

    <?php defined('BASEPATH') OR exit('No direct script access allowed'); 
    
    class Cron extends MY_Controller { 
    
        public function __construct() 
        { 
    
         parent::__construct(); 
    
         // this controller can only be called from the IP xxx.xxx.xxx.xxx 
         if ($this->input->ip_address() !== 'xxx.xxx.xxx.xxx'){ 
    
          show_error('Direct access is not allowed'); 
    
         } 
    
        } 
    
        function foo($bar = 'bar') 
        { 
    
         echo $this->input->ip_address(); 
    
        } 
    
    } 
    

Importante: assicurarsi di comprendere appieno gli effetti di rm -f. Può avere conseguenze interessanti se non si fornisce il file corretto. Se hai del tempo libero, puoi scegliere di rimuovere il file e rimuovere manualmente tutti i file cron scratch periodicamente.

+1

Sì, è perfetto per le persone che vogliono usare 'wget'. Si noti che è possibile usare '--delete-after' per cancellare la pagina scaricata dopo aver eseguito' wget'. – MacMac

+0

hmm, non ne ero a conoscenza. Avrei dovuto leggere prima la pagina man. Probabilmente è meglio che usare rm. – VictorKilo

0

Ok dispiace dirlo, ma qui in questa pagina https://ellislab.com/codeigniter/user-guide/general/cli.html

Essi non ha menzionato se il percorso principale della cartella in cui abbiamo posto la CodeIgniter o la cartella controller. Ho cercato molto su quel problema. Ho provato diverse cose e poi l'ho trovato.

prima di quello fissato PHP al PATH variabili d'ambiente {Run php file in windows CMD}

dopo aver impostato le variabili d'ambiente PATH

  1. andare cmd
  2. cd il percorso in cui si mette codeigniter (cioè CI /)
  3. php index.php/tools/message

riceverai

Hello World! 

sul tuo schermo cmd.

Problemi correlati