Запуск сниппета по CRON

Есть сниппет импорта из XML файла, потребовалось автоматизировать выгрузку по крону, как это проще сделать?
Пытаюсь сделать так, создал файлик в корне:
<?php
define('MODX_API_MODE', true);
include_once(dirname(__FILE__)."/index.php");
$modx->runSnippet('XMLimport-newflat');

при попытке запуска пишет «Please disable register_globals!»
отрубить register_globals хостер не дает, отсылает к .htaccess, но на крон он не влияет.
вопрос: как правильно запустить сниппет?
  • avatar
  • 1
  • 0
  • 2264

20 комментариев

avatar
Создаю php файл и в нем уже

$_SESSION['mgrRole'] = 1; //чтобы корректно работал MODX API
$path = 'полный путь';
define('MODX_API_MODE', true);
include_once($path . "public_html/index.php");
global $modx;
$modx->db->connect();
if (empty ($modx->config)) {
    $modx->getSettings();
}


ну и дальше $modx->runSnippet
Комментарий отредактирован 2017-04-20 11:47:53 пользователем Grinyaha
avatar
ой-ёй, а можно читабельно отредактировать, а то очень хочется увидеть)
avatar
о спс
avatar
Да оно само что-то испортилось после редактирования :( пришлось все заново писать.
avatar
все равно ругается на register_globals
avatar
А с консоли если попробовать запустить?
avatar
с консоли то же самое пишет «Please disable register_globals!»
avatar
* [GitHub:#32e27ad] — [F] Added message «Please disable register_globals!» (Deesen)
видимо что-то с этим связано
avatar
Выпилить вот это, если сильно мешает :)

Если же остальной сайт работает, то сделать какую-то страницу типа ajax.html, на шаблоне _blank и разместить в ней вызов сниппета. Возможно, поможет :)
avatar
выпилил, все заработало, не ясно почему на php7 ini_get('register_globals') отдает true, наверное туда же надо вписать проверку версии php<5.4
avatar
Вот тут была проблема — там же и решение — и что-то мне кажется, что это верный путь, ибо значение off оно ведь тоже отдаст true — т.е. надо смотреть не true/false, а отдаваемые значения на хостинге, а это могут быть и on и off и оба «трушные» :)
avatar
при запуске файла через браузер все нормально отрабатывает, а через крон упирается в «Please disable register_globals!»
avatar
Думаю потому что для PHP CLI используется другой файл настроек php.ini
Кстати — register_globals Удалена в PHP 5.4.0.
Можно обновить PHP и тогда не будет спрашивать.

Установка в начале скрипта ini_set('register_globals', 0); не поможет.
Комментарий отредактирован 2017-04-20 12:43:33 пользователем Redduck
avatar
я уже php 7.0.16 поставил, а оно все равно Please disable register_globals!
avatar
ДА, засада. А ты сделай скрипт который phpinfo() и посмотри пути к php.ini.
avatar
Ошибки с которыми столкнулся:
Fatal error: Uncaught exception 'RuntimeException' with message 'Please, define MODX_BASE_PATH and MODX_BASE_URL on cli mode'
Fatal error: Uncaught exception 'RuntimeException' with message 'Please, define MODX_SITE_URL on cli mode'
Fatal error: Uncaught exception 'RuntimeException' with message 'Please, use trailing slash at the end of MODX_BASE_PATH'

Как вообще запустить сниппет через cron в Modx Evo.
1. Создаем snippet, например с названием MySnip.
2. В корне сайта создаем php файл с названием, например mycron.php
3. В этом файле размещаем следующий код:

<?php
$_SESSION['mgrRole'] = 1; //чтобы корректно работал MODX API
$path = '/home/XXXXXX/yoursite.ru/htdocs/www/';
define('MODX_API_MODE', true);
define('MODX_BASE_PATH', '/home/XXXXXX/yoursite.ru/htdocs/www/');
define('MODX_SITE_URL', 'http://yoursite.ru/');
define('MODX_BASE_URL', 'http://yoursite.ru/');
include_once($path . 'index.php');
global $modx;
if (empty ($modx->config)) {
    $modx->getSettings();
}
$modx->runSnippet('MySnip');

Подробнее тут
avatar
Чтобы подключить MODxAPI всегда хватало вот этого кода в файле в корне сайта:
define('MODX_API_MODE', true);
include_once(dirname(__FILE__) . "/index.php");
$modx->db->connect();
if (empty($modx->config)) {
    $modx->getSettings();
}
//дальше можно делать, что угодно, например сниппет
$out = $modx->runSnippet('MySnip', array());
echo $out;
avatar
Все остальное — какая-то излишняя муть :)
avatar
У меня к сожалению было не достаточно и сыпались вот эти ошибки.
Fatal error: Uncaught exception 'RuntimeException' with message 'Please, define MODX_BASE_PATH and MODX_BASE_URL on cli mode'
Fatal error: Uncaught exception 'RuntimeException' with message 'Please, define MODX_SITE_URL on cli mode'
Fatal error: Uncaught exception 'RuntimeException' with message 'Please, use trailing slash at the end of MODX_BASE_PATH'

Я достал хостера (думал на их стороне проблема) и убил несколько часов чтоб найти решение. Вдруг кому-то поможет.
Modx Evo 1.4.6
PHP Version 7.1.23
avatar
Тут получается дело не совсем в cron, это частный случай. А общий — запуск php из консоли, я так понимаю.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.