Я следую этому руководству по запуску Codeigniter через CLI. Я выполнил все, что они сделали (скопировал и вставил) сейчас, когда я запускаю эту команду, она не делает то, что ожидается, за исключением того, что выводит содержимое индекса веб-сайта.
$ cd /Users/MyUsername/Sites/code $ php index.php tools message
Выход, который я получаю, является источником HTML-страницы индекса, например http://localhost/code
.
Ожидаемый результат должен быть
Hello World!
Как я могу добиться этого, чтобы он работал?
попробуй это:
php index.php/controller/function/param1/param2/param3 etc
или
php index.php controller function param1 param2 param3 etc
также опубликуйте содержимое своего $ _SERVER var и значение переменной uri_protocol из config.php.
$ config ['uri_protocol'] должен быть 'AUTO'
Для меня это было разрешено путем изменения :
$config['uri_protocol'] = 'AUTO'
в основном файле конфигурации.
Я ранее менял его на
'REQUEST_URI'
который , очевидно, не работает с CLI.
Выход, который я получаю, является источником HTML-страницы индекса, например
http://localhost/code
.
У вас есть ошибка с вашей маршрутизацией, новый контроллер CLI не запускается, а другой контроллер. Какую ошибку у вас с вашей маршрутизацией трудно сказать, так как вы не указали весь свой код.
Это сработало для меня – найдено по адресу http://www.daharveyjr.com/codeigniter-cli-command-line-interface/
$config['uri_protocol'] = 'CLI';
Затем я бегу так
php index.php controller/function/parameter
Я знаю, что этот вопрос старый и уже был дан ответ, но для меня и для других выбранный ответ не работает. То, что я нашел для работы, просто использует wget
. Перед тем, как опустить меня, потому что вы ищете что-то, что не позволяет внешним посетителям, выслушайте меня!
Если вы используете wget
в сочетании с $this->input->ip_address();
вы можете убедиться, что единственный доступ к вашему скрипту – это ваш собственный веб-сервер. Это не так хорошо, как возможность вызвать файл локально с помощью функции php index.php controller function
, но это резерв.
Вот что я создал, который проработал несколько месяцев без проблем:
Создайте директорию где-нибудь на своем сервере, которую вы можете просто использовать в качестве блокнота для временных файлов, созданных wget. Я создал папку под именем cron
один уровень ниже моей папки public_html
.
ех. /home/myuser/cron
Постройте свою команду cron. Вы можете объединить команды с помощью &&
.
я. cd /home/myuser/cron &&
– перейдите в каталог с нуля
II. wget http://www.site.com/cron/foo &&
– wget ваш файл
III. rm -f foo
– Удалить загруженный файл «foo» из вашего каталога с нуля
Ваша последняя команда будет выглядеть примерно так:
cd /home/myuser/cron && wget http://www.site.com/cron/foo && rm -f foo
Убедитесь, что 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 scratch.
Ок, простите, но здесь, на этой странице https://ellislab.com/codeigniter/user-guide/general/cli.html
Они не упомянули, есть ли корневой путь в папке, куда мы помещаем папку codeigniter или controllers. Я много искал по этой проблеме. Я пробовал разные вещи, а потом нашел это.
до этого установите PHP на переменные среды PATH { Запустите php-файл в Windows CMD }
после установки переменных среды PATH
ты получишь
Hello World!
на вашем экране cmd.