0 Пользователей и 1 Гость просматривают эту тему.
  • 16 Ответов
  • 600 Просмотров
*

Cristoff

  • Захожу иногда
  • 24
  • 0
Добрый день.

Задача такая, есть Controller компонента в нем есть Action который выполняет какое-то длительное действие.
Это действие нужно выполнять периодически, для этого есть в *nix механизм cron.

Проблема 1: как запустить URL из cron
- тут наверное можно через cURL, но пока не уверен.
И проблема 2, основная: как пройти авторизацию Joomla, чтобы выполнить Action? Или как ее отключить для выполнения из cron.

Action вызывает логику из модели, которая в свою очередь использует другие модели. Перейти от кода Joomla к Native Php проблематично.

Может я не под тем углом смотрю на решение?
*

Aleks.Denezh

  • Практически профи
  • 2806
  • 377
Проблема 1:
ложите файл cron.php в корень, настраиваете на него крон а дальше:
file_get_contents('site.ru?index.php?option=com_you_component&task=action.cron')!
В контроллере controllers/action.php выполнит метод cron

Проблема 2:
1. если вы будете делать запрос ссылкой то у вас там же уже будет подключено ядро, просто сделайте Програмную авторизацию  в методе cron!
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016
*

Cristoff

  • Захожу иногда
  • 24
  • 0
Забыл уточнить, cron нужно использовать к компоненту в приложении administrator не на site.
Я так понял метод контроллера не может выполниться пока не пройдена авторизация. То есть до выполнения метода вообще не дойдет.

Однако, ваши подсказки помогли мне.

Сделал не так красиво как хотелось бы, но работает:
создал файл cron.php
Код: php
//указать логин и пароль для пользователя
//*****************************************************************//
$credentials = array('username' => 'admin', 'password' => 'admin');
//*****************************************************************//

define('_JEXEC', 1);
define('cron', 1);
define('JPATH_BASE', dirname(__FILE__));
define('DS', DIRECTORY_SEPARATOR);
require_once(JPATH_BASE . DS . 'includes' . DS . 'defines.php');
require_once(JPATH_BASE . DS . 'includes' . DS . 'framework.php');
//JFactory::getApplication('administrator')->initialise();
$app = JFactory::getApplication('administrator');

jimport('joomla.user.helper');
//В этом массиве параметры авторизации! в данном случае это установка запоминания пользователя
$options = array('remember' => true);
//выполняем авторизацию
if (JFactory::getApplication()->login($credentials, $options)) {
//    echo 'Вы успешно авторизированны';
//    die();
} else {
    echo "error";
}
require_once 'components/com_catalog/controllers/dump.php';
$d = new CatalogControllerDump();
$d->cron();

в файле dump.php пришлось добавить несколько require_once для моделей, таблиц и тд.

Пока есть проблемы с ограничением памяти, но задача вроде бы решена.


*

Arkadiy

  • Группа развития
  • 5351
  • 440
  • Крепитесь, други.
А я крон на фронтальной части всегда делаю, чтобы отрубить левак - дополнительный пароль в строке запроса.
*

Aleks.Denezh

  • Практически профи
  • 2806
  • 377
Забыл уточнить, cron нужно использовать к компоненту в приложении administrator не на site.
Зачем такой бред, делайте на frontend!
Если для безопасности, то это бред! Ибо тот кто узнает строку к крону и запустит так:
site.ru?index.php?option=com_you_component&task=action.cron , то никакого ущерба сайту не нанесет! Ну выполнится один лишний раз крон.. можно дополнительно параметром передать какой то зашифрованный пароль например:
file_get_contents('site.ru?index.php?option=com_you_component&task=action.cron&pwd='.md5(date('d-m-Y'). 'мой пароль') );
и в начале метода cron
if($_GET['pwd'] !== .md5(date('d-m-Y'). 'мой пароль')) exit;

а вот если так:
site.ru/administrator/?index.php?option=com_you_component&task=action.cron
Так же само выполнит задачи крона, только в этом случае ещё и доступ полный к админке получит! ибо вы сделаете процесс авторизации в автомате! и в браузере он будет заполнен, и гуляй душа...
« Последнее редактирование: 20.06.2016, 11:35:51 от Istaan »
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016
*

Cristoff

  • Захожу иногда
  • 24
  • 0
у меня авторизация проходит до
site.ru/administrator/?index.php?option=com_you_component&task=action.cron
в файле cron.php

а всякий "левак" может отсеять .htaccess или (php_sapi_name() == "cli")

Cron пришел после того как на administrator уже была вся необходимая логика и она там и остается: есть интерфейс взаимодействия, который выполняет то же самое что и крон, только дольше из-за временных ограничений выполнения скрипта. 

Но может вы все и правы, буду пробовать разные варианты.
*

SmokerMan

  • Профи
  • 5333
  • 689
у меня авторизация проходит до
site.ru/administrator/?index.php?option=com_you_component&task=action.cron
в файле cron.php
нормально)
тогда просто делаешь запрос /cron.php и ты авторизован как админ)
*

Aleks.Denezh

  • Практически профи
  • 2806
  • 377
нормально)
тогда просто делаешь запрос /cron.php и ты авторизован как админ)
Та да отличная идея ;D
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016
*

Cristoff

  • Захожу иногда
  • 24
  • 0
жжоте ребята)
Встречный вопрос
как обойти проверку через запрос к /cron.php
Код: php
if(php_sapi_name() == "cli") 
echo "pwned";
else die("access denied")
« Последнее редактирование: 20.06.2016, 16:02:21 от Cristoff »
*

SmokerMan

  • Профи
  • 5333
  • 689
жжоте ребята)
Встречный вопрос
как обойти проверку через запрос к /cron.php
уже ответили выше, вынести контроллер на фронт и запускать его с каким-нибудь ключем
Цитировать
index.php?option=com_you_component&task=action.cron&pwd='.md5(date('d-m-Y'). 'мой пароль') );
тогда не будет никакого головняка с авторизацией
*

Aleks.Denezh

  • Практически профи
  • 2806
  • 377
Зачем вообще проходить процедуру авторизации! Все данные по базе можно разнести без этого! И не использовать проверок и ACL! Это лишнее при кроне!
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016
*

Cristoff

  • Захожу иногда
  • 24
  • 0
Зачем вообще проходить процедуру авторизации! Все данные по базе можно разнести без этого! И не использовать проверок и ACL! Это лишнее при кроне!
Храню информацию о пользователе совершившем действие.
Вообще задача была простая. Выполнить метод из контроллера, можно даже и не из контроллера (модели), не важно. Подключив ядро Joomla все стало возможным.
*

Aleks.Denezh

  • Практически профи
  • 2806
  • 377
Храню информацию о пользователе совершившем действие.
Вообще задача была простая. Выполнить метод из контроллера, можно даже и не из контроллера (модели), не важно. Подключив ядро Joomla все стало возможным.
У вас в кроне в любом случае будет все от одного пользователя выполняться
и вот какая разница сделаете вы авторизацию по вбитому вручную логину и паролю, или сразу подставите нужный ID юзера в скрипте?!
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016
*

Cristoff

  • Захожу иногда
  • 24
  • 0
Разница в том, о чем я уже говорил раньше, что логика крона может работать и из админки, а там могут быть разные пользователи.
*

Aleks.Denezh

  • Практически профи
  • 2806
  • 377
Разница в том, о чем я уже говорил раньше, что логика крона может работать и из админки, а там могут быть разные пользователи.
И это решается одной строкой..
$userId = JFactory::getUser()->guest ? 555 : JFactory::getUser()->id;
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016
*

Cristoff

  • Захожу иногда
  • 24
  • 0
Ребята о чем речь?)
Успокойтесь. Вопрос решен.
Все бы так помогали в решении вопросов. На тостере ответа не нашел, решил попытать удачи в этом форуме и результат не заставил себя ждать.

Я вроде бы решил все траблы с Joomla во втором посте этого вопроса, за это отдельное спасибо Istaan.

Тему можно закрывать.

*

Aleks.Denezh

  • Практически профи
  • 2806
  • 377
На тостере ответа не нашел..
Вы бы ещё на микроволновке поискали ;D
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Справочник по классам API Joomla 3 и Joomla 2

Автор AlexeyGal

Ответов: 41
Просмотров: 1108
Последний ответ 20.09.2017, 00:50:17
от AlexeyGal
Переделать запросы к БД под Joomla

Автор Glog

Ответов: 3
Просмотров: 162
Последний ответ 03.07.2017, 17:53:28
от Glog
Поддержка Joomla в PhpStorm

Автор b2z

Ответов: 51
Просмотров: 5481
Последний ответ 28.12.2016, 23:31:39
от b2z
Звязь с базой через php

Автор Frulin

Ответов: 18
Просмотров: 373
Последний ответ 20.12.2016, 15:06:55
от b2z
Joomla search tools

Автор jitendra

Ответов: 2
Просмотров: 204
Последний ответ 15.12.2016, 17:13:15
от jitendra