1 (06-11-2015 15:42:11 отредактировано antton)

Тема: Использование JavaSripts для обхода PHP set_time_limit

Большинство пользователей использует виртуальные хостинги на которых жёстко ограничен PHP set_time_limit 60 секундами. Использовать САНТИ на них практически не возможно, кроме как исключая из сканирования определённые директории. Потому как САНТИ просто не успевает произвести сканирование, так как срабатывает ограничение хостера на время выполнение PHP. Я уже молчу даже про бэкап файлов. Это вообще не реально... Замечательный инструмент просто не возможно использовать.

Предлагаю во-первых при установке уточнять эту настройку у пользователя, чтобы знать чему равен тайм-лимит. А во-вторых, при запуске в ручном режиме из браузере использовать JavaSripts для обхода этого ограничения - остановки и рестарта скрипта в зависимости от прошедшего времени. Аналогичную функцию можно было бы использовать и для бэкапа файлов. Если запуск же идёт через cron, то создавать временные файлы и делать остановки, а при повторном кроне возобновлять сканирование. Аналогично и с бэкапом.

Есть один известный бесплатный скрипт Sypex Dumper 2 (не сочтите за рекламу). Также делается бесплатно добрым хорошим человеком. Он делает бэкап баз данных MySql. Так вот в нём как раз реализован данный функционал JavaScripts, который останавливает скрипт и возобновляет его работу. Можно использовать как образец. Автору САНТИ известен Sypex, он сам упоминал о том использовал его коды (они есть в свободном доступе и открыты для использования) при создании САНТИ.

Re: Использование JavaSripts для обхода PHP set_time_limit

antton пишет:

Большинство пользователей использует виртуальные хостинги на которых жёстко ограничен PHP set_time_limit 60 секундами. Использовать САНТИ на них практически не возможно, кроме как исключая из сканирования определённые директории. Потому как САНТИ просто не успевает произвести сканирование, так как срабатывает ограничение хостера на время выполнение PHP. Я уже молчу даже про бэкап файлов. Это вообще не реально... Замечательный инструмент просто не возможно использовать.

Предлагаю во-первых при установке уточнять эту настройку у пользователя, чтобы знать чему равен тайм-лимит. А во-вторых, при запуске в ручном режиме из браузере использовать JavaSripts для обхода этого ограничения - остановки и рестарта скрипта в зависимости от прошедшего времени. Аналогичную функцию можно было бы использовать и для бэкапа файлов. Если запуск же идёт через cron, то создавать временные файлы и делать остановки, а при повторном кроне возобновлять сканирование. Аналогично и с бэкапом.

Есть один известный бесплатный скрипт Sypex Dumper 2 (не сочтите за рекламу). Также делается бесплатно добрым хорошим человеком. Он делает бэкап баз данных MySql. Так вот в нём как раз реализован данный функционал JavaScripts, который останавливает скрипт и возобновляет его работу. Можно использовать как образец. Автору САНТИ известен Sypex, он сам упоминал о том использовал его коды (они есть в свободном доступе и открыты для использования) при создании САНТИ.

Хорошее предложение Антон! Думаю к нему обратимся при очередном витке доработок. Тем не менее могу отметить что описанные проблемы по нашим наблюдениям возникают процентов у 5ти пользователей. О которых конечно тоже стоит подумать. Про Sypex Dumper я хорошо осведомлен, он используется в САНТИ для бекапинга БД.

3 (06-11-2015 23:01:03 отредактировано antton)

Re: Использование JavaSripts для обхода PHP set_time_limit

Igor Mitrofanov пишет:

могу отметить что описанные проблемы по нашим наблюдениям возникают процентов у 5ти пользователей

Я думаю процент значительно больше. Процентов 50 - ровно половина. Просто обычно, пользователи не объявляют себя, считая что у них плохой хостинг и потому вполне естественно что САНТИ запустился, но подвис - просто не установившись до конца. И делают вывод, что не могут использовать данный сервис, потому как или они дураки, так как скрипт почему то не запустился, или их хостинг не поддерживает возможности скрипта, или скрипт кривой...

Кстати, отсюда идея. Облегчить установку и исключить из неё индексирование файлов, чтобы показать пользователю уже готовый web-интерфейс и меньше отпугивать. А информацию о необходимости индексации выводить уже в интерфейсе.

А о том что процент у тех у кого не работает значительно больше, говорят даже отзывы этом форуме, у многих не работает функция бэкапа файлов. Что вполне естественно, это самая ресурсоёмкая функция. А во вторых на большинстве российских виртуальных хостингов действительно PHP max_execution_time 60 сек - http://infobox.hosting-obzor.ru/phpinfo А где-то и 30 секунд.

Пользователь тупой (не в том смысле что дурак), а в том что нужно упростить для него всё. Он не должен гадать почему не сработал скрипт. Надо как-то попытаться что ли посчитать необходимое время и потом по завершению (при обновлении страницы админки web-интерфейса) проверять, если время значительно меньше - значит скрипт не сработал. И сообщать об этом пользователю. Пускай функционал не работает, но ошибки надо как-то отрабатывать. Пускай ни черта не работает, но должно объясниться почему. Т.е. не скрипт плохой, а возможности хостинга не позволяют...

Нужно как то показывать процесс индексирования файлов, и бэкапа. У Sypex Dumper, есть такая функция. А то смотришь, ломаешь голову, мысли не хорошие бегают... И не понимаешь как же отловить, хватило мощностей хостинга или нет... :-) Можно проверить на практике, сколько файлов провериться и за какое время. И проверяя какой time_limit стоит предупреждать об этом пользователя

Я думаю это как раз следующий этап развития САНТИ. Так как история развития гласит:
1. Проблема.
2. Часто повторяющяяся проблема.
3. Идея облегчить себе жизнь скриптом.
4. Маленький код.
5. Улучшение кода, и превращение его в сервис САНТИ.
6. Красивый web-интерфейс.
6. Облегчение системы установки  скрипта.
7. Добавление допольнительных функций.
8. Появление функции автопилот.
9. Отработка часто встречаемых явных ошибок при установке и использовании.
10. Отлавливание всех ошибок и создания интерфейса для "дурака".
11. Улучшение принципа хранение/шифрования базы данных.
12. Добавление новых функций.
юбилей САНТИ :-)
<...>

Я бы тоже плюнул и не стал ставить. У меня он не запустился с первого раза. И со второго. А с третьего. Потом заработал, но криво. До сих пытаюсь понять как сделать максимум индексирования файлов, чтобы хватило ресурсов. Не успевает отработать и всё :-) Я б не заморачивался, если б не мой шок, когда я обнаружил изменённый файл на хостинге, который благополучно долго лежал. А я даже не догадывался об его изменении. Да, повезло что злоумышленник ничего не смог сделать более. Но у меня лежит файл-вирус. Неприятно.

4

Re: Использование JavaSripts для обхода PHP set_time_limit

почитал всю эту переписку .... чтобы скрипты работали долго, и не было зависимости от max_execution_time
в документации описан очень хороший для этого режим CLI

http://php.net/manual/ru/features.commandline.php
http://php.net/manual/ru/migration5.cli-cgi.php

работает везде, по умолчанию правда он с версии 5.5 интегрирован в сборку

Re: Использование JavaSripts для обхода PHP set_time_limit

wormen пишет:

почитал всю эту переписку .... чтобы скрипты работали долго, и не было зависимости от max_execution_time
в документации описан очень хороший для этого режим CLI

http://php.net/manual/ru/features.commandline.php
http://php.net/manual/ru/migration5.cli-cgi.php

работает везде, по умолчанию правда он с версии 5.5 интегрирован в сборку

большое спасибо, мы в процессе выпиливания устаревших конструкций в САНТИ, т.к. он был ориентирован и на версии php ниже 5, так что вашей рекомендацией так же воспользуемся

6

Re: Использование JavaSripts для обхода PHP set_time_limit

Спасибо разработчикам за столь нужный инструмент. Очень жду решение этой проблемы. Возможно ли сейчас как обойти PHP set_time_limit? На моем хостинге установлен 45 секунд. Может возможно выполнить скрипт по частям?

Re: Использование JavaSripts для обхода PHP set_time_limit

serhy пишет:

Спасибо разработчикам за столь нужный инструмент. Очень жду решение этой проблемы. Возможно ли сейчас как обойти PHP set_time_limit? На моем хостинге установлен 45 секунд. Может возможно выполнить скрипт по частям?

Попробуйте уложиться в свой time_limit ограничением форматов файлов или папок на сканирование. В таком случае вероятно САНТИ будет успевать обработать файлы