В общем пишу сейчас загрузку в инет-магазин по стандарту КомерцМЛ из 1С.
Выгрузку беру стандартную (от битрикса), загрузку пишу свою, точнее дорабатываю то что удалось найти.
Сейчас с демо базой нормально работает, загружается номенклатура, цены, свойства, картинки, но когда перешел на тестирование выгрузки загрузки данных из основной БД, то файлик оказался большим и веб сервер отказался его грузить.
Сделал разбивку архива на части - эти части благополучно загрузились на сервер, но опять заткнулся - не получается собрать воедино части архива.
Когда отключаю выгрузку картинок, то тоже номально загружается (получается один полноценный архив). Вобщем дело в картинках - их много и занимают много места.
Выгружать отдельно картинки не совсем вариант, т.к. хочется оставить типовый механизм выгрузки данных на сайт.
Вобщем вот функция которая у меня делает разархивацию, если кто подскажет как можно собрать части архива на php буду благодарен
$file - файл который нужно разархивировать
$folder - каталог где лежит файл
function unzip($file,$folder=''){
$zip = zip_open($folder.$file);
$files = 0;
$folders = 0;
if ($zip) {
while ($zip_entry = zip_read($zip)) {
$name = $folder . zip_entry_name($zip_entry);
$path_parts = pathinfo($name);
# Создем отсутствующие директории
if(!is_dir($path_parts['dirname']))
{
mkdir($path_parts['dirname'], 0755, true);
}
if (zip_entry_open($zip, $zip_entry, "r")) {
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
$file = fopen($name, "wb");
if ($file) {
fwrite($file, $buf);
fclose($file);
$files++;
} else {
}
zip_entry_close($zip_entry);
}
}
zip_close($zip);
} else {
}
}
а если попроьбовать готовый архив разбить средствами рнр(получиться новый разбитый на части)?
или таким макаром: сначала архив нужно залить на сервер во временную папку и пссле этого уже с ним работать. тогда возможно ограничения на размер файла снимутся (это ж уже локальный файл получается).
вот ссылка (там примеры и комментарии можно найти полезные): http://pro1c.org.ua/redirect.php?http://ua2.php.net/manual/en/book.zip.php
Весь финт заключался в том что бы оставить типовость выгрузки из 1С, но решил плюнуть на это и переписал кусок разбивки файла в 1С, т.е.
не разбиваю весь архив на части, а создаю N-е число архивов удовлетворяющих по размеру веб-сервер:
ХМЛ в одном архиве, картинки в другом и уже эти файлы залетают.
Столкнулся с другой проблемой, но это уже особенности движка.
PHP Fatal error: Maximum execution time of 30 seconds exceeded
Дело в том что эти картинки потом обрабатываются отдельно и срабатывает ограничение выполнения скрипта в 30 сек.
Следовательно вижу выход только в том что бы для загрузки каждой картинки посылать отдельный запроса веб серверу.
я выгрузку/загрузку делаю обычным скл-запросом (как из рнр-админ примерно) UPDATE... CREATE IF NOT EXIST...
так на много проще. в таблице ведь находится ссылка на картинку, или на имя файла с картинкой (ряд вариантов есть). запустил запрос, потом картинки в нужное место залил, и все.
а если картинки хранятся непосредственно в таблице - это не есть гуд.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua