[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как выполнить тяжелый php скрипт, если сайт подклю
Rooner
Подключил к сайту cloudflare. Нужно выполнить нагруженный php скрипт, который выполняет более 15тыс запросов к mysql и скачивает большое количество картинок (такая синхронизация). Но спустя 20 секунд после запуска скрипта, cloudflare его просто блокирует (Error 524 A timeout occurred).
Подскажите пожалуйста как выполнить скрипт? Может, можно исключить из cloudflare отдельные скрипты?

Скрипт находится в папке /admin/script.php
В самом cloudflare в разделе Page Rules проставил настройки:
ДОМЕН/admin*
Security Level: High, Cache Level: Bypass, Disable Apps, Disable Performance
Также включен Development Mode, но это не помогло.
При этом на самом хостинге, для выполнения скрипта, достаточно памяти и мощности.
brevis
https://support.cloudflare.com/hc/en-us/art...011431#524error
Цитата
If you regularly run HTTP requests that take over 100 seconds to complete (for example large data exports), move those processes behind a subdomain not proxied (grey clouded) in the Cloudflare DNS app.
FatCat
Цитата (Rooner @ 16.06.2020 - 12:09)
скрипт, который выполняет более 15тыс запросов к mysql и скачивает большое количество картинок (такая синхронизация).

Запуск в браузере?
Выяснить какая часть скрипта гарантированно укладывается в лимит времени, и разбить скрипт — рефрешить страницу.

_____________
Бесплатному сыру в дырки не заглядывают...
Rooner
Цитата (FatCat @ 16.06.2020 - 13:32)
Запуск в браузере?
Выяснить какая часть скрипта гарантированно укладывается в лимит времени, и разбить скрипт — рефрешить страницу.

Спасибо за совет, но это чрезвычайно не удобно для использования, т.к. запуск производится не только вручную в браузере, но и Cron-ом по расписанию.
Rooner
Цитата (brevis @ 16.06.2020 - 13:20)
https://support.cloudflare.com/hc/en-us/art...011431#524error
Цитата
If you regularly run HTTP requests that take over 100 seconds to complete (for example large data exports), move those processes behind a subdomain not proxied (grey clouded) in the Cloudflare DNS app.

Спасибо, еще бы знать как сделать вот это "переместите эти процессы за поддомен, не проксируемый (помеченный серым), в приложении Cloudflare DNS"
Есть примеры?
brevis
Цитата (Rooner @ 16.06.2020 - 14:09)
Есть примеры?

Создать субдомен, например admin, выключить у него прокси, и нагруженный скрипт дергать через этот субдомен: http://admin.site.ru/admin/script.php

user posted image

_____________
Чатик в телеге
Rooner
Оказывается Cron-ом тяжелый скрипт выполнился, данные обновились (и это довольно странно) и теперь при повторном запуске скрипт уже не является тяжелым и соответственно он выполняется без проблем. Судя по всему на Cron не распространяется ограничение cloudflare в 100 сек, но это не точно.

brevis спасибо, попробую, если проблема возникнет снова.
killer8080
Rooner
тяжёлая рутина не должна ни в коем случае запускаться в веб контексте! В этом твоя главная ошибка.

Цитата (Rooner @ 16.06.2020 - 15:06)
Судя по всему на Cron не распространяется ограничение cloudflare в 100 сек, но это не точно.

cloudflare тут вообще ни причём, скрипт обрывался по тайм лимиту php. cloudflare это всего лишь прокси, в данном случае своим сообщением об ошибке просто скрыл истинную проблему.
Если задачу нужно стартовать вручную из админки, то нужно просто отправлять тяжёлый скрипт в бэкграунд. Я бы сделал так:
1 по кнопке отправляем аякс запрос на запуск
2 аякс обработчик стартует бэкграунд процесc и возвращает его pid при успешном запуске или ошибку. Заодно контролирует, не активна ли задача, чтоб избежать дубля.
3 скрипт рутины в процессе работы пишет свой лог статистику.
4 на клиентской стороне либо полингом, либо вебсокетами, запрашиваем статистику отработки скрипта, и рисуем пользователю красивый прогрессбар и / или статистику выполнения работы.

пример как стартануть скрипт в бэкграунд тут
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.