Возможно ли заморозить объект на время?

Хм. Это какие-такие мелкие манипуляции нужно выполнять, что бы не вписаться в 30 сек?
Ну, насколько я понял речь идет о бэкапе сайта, файлов и содержимого БД. Так что там легко процесс может вылезти и за 300 сек.

Тут в любом случае придется самому это писать, т.к. одной сериализации/десериализации не достаточно.
 
А если эти сложные манипуляции доверить отдельному процессу, который
будет работать без лимитов времени, некий демон, который будет каждого
"клиента" обслуживать отдельно, а вот у клиента может быть лимит времени, но если есть ajax то можно повторять попытки клиента пока демон не даст ответ...
 
который
будет работать без лимитов времени
Задача рассчитана на массовое применение, а далеко не на каждом хостинге разрешат создать процесс без лимитов времени ;)
 
а может проверить базу адресов...обращение к одному адресу в инете занимает время...А если таких адресов 1к?
 
а в чем проблема собсна? сохрани текущее состояние того что экспортируешь. заведи файл. в него сохраняй промежуточное состояние. в коде цикл. ставится профайлер. если время работы вываливается за установленое сохранить состояние. инициировать перезагрузку. считать состояние и продолжить работу.
напимер надо обойти все файлы на сервере.в файл пишем необработанные папки. сначала это будет допустим /. Берутся из этой папки все вложенные и пишутся в массив. файлы выводятся кудато. потом массив папок сериализируется. перегружаемся. десериализируется массив - выбирается первая папка из него и удаляется из массива. опять открываем ее и вложенные папки добавляем в конец массива. и так до полного завершения.
при экспорте базы можно делать SELECT LIMIT m OFFSET n и сейвить число n.
 
Sokil.Dmytro
а в чем проблема собсна?
Так ни в чем не проблема, человек спрашивал есть ли стандартные средства для сохранения состояния класса и возможности продолжения его работы с места остановки.
 
ну длительная операция это скорее всего множество мелких однообразных операций.
если каждая операция независима - вообще не вижу проблем, за один раз делать N операций и продолжать при следующем запуске с N+1 (тупо передавая параметр begin); если же нужно запоминать состояние - ну и хранить его...где угодно.

встроенных языковых средств сохранения контекста в php нет.
 
а сериализация разве не сохраняет состояние экземпляра? или я что-то путаю?
 
На самом-то деле задачка несложная, поиграться с register_shutdown_function или ob_start, писать в файл текущее состояние скрипта, а потом восстанавливать.
 
если бы задача была сложная - она пришла бы в голову опытному разработчику,
но опытный разработчик такую задачу никогда не поставит, найдя естественное решение реальной бизнес-задачи
поэтому, после сожжения нескольких ватт электроэнергии, сотен килобайт трафика и рублей зарплаты, задача останется нереализованной,
а поиски путей подтверждения личной абсолютной правоты топикстартера сместятся в другую область
 
moscower

по моему мнению задачи импорта данных как из текстового файла (выгрузки 1с) так и разбора бекапа базы можно свести к одному целочисленному параметру который можно передавать
этому же скрипту для следующей итерации.

при разборе прайса это может быть просто номер итнерации из которого расчитывается диапазон строк к обработке (такой, чтобы успевал обрабатываться за 20-25 секунд )

при парсинге бекапа можно контролировать время от начала запуска скрипта внутри цикла разбора и если после очередного обращения к базе оно превысило 20 секунд, то формировать
инструкцию хтмл для вызова следующей итерации и в качестве параметра передавать смещение в разбираемом бекапе.
 
Всем спасибо, сделал при помощи параметра is_terminated, и запуска после каждой предположительно длительной операции функции check_time.

Все необходимые данные чтобы вернуться на то же самое место (названия ф-ий, счетчики циклов, LIMIT-ы MySQL) сохраняю в переменную объекта, а потом читая их возвращаюсь к тому же месту. Кода много лишнего, но ничего поделать нельзя :(
 
Сверху