Запуск Codeigniter через CLI выводит корень сайта вместо ожидаемого результата - PullRequest
11 голосов
/ 06 октября 2011

Я следую этому руководству по запуску Codeigniter через CLI. Я сделал все, что они сделали (скопировал и вставил) Теперь, когда я запускаю эту команду, она не выполняет то, что ожидается, за исключением того, что выводит содержимое индекса сайта.

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

Вывод, который я получаю, является источником HTML страницы индекса, например, http://localhost/code.

Ожидаемый результат должен быть

Hello World!

Как мне добиться этого, чтобы заставить его работать?

Ответы [ 6 ]

9 голосов
/ 10 октября 2011

попробуйте это:

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

или

php index.php controller function param1 param2 param3 etc

также опубликуйте содержимое переменной $ _SERVER и значение переменной 'uri_protocol' из config.php.

$ config ['uri_protocol'] должно быть 'AUTO'

5 голосов
/ 27 ноября 2012

Для меня это было решено путем изменения :

$config['uri_protocol'] = 'AUTO' 

в основном конфигурационном файле.

Я ранее изменил его на

'REQUEST_URI'

который не работает с CLI, по-видимому.

1 голос
/ 20 мая 2013

Я знаю, что этот вопрос старый и уже был дан ответ, но для меня и других выбранный ответ не работает.То, что я нашел для работы, это просто использование wget.Прежде чем вы проголосуете за меня, потому что вы ищете что-то, что не позволяет внешним посетителям, выслушайте меня!

Если вы используете wget в сочетании с $this->input->ip_address();, вы можете гарантировать, что единственная машина, получающая доступВаш скрипт - это ваш собственный веб-сервер.Это не так хорошо, как возможность локально вызывать файл с помощью php index.php controller function, но это запасной вариант.

Вот то, что я создал, которое работало в течение нескольких месяцев без проблем:

  1. Создайте каталог где-нибудь на вашем сервере, который вы можете просто использовать в качестве блокнота для временных файлов, созданных wget.Я создал папку с именем cron на один уровень ниже папки public_html.

    ex./home/myuser/cron

  2. Создайте команду cron.Вы можете объединять команды в команды, используя &&.

    i.cd /home/myuser/cron && - перейти в каталог с нулями

    ii.wget http://www.site.com/cron/foo && - wget ваш файл

    iii.rm -f foo - Удалите загруженный файл "foo" из вашего рабочего каталога

  3. Ваша последняя команда будет выглядеть примерно так:

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

  4. Убедитесь, что IP-адрес для доступа к файлам cron равен 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();
    
        }
    
    }
    

Внимание: убедитесь, что выполностью понять последствия rm -f.Это может иметь интересные последствия, если вы не предоставите правильный файл.Если у вас есть свободное время, вы можете отказаться от удаления файла и просто вручную периодически удалять все файлы с нулями cron.

1 голос
/ 19 января 2013

Это сработало для меня - найдено на http://www.daharveyjr.com/codeigniter-cli-command-line-interface/

$config['uri_protocol'] = 'CLI';

Затем я запускаю вот так

php index.php controller/function/parameter
1 голос
/ 10 октября 2011

Вывод, который я получаю, - это исходный HTML-код страницы индекса, например, http://localhost/code.

Вы получили ошибку при маршрутизации, ваш новый пример контроллера CLI не запущен, нодругой контроллер. Трудно сказать, какую ошибку вы испытываете при маршрутизации, поскольку вы не показали весь код.

0 голосов
/ 23 ноября 2014

Хорошо, извините, но здесь на этой странице https://ellislab.com/codeigniter/user-guide/general/cli.html

Они не указали, находится ли корневой путь к папке, в которую мы помещаем кодировщик или папку контроллеров.Я много искал по этой проблеме.Я пробовал разные вещи, а потом обнаружил, что.

перед этим установите PHP в переменные среды PATH { Запустите файл php в windows CMD }

после настройки среды PATHпеременные

  1. перейти к cmd
  2. cd путь, куда вы положили codeigniter (т.е. CI /)
  3. php index.php / tools / message

вы получите

Hello World!

на вашем экране cmd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...