CodeIgniter: запустить скрипт из командной строки, если контроллер находится внутри папки? - PullRequest
4 голосов
/ 14 февраля 2012

Как указано здесь: http://codeigniter.com/user_guide/general/cli.html

Страница типа: http://www.example.com/myController/myFunc/myParam

может быть запущен в командной строке как:

php index.php myController myFunc myParam

У моего настроенного codeignitor есть несколько папок для группировки контроллеров, скажем так:

myFolder -> myPageController
         -> myAdminController

Итак, URL становится:

http://www.example.com/myFolder/myController/myFunc/myParam

Как мне вызвать ту же самую вещь в CLI? Что-то вроде:

php index.php "myFolder/myController" myFunc myParam

Кажется, не работает.

Ответы [ 3 ]

17 голосов
/ 14 февраля 2012

Вы можете попробовать:

php index.php myFolder myController myFunc myParam1 myParam2 ...
1 голос
/ 20 ноября 2012

Обратите внимание, что метод индекса в файле класса необходим для правильной работы в CLI, в противном случае codeigniter выдаст ошибку 404.

;)

0 голосов
/ 19 ноября 2018

Для CodeIgniter 1.7 (если кому-то не повезло с поддержкой устаревшего проекта), здесь есть упомянутое решение :

Запуск CodeIgniter из командной строки

Цель

Как и говорится в заголовке, наша цель - запускать приложения CodeIgniter из командной строки. Это необходимо для создания заданий cron или выполнения более интенсивных операций, чтобы у вас не было ограничений по ресурсам веб-скрипта, таких как максимальное время выполнения.

Вот как это выглядит на моей локальной машине с Windows: Screenshor from the original post

Приведенный выше код будет похож на вызов этого URL:

http://www.example.com/hello/world/foo

Взломать

Создайте файл «cli.php» в корне вашей папки CodeIgniter:

if (isset($_SERVER['REMOTE_ADDR'])) {
    die('Command Line Only!');
}



set_time_limit(0);

$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = $argv[1];

require dirname(__FILE__) . '/index.php';

Если вы работаете в среде Linux и хотите, чтобы этот скрипт выполнялся самостоятельно, вы можете добавить его в качестве первой строки в cli.php:

#!/usr/bin/php

Если вы хотите, чтобы конкретный контроллер был только командной строкой, вы можете заблокировать веб-вызовы в конструкторе контроллера:

class Hello extends Controller {

    function __construct() {
        if (isset($_SERVER['REMOTE_ADDR'])) {
            die('Command Line Only!');
        }
        parent::Controller();
    }

    // ...

}
...