Запуск Codeigniter через CLI выводит корневой сайт веб-сайта вместо ожидаемого результата
Я следую этому руководству по запуску Codeigniter через CLI. Я выполнил все, что они сделали (скопировал и вставил) сейчас, когда я запускаю эту команду, он не делает того, что ожидается, за исключением того, что выводит содержимое индекса веб-сайта.
$ cd /Users/MyUsername/Sites/code
$ php index.php tools message
Выход, который я получаю, является источником HTML-страницы индекса, например. http://localhost/code
.
Ожидаемый результат должен быть
Hello World!
Как я могу добиться этого, чтобы он работал?
Ответы
Ответ 1
попробуйте следующее:
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'
Ответ 2
Для меня это было разрешено путем изменения:
$config['uri_protocol'] = 'AUTO'
в главном файле конфигурации.
Я ранее менял его на
'REQUEST_URI'
который не работает с CLI, видимо.
Ответ 3
Выход, который я получаю, является источником HTML-страницы индекса, например. http://localhost/code
.
У вас есть ошибка с вашей маршрутизацией, ваш новый контроллер CLI не запускается, а другой контроллер. Какую ошибку у вас с вашей маршрутизацией трудно сказать, так как вы не указали весь свой код.
Ответ 4
Это сработало для меня - найдено в http://www.daharveyjr.com/codeigniter-cli-command-line-interface/
$config['uri_protocol'] = 'CLI';
Затем я запускаю как это
php index.php controller/function/parameter
Ответ 5
Я знаю, что этот вопрос старый и уже был дан ответ, но для меня и для других выбранный ответ не работает. То, что я нашел для работы, просто использует wget
. Прежде чем опустить меня, потому что вы ищете что-то, что не позволяет внешним посетителям, выслушайте меня!
Если вы используете wget
в сочетании с $this->input->ip_address();
, вы можете убедиться, что единственный доступ к вашему script - это ваш собственный веб-сервер. Это не так хорошо, как возможность локально вызывать файл с помощью 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.
Ответ 6
Хорошо, извините, но здесь, на этой странице https://ellislab.com/codeigniter/user-guide/general/cli.html
Они не упомянули, является ли корневой путь в папке, куда мы помещаем папку codeigniter или controllers. Я много искал по этой проблеме. Я пробовал разные вещи, а затем нашел это.
до этого установите PHP на переменные среды PATH
{Запустить php файл в окнах CMD}
после установки переменных среды PATH
- перейти к cmd
- cd путь, в который вы помещаете codeigniter (i.e CI/)
- php index.php/tools/message
вы получите
Hello World!
на вашем экране cmd.