Ошибка обработки файла архива

Ошибка обработки файла архива

от Андрей Просвирнов -
Количество ответов: 2

Приветствую!

Только установил Moodle 3.1.2, делаю первые шаги в изучении этой платформы.

Установка прошла с предупреждениями (не критическими) по SOAP и XMLRPC, но так как обмениваться чем либо не планируем, то эти ошибки были пропущены.

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

Порывшись в течении нескольких часов по форумам, стало понятно, что ошибка имеет общие корни с ошибкой, которая возникает у некоторых пользователей при резервном копировании/восстановлении курсов. В частности, при попытке переноса курсов на новую платформу (3+). 

Проследив ошибку отладчиком, наткнулся на функцию process_file_block в tgz_extractor, а именно в то место где проверяется наличие в заголовке последовательности "ustar".

$magic = substr($block, 257, 6);

Из-за того что эта последовательность не находится и вылетает ошибка "Debug: Header does not have POSIX ustar magic string\nError code: errorprocessingarchive\n* line 296 of /lib/filestorage/tgz_extractor.php". Ну и все остальные, так или иначе с этим связанные.

Посмотрев на $block стало понятно что последовательность присутствует, но не всегда на своём месте. Иногда, в процессе работы с архивом, эта последовательность для некоторых файлов оказывается не 257-м бате, а на 237. Т.е. речь идет о том что некорректно читается архив. Куда-то деваются эти 20 байт из начала заголовка файлов архива.

Так же, проанализировав информацию на формах, стало понятно что проблема не с moodle, а с настройками самого сервера. 

Но вот куда дальше копать - ума не приложу.

Понимаю что не корректно работает php с архивами через gzopen. Но вот что править?

Может быть кто-то сталкивался и победил эту проблему?

CentOS7, PHP 5.6.26 (cli), MySQL 5.5.50

В ответ на Андрей Просвирнов

Re: Ошибка обработки файла архива

от Андрей Просвирнов -
Тему можно закрыть.

Решение: в config.php нужно добавить строку $CFG->usezipbackups = true;