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

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

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
Суть - имею плагин, в котором парочка зависимых второй от результата первого curl-запросов.

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

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

Какие идеи или опыт есть с подобного рода структурами?

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
Мало инфы, как вызывается файл из плагина, и зачем cURL ом дергать в пределах одного сайта?
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
А как еще можно?
Пока никак не вызывается, пока код внутри события onAfterSave (условно)

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

*

AlekVolsk

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

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
стандартно, через include, вся остальная безопасность ложится на содержание подключаемого файла
Нет. У меня о другом тема.

*

robert

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

Так как они могут исполняться долго - появилась мысль вынести их в отдельный php-файл и вызывать из плагина тем же curl-ом (не дожидаясь ответа).
Не очень понятно, как связана работа плагина с этими запросами: создается впечатление, что никак :(. И потом из плагина опять curl'ом, но уже внутри сайта (?).
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Aleks.Denezh

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

Не очень понятно, как связана работа плагина с этими запросами: создается впечатление, что никак :(. И потом из плагина опять curl'ом, но уже внутри сайта (?).
И вот я о том же, cURL это на другой сайт, внутри своего сайта это бред)
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
У нас сохраняется какой-то материал.
Во время сохранения мне нужно сообщить об этом стороннему сервису, что появилось вот такая вот штука.
Делаю я это в плагине по событию сохранения.

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

Логичненько?

*

Aleks.Denezh

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

curl тут нафиг не нужен...
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
1. Очереди что то типа: https://habrahabr.ru/post/142210/
Читаю
Цитировать
aptitude install gearman-job-server
и как это коррелируется что плагин для Joomla и у всех разные шаред-хостинги?

Речь ведь не про свой сервер, а про плагин для Joomla

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
Читаюи как это коррелируется что плагин для Joomla и у всех разные шаред-хостинги?
Речь ведь не про свой сервер, а про плагин для Joomla
по этому я написал второй вариант!
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
по этому я написал второй вариант!
Опять же не вариант.
Откуда доступ к крону и к папке на уровень выше в сферическом ваку…  хостинге?

Чем мой вариант то плох?
Вот только просьба не уходить в такую дискуссию.

*

Aleks.Denezh

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

Чем мой вариант то плох?
Вот только просьба не уходить в такую дискуссию.
Да можно через cURL асинхронно бахать, я бы например сделал через крон, можно же и не вынося на уровень выше защитить файл для крона доступа извне.. curlom так наверно не выйдет..
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
Ну то есть мы и вернулись к вопросу сформулированному в стартпосте.
Впрочем, уже есть идея как это сделать безопасно )

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
Ну то есть мы и вернулись к вопросу сформулированному в стартпосте.
Впрочем, уже есть идея как это сделать безопасно )
ну смотри с 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 идей нету, кроме как передавать токен например и/или какой то секретный ключ!
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

shurakana

  • Завсегдатай
  • *****
  • 793
  • 43
Я вроде проще придумал (не вникая в подробности правда)..

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

Или, на создание материалов повесить триггер чтобы создавалась запись в #__just_added каком нибудь, и мини крон будет бегать только по ней, отправил-удалил..
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
Да идея простая. Сохранять параметры в файл и туда же токен.
Токен в параметр.
Файл берется, обрабатывается и удаляется.
Всё, минимум кода, ничего не надо подключать

*

Aleks.Denezh

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

 
Да идея простая. Сохранять параметры в файл и туда же токен.
Токен в параметр.
Файл берется, обрабатывается и удаляется.
Всё, минимум кода, ничего не надо подключать
а файл береться обрабатывается и удаляется чем? и зачем в нем токен?
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
А стоило бы вникнуть в подробности ) Ведь всем этим занимается плагин )

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

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
Я вроде проще придумал (не вникая в подробности правда)..

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

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

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
Формируется в плагине, берется и обрабатывается файлом, что будет курлы слать.
Зачем - хм, может и лишнее, просто дополнительная проверка, чтоб не обрабатывал левые запросы
только токен бессмысленно слать скорее всего...
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
Да, хорошие идеи, чуть сложнее лишь, +
И как это будет работать? у тебя же плагин гоняет данные, тебе же надо будет вывести какой то невидимый блок который будет слать AJAX запрос, а если пользователь нажмет сохранить и закрыть, и как ты поймешь что надо вставлять какой то блок?
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

AlexeyGal

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

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

*

shurakana

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

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

Тогда у Joomla сверхспособности есть, она как то понимает что надо вывести сообщение, о том что материал добавлен..
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
И как это будет работать? у тебя же плагин гоняет данные, тебе же надо будет вывести какой то невидимый блок который будет слать AJAX запрос, а если пользователь нажмет сохранить и закрыть, и как ты поймешь что надо вставлять какой то блок?
Мне не надо ничего выводить.
Просто отправить и не важен результат.

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

*

robert

  • Профи
  • ********
  • 4006
  • 371
Да, с асинхронностью в PHP вариантов мало, и все :) извращенные: cURL, socket, cron, AJAX. Мне больше понравился вариант AJAX, предложенный shurakana именно для этого случая: зеленая лампочка - это круто :).
Правильно, так давно никто не делает. cURL использовать нет смысла. Это все равно что на танке по грибы ездить.
?
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
Мне не надо ничего выводить.
Просто отправить и не важен результат.

Ну как не важен - ну логи может писать в крайнем случае
и как ты собираешься отправить AJAX запрос без вывода в HTML данных для AJAX запроса?  
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

Septdir

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

Для полного ответа нехватает, полного описания что передать нужно и документации по api сервиса разумееться
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты | JoomlaZen

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
А, кстати, вот бы в Joomla внедрить onQueued("event_name")

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
и как ты собираешься отправить AJAX запрос без вывода в HTML данных для AJAX запроса? 
Блин, не надо мне AJAX, мне односторонне же достаточно!