webAsyst ShopScript доработка для приёма данных формате zip

Интеграция программы в различные учётные системы и интернет магазины.
Ответить
Аватара пользователя
TechAdmin
Администратор
Сообщения: 4286
Зарегистрирован: 27 авг 2008 14:30

Проблема обновления сайта в автоматическом режиме и архивация данных в формат zip (webAsyst ShopScript версии 302).
webAsyst ShopScript версии 302 (302 это последняя версия на текущий момент - июнь 2011г.) и ниже, не поддержимает приём данных в с использованием формата CommerceML в запакованном виде zip.

Суть проблемы: по умолчанию всегда включен режим загрузки файлов без возможности обработки данных в формате zip.
Последствие: соответственно большие файлы могут быть не загружены на сайт, т.к. сработает таймаут на время выделенное сервером. При объёме товаров равным 10.000 хранящихся в учётной системе, размер файла может составлять 30мб, поэтому его загрузка может быть проблематичной, если не использовать сжатие в формате zip. Использование формата zip позволяет сократить передачу файла в ~30раз, т.е. будет передан на сайт файл объёмом 1мб (оригинал 30мб).

Доработка webAsyst ShopScript для приёма данных в формате zip.
Изменения необходимо провести в файле:

Код: Выделить всё

/published/SC/html/scripts/modules/products/exportto1c/class.exportto1c.php 
Найти строку:

Код: Выделить всё

$USE_ZIP =  false && function_exists("zip_open");
Заменить на:

Код: Выделить всё

$USE_ZIP =  function_exists("zip_open");
Найти текст:

Код: Выделить всё

if($result === mb_strlen($data, 'latin1'))
{
	echo "success\n";
}
Заменить на:

Код: Выделить всё

if($result === mb_strlen($data, 'latin1'))
{
	echo "success\n";
	
	if ($USE_ZIP) {
		$zip = zip_open($filename);
		if (is_resource($zip)) {
			while ($zip_entry = zip_read($zip)) { 
				if (zip_entry_open($zip, $zip_entry, "r")) {
					$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
					$fp = fopen($DIR_NAME."/".zip_entry_name($zip_entry), "w");
					fwrite($fp, $buf);
					zip_entry_close($zip_entry);
				}
			}
			zip_close($zip);
			unlink($filename);
		}
	}						
}
Найти текст:

Код: Выделить всё

if($fp = fopen($filename, "ab"))
Заменить на:

Код: Выделить всё

if($fp = fopen($filename, "wb"))
Если файл CommerceML достаточно большой по объёму, возможно придётся увеличить параметр доступного объёма оперативной памяти для выполнения скрипта, для этого необходимо в файле .htaccess прописать параметр:

Код: Выделить всё

php_value memory_limit 256M
После этих несложных изменений, webAsyst ShopScript сможет принимать сжатые файлы, что многократно ускорит обновление сайта, берегите своё время, а мы поможем вам в этом ;)
С уважением, поддержка ElbuzGroup.
Ответить

Вернуться в «Интеграция E-Trade PriceList Importer»