Пришлось на днях подправлять модуль Stock & Price CSV Updater для загрузки csv файлов. Загрузка использует в качестве параметра для сравнения товаров - SKU. И первое, что насторожило - это определение в запросах SKU как число. Т.е. например:
db_query("UPDATE {uc_product_stock} SET stock = %d WHERE sku = %d", $stock_level, $ref);
Но в моем случае артикулы были с буквами, поэтому переделал sku = %d на sku = %s.
Но это отвлечение, основные проблемы у меня начались при загрузке больших файлов (более 200kb в частности). Первая проблема с этим связанная - это ошибка:
Warning: MySQL server has gone away query: INSERT INTO watchdog.
Здесь даны разные советы http://www.drupal.ru/node/3666, но т.к. эта ошибка проявилась только у меня на localhost-e, а у заказчика такой ошибки не было, то я у себя просто отключил модуль "Database logging".
Вторая ошибка связана с тем, что в модуле Stock & Price CSV Updater, для отображения хода загрузки используется функция batch_set. Удобная вещь, но при больших загружаемых файлах вместо результата загрузки выдается страница с отказом в доступе. Подсказку для решения данной проблемы подсмотрел здесь: http://drupal.org/node/434032. А именно, в настройках mysql параметр max_allowed_packet установить 2Mb вместо 1Mb по умолчанию. Т.е. если в двух словах, то это получается что mysql не может проглотить большой кусок информации посылаемый функцией batch_set за раз. И увеличивая max_allowed_packet мы даем возможность передать больший объем данных.
Отправить комментарий