Использовать шел, это как раз тот вариант от которого пытаюсь уйти ,т.к. он далек от IoC
"и когда вы вызываете close — каждый из них пытается сохранить свои изменения и здесь уже кто последний тот и папа сохранил свою версию". Сохраняют то все и статусы у всех успешные, но получается это не у всех по факту. Да понятие последнего очень размывчато, т.к. в рамках потоков одни джобы заменяютя на другие плавно и без простоев. И последний, а точнее крайний всегда один в конце списка.
PS - Сейчас сделал костыль, который не дает закрыться джобу, пока по факту не появится файл в архиве. Как говорится, доверяй, но проверяй..
Дмитрий, Нет, не совсем так:
1) документация говорит, что "ZipArchive::CREATE (int) Создавать архив, если он не существует." .т.е. не надо менять метод открытия в зависимости от наличия архив-файла;
2) Уже экспериментировал и писал в общем описании. Как писал в описании основной проблемы "Изначальное наличие архива не меняет ситуацию."
Дмитрий, Вот. example
Попробуйте у себя. Код минимален и может даже в ущерб какой-либо надежности. Собран лишь для того, чтобы показать проблему указанную в топике.
Дмитрий, в один поток все работает и сохраняет нормально. Но соответственно это выливается в более долгий по времени процесс. При наличии кучи ядер процесса, трудится только один.
PS - был еще вариант использования exec для работы с ZIP силами шела операционки, но это костыльный метод
"и когда вы вызываете close — каждый из них пытается сохранить свои изменения и здесь уже кто последний тот и папа сохранил свою версию". Сохраняют то все и статусы у всех успешные, но получается это не у всех по факту. Да понятие последнего очень размывчато, т.к. в рамках потоков одни джобы заменяютя на другие плавно и без простоев. И последний, а точнее крайний всегда один в конце списка.
PS - Сейчас сделал костыль, который не дает закрыться джобу, пока по факту не появится файл в архиве. Как говорится, доверяй, но проверяй..