2011-10-06 21 views
11

Estoy siguiendo this tutorial al ejecutar Codeigniter a través de la CLI. He hecho todo lo que han hecho (copiado y pegado) ahora cuando ejecuto este comando, no hace lo que se espera, excepto que muestra los contenidos del índice del sitio web.Ejecutando Codeigniter a través de CLI salidas raíz del sitio web en lugar del resultado esperado

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

El resultado que obtengo es la fuente HTML de la página de índice, p. Ej. http://localhost/code.

El resultado esperado debería ser

Hello World! 

¿Cómo puedo lograr esto para hacer que funcione?

+0

¿Cuál es su versión de CodeIgniter? – Vikk

+0

Mi versión es 2.0.3. – MacMac

+1

Y cuando accedes a herramientas/mensaje en el navegador, obtienes "Hello World!" ? – imm

Respuesta

9

probar esto:

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

o

php index.php controller function param1 param2 param3 etc 

también, publicar el contenido de su $ _SERVER var y el valor de la variable 'uri_protocol' de config.php.

$ config [ 'uri_protocol'] debe ser 'AUTO'

+4

Tengo el problema similar, pero cuando uso un 'php index.php/tools/mensaje' Tengo 'No archivo de entrada especificado' error – Mikhail

+0

Mikhail, estoy teniendo el mismo problema que usted. ¿Encontraste una solución? –

+0

'php index.php/tools/message' no funciona cuando ejecuto' docker exec', tengo que cambiar $ config ['uri_protocol'] para que sea 'AUTO'. – zx1986

1

El resultado que obtengo es la fuente HTML de la página de índice, p. Ej. http://localhost/code.

Tiene un error con su enrutamiento, su nuevo controlador CLI de ejemplo no está activado, pero tiene otro controlador. Qué error de tiene con su enrutamiento es difícil de decir, ya que no ha mostrado todo el código.

5

Para mí fue resuelto cambiando:

$config['uri_protocol'] = 'AUTO' 

en el archivo de configuración principal.

había cambiado previamente a

'REQUEST_URI' 

cuales no funciona con CLI al parecer.

+0

¡Gracias! Esto exactamente lo hizo por mí. – fool4jesus

+0

Estaba tratando de ejecutar cli con uri_protocol configurado en "PATH_INFO" no funcionaba entonces, cambiándolo a "AUTO" lo hizo por mí. ¡Gracias! –

1

Sé que esta pregunta es viejo y ya ha sido contestada, pero para mí y para otros, la respuesta seleccionada no funciona. Lo que he encontrado que funciona es solo usar wget. Antes de que me votes porque estás buscando algo que no permita visitantes externos, ¡escúchame!

Si usa wget junto con $this->input->ip_address();, puede asegurarse de que la única máquina que accede al script sea su propio servidor web. No es tan bueno como poder llamar el archivo localmente usando php index.php controller function, pero es una alternativa.

Esto es lo que he creado, que ha trabajado durante unos meses sin descendencia:

  1. Crear un directorio en algún lugar de su servidor que sólo se puede utilizar como un bloc de notas para los archivos temporales creados por wget. Creé una carpeta llamada cron un nivel debajo de mi carpeta public_html.

    ex. /home/myuser/cron

  2. Construya su comando cron. Puede encadenar comandos usando &&.

    i. cd /home/myuser/cron && - mover a su directorio cero

    ii. wget http://www.site.com/cron/foo && - administre su archivo

    iii. rm -f foo - Extraer el archivo descargado "foo" de su directorio cero

  3. su comando final se verá algo como esto:

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

  4. Compruebe que la dirección IP para acceder a los archivos de cron es igual a su servidor web de 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: asegúrese de comprender completamente los efectos del rm -f. Puede tener consecuencias interesantes si no proporciona el archivo correcto. Si tiene tiempo libre, puede optar por no eliminar el archivo y simplemente eliminar manualmente todos los archivos cron scratch periódicamente.

+1

Sí, eso es genial para las personas que quieren usar 'wget'. Tenga en cuenta que puede usar '--delete-after' para eliminar la página descargada después de ejecutar' wget'. – MacMac

+0

hmm, no estaba al tanto de eso. Debería haber leído la página del hombre primero. Eso es probablemente mejor que usar rm. – VictorKilo

0

Ok siento decirlo pero aquí en esta página https://ellislab.com/codeigniter/user-guide/general/cli.html

No mencionaron si la ruta raíz de la carpeta en la que colocamos el CodeIgniter o la carpeta de controladores. Busqué mucho sobre ese tema. Probé cosas diferentes y luego encontré eso.

antes de ese conjunto de PHP para las variables de entorno PATH {Run php file in windows CMD}

después de establecer las variables de entorno PATH

  1. ir a cmd
  2. cd la ruta donde se pone CodeIgniter (es decir, CI /)
  3. php index.php/tools/message

obtendrá

Hello World! 

a su pantalla cmd.

Cuestiones relacionadas