[Решено] Потеря дескриптора файла во время работы пакетной операции.

Главные вкладки

Аватар пользователя Sun-fire Sun-fire 15 сентября 2010 в 19:05

Суть трабла следующая. Есть пакетная операция, в которой производится операция построчного считывания данных из файла. Считывание из файла производится через функцию fgetss(). Дескриптор файла сохраняется в $context['sandbox'][f].
На определенном шаге выполнения пакетной операции дескриптор пропадает, в переменной $context['sandbox'][f] значение 0. При этом на предыдущем шаге значение точно туда записывается. Сбой происходит на разных местах файла (пакетная операция корректно обрабатывает в среднем до 40 строчек, и дальше теряет дескриптор.) В чем может быть проблема?

Комментарии

Аватар пользователя axel axel 16 сентября 2010 в 11:06

Насколько я понимаю суть пакетных операций в друпале, дескрипторы файлов между вызовами не сохранятся, т.к. каждый цикл пакетной операции это отдельный вызов PHP, где друпал инициализируется заново (хотя и по сокращённому алгоритму). Значит нужно каждый раз открывать файл, читать порцию, сохранять позицию (а не дескриптор) в sandbox, закрывать файл. В следующей сессии алгоритм повторяется, только перед чтением устанавливается позиция в файле, сохранённая ранее в песочнице.

Аватар пользователя Sun-fire Sun-fire 16 сентября 2010 в 13:01

Благодарю за помощь, axel. Работает.
А я почему-то думал, что дескриптор между вызовами сохраняется. Ввело в заблуждение то, что первых пару десятков циклов batch выполнялся без проблем, и сбой возникал в разных местах файла.