Форум русской поддержки Joomla!® CMS
09.12.2016, 17:26:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1] 2  Все   Вниз
  Добавить закладку  |  Печать  
Автор

Как правильно и безопасно вызывать файл из CMS не связанный с ней?

 (Прочитано 248 раз)
0 Пользователей и 1 Гость смотрят эту тему.
voland
Профи
********

Репутация: +488/-86
Online Online

Пол: Мужской
Сообщений: 8733


любит наш народ всякое гавно...


« : 03.11.2016, 14:18:17 »

Суть - имею плагин, в котором парочка зависимых второй от результата первого curl-запросов.

Так как они могут исполняться долго - появилась мысль вынести их в отдельный php-файл и вызывать из плагина тем же curl-ом (не дожидаясь ответа).

Теперь вопрос - как лучше (правильнее, безопасно) организовать этот файл?
Стоит ли в него подгружать всё ядро, как фильтровать возможные левые запросы итп?

Какие идеи или опыт есть с подобного рода структурами?
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #1 : 03.11.2016, 15:42:10 »

Мало инфы, как вызывается файл из плагина, и зачем cURL ом дергать в пределах одного сайта?
Записан
voland
Профи
********

Репутация: +488/-86
Online Online

Пол: Мужской
Сообщений: 8733


любит наш народ всякое гавно...


« Ответ #2 : 03.11.2016, 15:46:36 »

А как еще можно?
Пока никак не вызывается, пока код внутри события onAfterSave (условно)

Вот и думаю, так как пока код не исполнится, сохранение не произойдет, вынести часть, что отсылает инфу в отдельный файл.
Так понятнее?
Записан
AlekVolsk
Профи
********

Репутация: +317/-3
Offline Offline

Пол: Мужской
Сообщений: 6460



« Ответ #3 : 03.11.2016, 15:51:50 »

стандартно, через include, вся остальная безопасность ложится на содержание подключаемого файла
Записан
voland
Профи
********

Репутация: +488/-86
Online Online

Пол: Мужской
Сообщений: 8733


любит наш народ всякое гавно...


« Ответ #4 : 03.11.2016, 15:52:56 »

стандартно, через include, вся остальная безопасность ложится на содержание подключаемого файла
Нет. У меня о другом тема.
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3593


« Ответ #5 : 03.11.2016, 15:55:10 »

Суть - имею плагин, в котором парочка зависимых второй от результата первого curl-запросов.

Так как они могут исполняться долго - появилась мысль вынести их в отдельный php-файл и вызывать из плагина тем же curl-ом (не дожидаясь ответа).
Не очень понятно, как связана работа плагина с этими запросами: создается впечатление, что никак Sad. И потом из плагина опять curl'ом, но уже внутри сайта (?).
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #6 : 03.11.2016, 15:55:58 »

Сергей а подробнее можешь описать что делает плагин, и что должны получить другие плагины? ибо я не понимаю зачем нам и cURL и т.д.

Не очень понятно, как связана работа плагина с этими запросами: создается впечатление, что никак Sad. И потом из плагина опять curl'ом, но уже внутри сайта (?).
И вот я о том же, cURL это на другой сайт, внутри своего сайта это бред)
Записан
voland
Профи
********

Репутация: +488/-86
Online Online

Пол: Мужской
Сообщений: 8733


любит наш народ всякое гавно...


« Ответ #7 : 03.11.2016, 16:01:34 »

У нас сохраняется какой-то материал.
Во время сохранения мне нужно сообщить об этом стороннему сервису, что появилось вот такая вот штука.
Делаю я это в плагине по событию сохранения.

Чтобы сообщить сервису по RestAPI - надо сделать 2 запроса (первый - авторизация, второй собственно сообщение)
В принципе, ни обрабатываются быстро, но бывают же разные ситуации по связности сети и доступности сервисов, поэтому, чтобы сохранение материала не тормозилось, я и хочу выделить часть кода в асинхронно исполняемую ветку.
Так как пых, насколько я понимаю, не поддерживает без костылей асинхронность я и хочу сделать это через cURL к внутреннему файлу.

Логичненько?
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #8 : 03.11.2016, 16:07:35 »

Логичненько?
Нет )
Варианта два для этого:
1. Очереди что то типа: https://habrahabr.ru/post/142210/
2. Делаешь таблицу задач, в ней пишешь задачу, и пишешь например id материала.. и бегаешь кроном, берешь задачи определяешь какая задача, берешь материал, выполняешь нужные действия, файл положить на уровень выше чем сайт что бы к нему не было доступа извне..

curl тут нафиг не нужен...
Записан
voland
Профи
********

Репутация: +488/-86
Online Online

Пол: Мужской
Сообщений: 8733


любит наш народ всякое гавно...


« Ответ #9 : 03.11.2016, 16:16:27 »

1. Очереди что то типа: https://habrahabr.ru/post/142210/
Читаю
Цитировать
aptitude install gearman-job-server
и как это коррелируется что плагин для Joomla и у всех разные шаред-хостинги?

Речь ведь не про свой сервер, а про плагин для Joomla
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #10 : 03.11.2016, 16:19:14 »

Читаюи как это коррелируется что плагин для Joomla и у всех разные шаред-хостинги?
Речь ведь не про свой сервер, а про плагин для Joomla
по этому я написал второй вариант!
Записан
voland
Профи
********

Репутация: +488/-86
Online Online

Пол: Мужской
Сообщений: 8733


любит наш народ всякое гавно...


« Ответ #11 : 03.11.2016, 16:21:21 »

по этому я написал второй вариант!
Опять же не вариант.
Откуда доступ к крону и к папке на уровень выше в сферическом ваку…  хостинге?

Чем мой вариант то плох?
Вот только просьба не уходить в такую дискуссию.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #12 : 03.11.2016, 16:30:06 »

Опять же не вариант.
Откуда доступ к крону и к папке на уровень выше в сферическом ваку…  хостинге?

Чем мой вариант то плох?
Вот только просьба не уходить в такую дискуссию.
Да можно через cURL асинхронно бахать, я бы например сделал через крон, можно же и не вынося на уровень выше защитить файл для крона доступа извне.. curlom так наверно не выйдет..
Записан
voland
Профи
********

Репутация: +488/-86
Online Online

Пол: Мужской
Сообщений: 8733


любит наш народ всякое гавно...


« Ответ #13 : 03.11.2016, 16:32:26 »

Ну то есть мы и вернулись к вопросу сформулированному в стартпосте.
Впрочем, уже есть идея как это сделать безопасно )
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #14 : 03.11.2016, 16:39:56 »

Ну то есть мы и вернулись к вопросу сформулированному в стартпосте.
Впрочем, уже есть идея как это сделать безопасно )
ну смотри с CRON
1. Создаем  например cron/cron.php
2. в паке cron кидаем .htaccess в котором только deny from all
3. Все извне ты не зайдешь, cURL тебя тоже не пустит сюда..
4. Создаем табличку с задачами
5. в плагине делаем сохранение задачи в таблицу
6. для удобства подрубаем в cron/cron.php Joomla framework
7. делаем запрос в табличку с задачами
8. выполняем их в цикле неспешно, и удаляем выполненные
9. запускаем cron на cron/cron.php!
я так делал для парсинга больших данных в одном магазине.. но там свой выделенный сервер и я мог ложть скрипт на уровень выше...

По cURL идей нету, кроме как передавать токен например и/или какой то секретный ключ!
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 862



« Ответ #15 : 03.11.2016, 16:55:14 »

Я вроде проще придумал (не вникая в подробности правда)..

После сохранения материала, плагином скрыто выводить реквест(если создание), по нему можно тут же аяксом отправлять уведомление..
в углу даже датчик можно запилить, чтобы в случае успеха зеленел.. Lips Sealed

Или, на создание материалов повесить триггер чтобы создавалась запись в #__just_added каком нибудь, и мини крон будет бегать только по ней, отправил-удалил..
Записан
voland
Профи
********

Репутация: +488/-86
Online Online

Пол: Мужской
Сообщений: 8733


любит наш народ всякое гавно...


« Ответ #16 : 03.11.2016, 16:55:54 »

Да идея простая. Сохранять параметры в файл и туда же токен.
Токен в параметр.
Файл берется, обрабатывается и удаляется.
Всё, минимум кода, ничего не надо подключать
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #17 : 03.11.2016, 17:09:00 »

Я вроде проще придумал (не вникая в подробности правда)..
А стоило бы вникнуть в подробности ) Ведь всем этим занимается плагин )

 
Да идея простая. Сохранять параметры в файл и туда же токен.
Токен в параметр.
Файл берется, обрабатывается и удаляется.
Всё, минимум кода, ничего не надо подключать
а файл береться обрабатывается и удаляется чем? и зачем в нем токен?
Записан
voland
Профи
********

Репутация: +488/-86
Online Online

Пол: Мужской
Сообщений: 8733


любит наш народ всякое гавно...


« Ответ #18 : 03.11.2016, 17:10:31 »

А стоило бы вникнуть в подробности ) Ведь всем этим занимается плагин )

 а файл береться обрабатывается и удаляется чем? и зачем в нем токен?
Формируется в плагине, берется и обрабатывается файлом, что будет курлы слать.
Зачем - хм, может и лишнее, просто дополнительная проверка, чтоб не обрабатывал левые запросы
Записан
voland
Профи
********

Репутация: +488/-86
Online Online

Пол: Мужской
Сообщений: 8733


любит наш народ всякое гавно...


« Ответ #19 : 03.11.2016, 17:11:36 »

Я вроде проще придумал (не вникая в подробности правда)..

После сохранения материала, плагином скрыто выводить реквест(если создание), по нему можно тут же аяксом отправлять уведомление..
в углу даже датчик можно запилить, чтобы в случае успеха зеленел.. Lips Sealed

Или, на создание материалов повесить триггер чтобы создавалась запись в #__just_added каком нибудь, и мини крон будет бегать только по ней, отправил-удалил..
Да, хорошие идеи, чуть сложнее лишь, +
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #20 : 03.11.2016, 17:16:10 »

Формируется в плагине, берется и обрабатывается файлом, что будет курлы слать.
Зачем - хм, может и лишнее, просто дополнительная проверка, чтоб не обрабатывал левые запросы
только токен бессмысленно слать скорее всего...
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #21 : 03.11.2016, 17:18:16 »

Да, хорошие идеи, чуть сложнее лишь, +
И как это будет работать? у тебя же плагин гоняет данные, тебе же надо будет вывести какой то невидимый блок который будет слать AJAX запрос, а если пользователь нажмет сохранить и закрыть, и как ты поймешь что надо вставлять какой то блок?
Записан
AlexeyGal
Давно я тут
****

Репутация: +25/-8
Offline Offline

Пол: Мужской
Сообщений: 259



« Ответ #22 : 03.11.2016, 17:21:07 »

Мало инфы, как вызывается файл из плагина, и зачем cURL ом дергать в пределах одного сайта?

Правильно, так давно никто не делает. cURL использовать нет смысла. Это все равно что на танке по грибы ездить.
Записан
shurakana
Живу я здесь
******

Репутация: +48/-6
Offline Offline

Сообщений: 862



« Ответ #23 : 03.11.2016, 17:30:15 »

И как это будет работать? у тебя же плагин гоняет данные, тебе же надо будет вывести какой то невидимый блок который будет слать AJAX запрос, а если пользователь нажмет сохранить и закрыть, и как ты поймешь что надо вставлять какой то блок?

"...нужен плагин, без плагина разговора не будет!"..)))

Тогда у Joomla сверхспособности есть, она как то понимает что надо вывести сообщение, о том что материал добавлен..
Записан
voland
Профи
********

Репутация: +488/-86
Online Online

Пол: Мужской
Сообщений: 8733


любит наш народ всякое гавно...


« Ответ #24 : 03.11.2016, 17:30:22 »

И как это будет работать? у тебя же плагин гоняет данные, тебе же надо будет вывести какой то невидимый блок который будет слать AJAX запрос, а если пользователь нажмет сохранить и закрыть, и как ты поймешь что надо вставлять какой то блок?
Мне не надо ничего выводить.
Просто отправить и не важен результат.

Ну как не важен - ну логи может писать в крайнем случае
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3593


« Ответ #25 : 03.11.2016, 17:32:41 »

Да, с асинхронностью в PHP вариантов мало, и все Azn извращенные: cURL, socket, cron, AJAX. Мне больше понравился вариант AJAX, предложенный shurakana именно для этого случая: зеленая лампочка - это круто Azn.
Правильно, так давно никто не делает. cURL использовать нет смысла. Это все равно что на танке по грибы ездить.
?
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #26 : 03.11.2016, 17:34:28 »

Мне не надо ничего выводить.
Просто отправить и не важен результат.

Ну как не важен - ну логи может писать в крайнем случае
и как ты собираешься отправить AJAX запрос без вывода в HTML данных для AJAX запроса?  
Записан
Septdir
Живу я здесь
******

Репутация: +36/-3
Offline Offline

Пол: Мужской
Сообщений: 841


Skype: septdir


« Ответ #27 : 03.11.2016, 17:35:20 »

Ну либо я туплю либо voland перемудрил. Правда у меня три варианта получилось.
1. Стандартно. На afterSave вещаем две функции: Авторизацию (там наверняка ответ приходит в json) если ок запускаем отправку с полученным параметром (что там кей или токен). Старо как мир.
2. Описанный Aleks.Denezh вариант с кроном.
3. Описанный Aleks.Denezh вариант с кроном. Но не через базу, через RSS она один фиг генерируется. (кстати мб у сервиса вообще это есть в функциланле).

Для полного ответа нехватает, полного описания что передать нужно и документации по api сервиса разумееться
Записан
voland
Профи
********

Репутация: +488/-86
Online Online

Пол: Мужской
Сообщений: 8733


любит наш народ всякое гавно...


« Ответ #28 : 03.11.2016, 17:35:24 »

А, кстати, вот бы в Joomla внедрить onQueued("event_name")
Записан
voland
Профи
********

Репутация: +488/-86
Online Online

Пол: Мужской
Сообщений: 8733


любит наш народ всякое гавно...


« Ответ #29 : 03.11.2016, 17:36:35 »

и как ты собираешься отправить AJAX запрос без вывода в HTML данных для AJAX запроса? 
Блин, не надо мне AJAX, мне односторонне же достаточно!
Записан
Страниц: [1] 2  Все   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet