carono / yii2-1c-exchange

Модуль yii2 для выгрузки цен и остатков из 1С
77 stars 24 forks source link

Не парсит выгруженный архив, удаляет сразу #2

Closed ismagilovnail closed 5 years ago

ismagilovnail commented 6 years ago

Все настроено правильно. На локалке работает как надо. Загрузил на сервер, не парсит выгруженный архив или вообще не выгружает удаляет папку в 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 кусок архива и офферы к нему

carono commented 6 years ago

Расширение для ZIP на сервере установлено? Попробуйте установить параметр в модуле useZip=false, тогда 1С будет слать файлами, возможно поможет, или хотя бы увидим ошибку.

carono commented 6 years ago

Так же включите параметр debug=true, файлы из архива не будут удаляться, возможно архив приходит пустой?

ismagilovnail commented 6 years ago

ZIP на сервере установлено. Пробовал отключить но так без архивов картинки не передаютс. Подозреваю что то с сессией не так, с определением названий архивов для распаковки

ismagilovnail commented 6 years ago

image 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 уже. А на сервере до сих пор первый.

carono commented 6 years ago

Закоментируй пожалуйста на сервере строку vendor/carono/yii2-1c-exchange/controllers/ApiController.php:243 тогда архив удляться не будет, посмотри что в нем, потому что файлы удаляются только после полного завершения парсинга

ismagilovnail commented 6 years ago

Проблему я примерно понял, архивы грузятсявсе ок, Но extractArchive не срабатывает изза этого -> $archive = self::getData('archive')) && file_exists($archive) && class_exists('ZipArchive') потому что название текущего архива не равен self::getData('archive') и его не существует в каталоге. В итоге скрипт выдает success даже если не парсил и удаляет директорию полностью

image

carono commented 6 years ago

Явно что-то с сессиями не так. Наверно нужно переделать систему распаковки архивов, странно что локально то работает нормально

ismagilovnail commented 6 years ago

Может распоковку делать после загрузки архива сразу ? А не в импорте

carono commented 6 years ago

Да, я об этом и говорю, но не знаю почему в самом начале так не сделал, возможно были какие то на то причины, которые сейчас не помню.

ismagilovnail commented 6 years ago

if (!self::getData('archive') && strtolower(pathinfo($filePath, PATHINFO_EXTENSION)) === 'zip') { self::setData('archive', $filePath); }

в этом куске кода когда загружаетс архив, почему то ты проверяешь на существование архива в сесии и тип приема. А что если предыдущая сессия не удалился, он выдаст тебе true. В итоге названия будут разными при приеме и в сессии. и когда настает время распаковки скрипт не может найти новый архив. Так как в getData старое имя

carono commented 6 years ago

Согласен, это узкое место

carono commented 6 years ago

Сделал тестовую ветку, подключи версию composer require carono/yii2-1c-exchange:dev-issues/2-extract-archive и потестируй, без тестов сразу в мастер лить не могу, придется самому руками тестировать еще

ismagilovnail commented 6 years ago

Хорошо спасибо)

carono commented 6 years ago

как успехи?

ismagilovnail commented 6 years ago

Проверил. Парсинг идет норм. Но:

  1. после парсинга offers не очищает runtime.
  2. Не плохо было бы добавить на проверку существования директории для картинок в FileUploadTrait
carono commented 5 years ago
  1. офферы очищаю, но там остаются картинки, пока точно не знаю, куда вставить очистку кеша
  2. это видимо по этому пакету https://github.com/carono/yii2-file-upload не очень ясно что именно ты хочешь и для чего