распаковка многотомного zip архива средствами пхп

bicdibus
На сайте с 14.08.2010
Offline
136
961

Есть жырный архив(БД склайт) в 25мб максимально допустимый размер для фтп закачки на хост 10мб. Возможно ли средствами пхп распаковывать многотомные архивы?

[cerebelum.ru
Jurgen s
На сайте с 21.05.2008
Offline
153
#1

это что за хост который ограничивает размер файла загружаемого по фтп?

http://police-ua.com/ (http://police-ua.com/) Форум сотрудников МВД Украины
bicdibus
На сайте с 14.08.2010
Offline
136
#2
Jurgen's:
это что за хост который ограничивает размер файла загружаемого по фтп?

фрихосты ограничивают

Jurgen s
На сайте с 21.05.2008
Offline
153
#3

ну тогда заливайте свой сайт не в архиве, а распакованный

S
На сайте с 13.10.2014
Offline
171
#4

А что мешает побить архив при упаковке ручками (не допуская разрыва файлов) а потом распаковать их по одному?

апд.

вот покурил php.net взял оттуда. может пригодится

Simple class xZip to zip big folders into multiple parts and unzip multi zip files at once.


<?php
class xZip {
public function __construct() {}
private function _rglobRead($source, &$array = array()) {
if (!$source || trim($source) == "") {
$source = ".";
}
foreach ((array) glob($source . "/*/") as $key => $value) {
$this->_rglobRead(str_replace("//", "/", $value), $array);
}

foreach ((array) glob($source . "*.*") as $key => $value) {
$array[] = str_replace("//", "/", $value);
}
}
private function _zip($array, $part, $destination) {
$zip = new ZipArchive;
@mkdir($destination, 0777, true);

if ($zip->open(str_replace("//", "/", "{$destination}/partz{$part}.zip"), ZipArchive::CREATE)) {
foreach ((array) $array as $key => $value) {
$zip->addFile($value, str_replace(array("../", "./"), NULL, $value));
}
$zip->close();
}
}
public function zip($limit = 500, $source = NULL, $destination = "./") {
if (!$destination || trim($destination) == "") {
$destination = "./";
}

$this->_rglobRead($source, $input);
$maxinput = count($input);
$splitinto = (($maxinput / $limit) > round($maxinput / $limit, 0)) ? round($maxinput / $limit, 0) + 1 : round($maxinput / $limit, 0);

for($i = 0; $i < $splitinto; $i ++) {
$this->_zip(array_slice($input, ($i * $limit), $limit, true), $i, $destination);
}

unset($input);
return;
}
public function unzip($source, $destination) {
@mkdir($destination, 0777, true);

foreach ((array) glob($source . "/*.zip") as $key => $value) {
$zip = new ZipArchive;
if ($zip->open(str_replace("//", "/", $value)) === true) {
$zip->extractTo($destination);
$zip->close();
}
}
}

public function __destruct() {}
}

//$zip = new xZip;
//$zip->zip(500, "images/", "images_zip/");
//$zip->unzip("images_zip/", "images/");
?>

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий