У меня есть приложение ZF2, работающее с веб-сервера должным образом. Мне нужно выполнить некоторые действия из командной строки, потому что я хочу выполнить запланированную задачу (задания cron).Runnig Zend Framework 2 действие с консоли не работает
Итак, я нашел эти полезные ссылки: Zend Framework's official document, Samsonasik's blog. Я начал с добавления консольного маршрута на module.config.php в модуле GeneratePdf. Вот сегмент консольного маршрута.
'console' => array(
'router' => array(
'routes' => array(
'generate' => array(
'options' => array(
'route' => 'generate all [--verbose|-v]',
'defaults' => array(
'__NAMESPACE__' => 'GeneratePdf\Controller',
'controller' => 'GeneratePdf',
'action' => 'generateAll'
),
),
),
)
)
),
У меня есть действие на классе контроллера GeneratePdf, вот сегмент код этого действия:
public function generateAllAction() {
die('Is it working?');
set_time_limit(150000);
// reading directory
$d = dir('public/pdf/');
$files = array();
while (($file = $d->read()) !== false) {
$files [] = $file;
}
$d->close();
Я не включил весь код выше действий, поскольку он имеет много линий. Он правильно работает из веб-браузера.
Чтобы запустить из консоли, я вошел в этой команде в моем убунте 13.10 в терминале:
php public/index.php generate all -v
Я получил кучу трассировки стеки ошибок на моем терминале:
PHP Notice: Undefined index: APPLICATION_ENV in /var/www/zf2-reporting/publi/index.php on line 11
PHP Stack trace:
PHP 1. {main}() /var/www/zf2-reporting/public/index.php:0
PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /var/www/zf2-reporting/module/Application/Module.php on line 93
PHP Stack trace:
PHP 1. {main}() /var/www/zf2-reporting/public/index.php:0
PHP 2. Zend\Mvc\Application->run() /var/www/zf2-reporting/public/index.php:32
PHP 3. Zend\EventManager\EventManager->trigger() /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php:290
PHP 4. Zend\EventManager\EventManager->triggerListeners() /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:207
PHP 5. call_user_func() /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:468
PHP 6. BjyAuthorize\Guard\Controller->onDispatch() /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:468
PHP 7. Zend\EventManager\EventManager->trigger() /var/www/zf2-reporting/module/BjyAuthorize/src/BjyAuthorize/Guard/Controller.php:176
PHP 8. Zend\EventManager\EventManager->triggerListeners() /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:207
PHP 9. call_user_func() /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:468
PHP 10. Application\Module->Application\{closure}() /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:468
PHP 11. Zend\ServiceManager\ServiceManager->get() /var/www/zf2-reporting/module/Application/Module.php:44
PHP 12. Zend\ServiceManager\ServiceManager->create() /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:480
PHP 13. Zend\ServiceManager\ServiceManager->doCreate() /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:556
PHP 14. Zend\ServiceManager\ServiceManager->createFromFactory() /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:597
PHP 15. Zend\ServiceManager\ServiceManager->createServiceViaCallback() /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:984
PHP 16. call_user_func() /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:852
PHP 17. Application\Module->Application\{closure}() /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:852
PHP 18. date() /var/www/zf2-reporting/module/Application/Module.php:93
PHP Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.' in /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/Log/Logger.php:399
Stack trace:
#0 /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/Log/Logger.php(399): DateTime->__construct()
#1 /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/Log/Logger.php(451): Zend\Log\Logger->log(2, Object(BjyAuthorize\Exception\UnAuthorizedException), Array)
#2 /var/www/zf2-reporting/module/Application/Module.php(44): Zend\Log\Logger->crit(Object(BjyAuthorize\Exception\UnAuthorizedException))
#3 [internal function]: Applicat in /var/www/zf2-reporting/vendor/zendframework/zendframework/library/Zend/Log/Logger.php on line 399
Он бросает undefined index в супер-глобальной переменной $ _SERVER "APPLICATION_ENV" в файле index.php. Я определил среду приложения в файле виртуального хоста моего сайта. Он правильно работает в браузере. Если я переключу среду приложения, она будет работать. Другой проблемой является PHP Warning: date().
Я правильно определил дату в своем php.ini. Вот оно:
date.timezone = Asia/Kathmandu
Хотя это не большая проблема, я могу передать дату, используя эту функцию на index.php:
date_default_timezone_set("Asia/Kathmandu");
Я также попытался установить APPLICATION_ENV прямо в index.php по следующий фрагмент кода:
if(!isset($_SERVER['APPLICATION_ENV'])){
$_SERVER['APPLICATION_ENV'] = 'development';
}
Когда я снова огонь эту команду: PHP общественности/index.php генерировать все -v
У меня нет вывода в терминале. И он не печатает этот текст: «Он работает?» который находится в функции die первой строки моего файла действия. Я полностью путаюсь с выходом. Отлаживать нечего. Я имею в виду, что это не вызывает никаких ошибок, поэтому как я могу его отладить.
Я совершенно не знаю, как передать APPLICATION_ENV из командной строки или могут быть другие варианты его установки. Я также попытался установить путь в файле bashrc, но он тоже не работает.
Я думаю, что рассмотрел все необходимые разделы кода/ошибки в этом вопросе. Если что-то не хватает, пожалуйста, скажите мне. :)
Спасибо.
Привет Foozy, я экспортировал APPLICATION_ENV, установить часовой пояс кли php.ini и последний one: 'action' => 'generate-all'. Эти предупреждения ушли, но все же он показывает пустой вывод. Есть ли еще что-то, что мне нужно проверить, пожалуйста, предоставьте меня. Спасибо – regeint
Что вы подразумеваете под пустым выпуском? Ваша диспетчеризация generateAllAction? – edigu
Процесс не достигает режима cli generateAllAction, но его можно получить из веб-браузера. – regeint