2016-07-22 9 views
1

Ich schreibe eine cron-Job-Funktion und mein Projekt baut auf CodeIgniter framework nennen. Im Folgenden ist meine Controller-Klasse (Cron.php) in meinem Authentifizierungsserver vorhanden.Unable CodeIgniter-Controller-Funktion von der Kommandozeile

class Cron extends CI_Controller { 

    public function log_update() { 

     $opts = array('http' => 
      array(
       'method' => 'GET', 
       'timeout' => 10 
     ) 
    ); 
     $context = stream_context_create($opts); 

     $url = "http://lamp.co.uk/project/data_controller/get_log_update"; 

     $contents = file_get_contents($url, TRUE, $context); 

     var_dump($contents); 
    } 
} 

Und Folgende ist meine Data_controller Klasse in meinem Projekt-Server.

class Data_controller extends MY_Controller { 

public function __construct() { 
    parent::__construct(); 
    echo "hi "; 
} 

public function get_log_update() { 
    echo "welcome"; 
} 

}

Wenn ich php index.php cron log_update von Auth Server-Befehlszeile ausgeführt wird, nur die Zeichenfolge "hallo" wird anstelle von "hallo willkommen" angezeigt.

Aber es funktioniert, wenn ich $this->get_log_update() innerhalb des Data_controller Konstruktor aufrufen und auch, wenn ich Zugriff direkt die URL aus dem Browser

Habe ich Dummheiten gemacht, oder gibt es ein größeres Problem.

+0

was ist, wenn u versuchen, Adresse von Browserleiste zu bekommen? – siddhesh

+0

@siddhesh Sorry, ich bekomme nur "hi" wenn ich auf die URL von der Browserleiste zugreife. – DhiwaTdG

+0

Warum erstreckt sich Data_controller von MY_Controller, aber der Controller, der funktioniert, erstreckt sich von CI_Controller? – chugadie

Antwort

0

Dies hat wahrscheinlich mit einem CLI-Problem zu tun.

Zuerst sehen, was passiert, wenn man php-cli index.php cron log_update anstelle von php index.php cron get_log_update() (fügen Sie einfach -cli).

Dann, wenn das nicht funktioniert, versuchen Sie, Ihre echo auf eine if (is_cli()) Anweisung zu wickeln und sehen was passiert. Versuchen Sie echo "inside cli" und einen weiteren echo "not cli" auf einem anderen zu diesem wenn, um mehr Hinweise zu bekommen, was los ist.

Bitte lassen Sie mich wissen, wenn dies geholfen hat.

EDIT hier ist ein funktionierendes Beispiel mit is_cli:

class Rutinas extends CI_Controller { 

function __construct() 
{ 

    parent::__construct(); 
    $this->load->database(); 
    // html y url autoloaded 

    if (is_cli()) { 
     $this->load->model('Trips_model'); 
     echo "ejecutando cronjob...\r\n"; 
    } else { 
     echo "creo que has perdido el camino..."; 
    } 
} 

//redirect if needed, otherwise display the user list 
function index() 
{ 
    if (is_cli()) 
    { 
     $viajes_por_archivar = $this->Trips_model->trips_to_update(); 
     echo "Viajes archivados:\t".$update_past_trips_result; 
     echo "\r\n"; 
     echo "Acuerdos archivados:\t".$update_lost_deals_result; 
    } else { 
     echo " en el index"; 
     // $this->output->enable_profiler(TRUE); 
     // phpinfo(); 
    } 
} 
} 
+0

'php-cli' hat nicht funktioniert und beim Ausprobieren' is_cli() 'gab es einen fatalen Fehler" undefined function ". Ich ersetzte es mit 'is_cli_request()' wie per Google, was auch zu dem gleichen Fehler führte. Dann habe ich '$ this-> input-> is_cli_request()' gefunden, das spezifisch für CodeIgniter ist und es "innerhalb von cli" anzeigt. Endlich habe ich mit 'php -cli' ausgeführt und es funktionierte aber nur" hi "statt" hi welcome ". – DhiwaTdG

+0

Das ist der richtige Track. Könnten Sie Ihren gesamten Code mit $ this-> input-> is_cli_request() und auch mit Ihrer neuesten Cron-Anweisung posten? Stellen Sie außerdem sicher, dass Sie den vollständigen Pfad zu php-cli verwenden. – zJorge

+0

@DhiwaTdG ist nur ein Beispiel zu meiner Antwort hinzugefügt. Ich hoffe, das funktioniert als Referenz. Fühlen Sie sich frei, um Ihren Code zu veröffentlichen, damit ich darüber gehen kann. – zJorge