CMS Drupal

Пришлось на днях подправлять модуль 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 мы даем возможность передать больший объем данных.

Комментарии

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <1c7>, <drupal5>, <drupal6>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".