Intereting Posts
Как получить данные из ajax в php Получить идентификатор пользователя при входе пользователя в систему с использованием Username & Password Проверьте, успешна ли update_batch () в CodeIgniter Почему я не могу передавать пользовательские сеансы между субдоменами? Преобразование PHP-класса в модуль apache PHPMyAdmin / MySql – добавление поля идентификатора и идентификаторов автопопуляции Как обновить базу данных автоматически после окончания сеанса без обновления на моей странице Папка PHP Sessions: обновите продукт, если он уже является идентификатором сеанса что является хорошим методом для дезинфекции всего массива $ _POST в php? Ошибка сертификата SSL: невозможно получить сертификат локального эмитента при аутентификации с помощью Podio PUSH с использованием PHP, Ajax и Javascript / jQuery? stream_socket_enable_crypto () Ошибка в почтовой программе php Ошибка приращения метрики php? Приоритет оператора concat и идентификатора float '.' (T_CONSTANT_ENCAPSED_STRING, T_DNUMBER) Ошибка Yii Framework / PDO Ошибка CDbCommand не выполнила инструкцию SQL: SQLSTATE

Диспетчер Cron CakePHP 2.0

Я использую CakePHP 2.0 и пытаюсь настроить cronjob для выполнения метода в контроллере. Я с ума сходил, просматривая различные учебники и случайные сайты, чтобы узнать, смогу ли я найти решение.

Ошибка, которую я получаю, такова:

Undefined variable: argc [APP/webroot/cron_dispatcher.php, line 83 

Вот дно файла cron_dispatcher.php в моем каталоге app / webroot / .

 if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) { trigger_error("CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR); } if (isset($_GET['url']) && $_GET['url'] === 'favicon.ico') { return; } else { define('CRON_DISPATCHER',true); if($argc >= 2) { $Dispatcher= new Dispatcher(); $Dispatcher->dispatch($argv[1]); } } 

Я не могу найти, где определены эти переменные ($ argv и $ argc). Они не определены нигде в самом файле dispatcher.php. Я искал Google безрезультатно. Я не уверен на 100%, как работает Диспетчер, но любая помощь была бы весьма признательна. Благодарю.

== ОБНОВЛЕНИЕ Общий хостинг GoDaddy не позволяет вам изменять настройки argc argv.

Solutions Collecting From Web of "Диспетчер Cron CakePHP 2.0"

Если кто-то заинтересован,

В новом CakePHP 2.0.5 вы будете индексировать index.php в папке webroot:

Скопируйте этот файл и назовите его cron_dispatcher.php и поместите его в тот же каталог (webroot)

Вы найдете этот код в самом низу:

 $Dispatcher = new Dispatcher(); $Dispatcher->dispatch(new CakeRequest(), new CakeResponse(array('charset' => Configure::read('App.encoding')))); 

измените нижнюю часть на

 define('CRON_DISPATCHER',true); $Dispatcher = new Dispatcher(); $Dispatcher->dispatch(new CakeRequest($argv[1]), new CakeResponse(array('charset' => Configure::read('App.encoding')))); 

Здесь вы делаете две вещи: устанавливаете CRON_DISPATCHER в true и передаете переменные среды ($ argv [1]).

В своем контроллере добавьте эту строку, прежде чем делать что-либо еще:

 if (!defined('CRON_DISPATCHER')) { $this->redirect('/'); exit(); } 

Это гарантирует, что люди, идущие на сайт yoursite.com/controller/cronaction, не смогут запустить ваш скрипт.

В файле htaccess в webroot добавьте следующее:

 <Files "cron_dispatcher.php"> Order deny,allow Deny from all </Files> 

Это гарантирует, что poeple, идущий на yoursite.com/cron_dispatcher.php, не сможет его запустить.

Теперь настройте работу cron, используя что-то вроде команды:

 php /home/yoursite/public_html/cakephp/app/webroot/cron_dispatcher.php /controller/cronjobaction 

$ argc и $ argv – это переменные среды, заданные в CLI.
Возможно, вам нужно будет проверить свой параметр PHP на register_argc_argv (который НЕ должен быть отключен)

Я не уверен, как вы создали свою работу cron, но как насчет чего-то вроде этого:

 */10 * * * * wget -O - -q "http://localhost/url/to/your/controller/action" 

Разумеется, лучшей идеей может быть создание оболочки для торта и ее запуск в зависимости от ваших потребностей.

Нет необходимости в диспетчере Cron

Существует и никогда не было необходимости создавать диспетчер cron. Единственное, что требуется для использования приложения CakePHP через cron, – это создать консольную команду и вызвать ее:

 */5 * * * * cd /full/path/to/app && Console/cake myshell myparam 

В какой-то момент в прошлом в книге были некоторые плохие советы, которые с тех пор были исправлены .