Closed ismagilovnail closed 5 years ago
Расширение для ZIP на сервере установлено? Попробуйте установить параметр в модуле useZip=false, тогда 1С будет слать файлами, возможно поможет, или хотя бы увидим ошибку.
Так же включите параметр debug=true, файлы из архива не будут удаляться, возможно архив приходит пустой?
ZIP на сервере установлено. Пробовал отключить но так без архивов картинки не передаютс. Подозреваю что то с сессией не так, с определением названий архивов для распаковки
77.242.108.174 - admins [14/Sep/2018:10:16:07 +0300] "GET /1c_exchange.php?type=catalog&mode=checkauth HTTP/1.0" 200 544 "-" "1C+Enterprise/8.3" 77.242.108.174 - admins [14/Sep/2018:10:16:08 +0300] "GET /1c_exchange.php?type=catalog&mode=init HTTP/1.0" 200 528 "-" "1C+Enterprise/8.3" 77.242.108.174 - admins [14/Sep/2018:10:16:27 +0300] "POST /1c_exchange.php?type=catalog&mode=file&filename=v8_1A76_161ed.zip HTTP/1.0" 200 506 "-" "1C+Enterprise/8.3" 77.242.108.174 - admins [14/Sep/2018:10:16:28 +0300] "GET /1c_exchange.php?type=catalog&mode=import&filename=import0_11.xml HTTP/1.0" 200 506 "-" "1C+Enterprise/8.3"
Успел поймать пока не удалился. время 12.16 в логах видно что import0_11 уже. А на сервере до сих пор первый.
Закоментируй пожалуйста на сервере строку vendor/carono/yii2-1c-exchange/controllers/ApiController.php:243 тогда архив удляться не будет, посмотри что в нем, потому что файлы удаляются только после полного завершения парсинга
Проблему я примерно понял, архивы грузятсявсе ок, Но extractArchive не срабатывает изза этого -> $archive = self::getData('archive')) && file_exists($archive) && class_exists('ZipArchive')
потому что название текущего архива не равен self::getData('archive') и его не существует в каталоге. В итоге скрипт выдает success даже если не парсил и удаляет директорию полностью
Явно что-то с сессиями не так. Наверно нужно переделать систему распаковки архивов, странно что локально то работает нормально
Может распоковку делать после загрузки архива сразу ? А не в импорте
Да, я об этом и говорю, но не знаю почему в самом начале так не сделал, возможно были какие то на то причины, которые сейчас не помню.
if (!self::getData('archive') && strtolower(pathinfo($filePath, PATHINFO_EXTENSION)) === 'zip') { self::setData('archive', $filePath); }
в этом куске кода когда загружаетс архив, почему то ты проверяешь на существование архива в сесии и тип приема. А что если предыдущая сессия не удалился, он выдаст тебе true. В итоге названия будут разными при приеме и в сессии. и когда настает время распаковки скрипт не может найти новый архив. Так как в getData старое имя
Согласен, это узкое место
Сделал тестовую ветку, подключи версию composer require carono/yii2-1c-exchange:dev-issues/2-extract-archive
и потестируй, без тестов сразу в мастер лить не могу, придется самому руками тестировать еще
Хорошо спасибо)
как успехи?
Проверил. Парсинг идет норм. Но:
Все настроено правильно. На локалке работает как надо. Загрузил на сервер, не парсит выгруженный архив или вообще не выгружает удаляет папку в runtime сразу. Смотрел логи от 1с все запросы приходят корректно.
77.242.108.174 - admins [14/Sep/2018:09:58:08 +0300] "GET /1c_exchange.php?type=catalog&mode=checkauth HTTP/1.0" 200 544 "-" "1C+Enterprise/8.3" 77.242.108.174 - admins [14/Sep/2018:09:58:09 +0300] "GET /1c_exchange.php?type=catalog&mode=init HTTP/1.0" 200 528 "-" "1C+Enterprise/8.3" 77.242.108.174 - admins [14/Sep/2018:09:58:10 +0300] "POST /1c_exchange.php?type=catalog&mode=file&filename=v8_1A76_155ae.zip HTTP/1.0" 200 506 "-" "1C+Enterprise/8.3" 77.242.108.174 - admins [14/Sep/2018:09:58:11 +0300] "GET /1c_exchange.php?type=catalog&mode=import&filename=import0_28.xml HTTP/1.0" 200 506 "-" "1C+Enterprise/8.3"
ошибочных логов нет
После нескольких попыток успешно записаля только 1 кусок архива и офферы к нему