Lifequest
Временной лог
Привет, Гость
  Войти…
Регистрация
  Сообщества
Опросы
Тесты
  Фоторедактор
Интересы
Поиск пользователей
  Дуэли
Аватары
Гороскоп
  Кто, Где, Когда
Игры
В онлайне
  Позитивки
Online game О!
  Случайный дневник
MindMix
Ещё…↓вниз
Отключить дизайн


Зарегистрироваться

Логин:
Пароль:
   

Забыли пароль?


 
yes
Получи свой дневник!

Lifequest > Программирование


Пользователи c интересом "Программирование".

вторник, 14 августа 2007 г.
Wisdom 04:36:05
Запись только для зарегистрированных пользователей.
вторник, 1 мая 2007 г.
Wisdom 13:43:47
Запись только для зарегистрированных пользователей.
среда, 14 февраля 2007 г.
Создание zip архивов средствами php Wisdom 16:23:43
Я некоторое время ковыряю проблему динамического архивирования множественных файлов из скрипта php.

М похоже только что я нашел в сети решение.
По адресу http://www.zend.com­/zend/spotlight/crea­ting-zip-files3.php лежит статья,
но там есть неисправленные ошибки в коде самой статьи и скрипт в том виде в котором он там лежит не работает правильно.

Похоже только что я исправил ошибку и наконец прочитал тот архив, который был создан скриптом.

Исключительно для повышения энтропии вселенной вот код: Подробнее…
<?php
class zipfile
{
var $datasec = array();
var $ctrl_dir = array();
var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
var $old_offset = 0;

function add_dir($name)
{
$name = str_replace("\\", "/", $name);

$fr = "\x50\x4b\x03\x04";
$fr .= "\x0a\x00";
$fr .= "\x00\x00";
$fr .= "\x00\x00";
$fr .= "\x00\x00\x00\x00";

/*These null values represent a range of
values that provide extra information in
the Zip file, including compressed/uncompressed
file sizes, CRC32 checks, and other inconsequential information*/
$fr .= pack("V",0);
$fr .= pack("V",0);
$fr .= pack("V",0);
$fr .= pack("v", strlen($name) );
$fr .= pack("v", 0 );
$fr .= $name;
$fr .= pack("V", 0);
$fr .= pack("V", 0);
$fr .= pack("V", 0);

$this -> datasec[] = $fr;

$new_offset = strlen(implode("", $this->datasec));

$cdrec = "\x50\x4b\x01\x02";
$cdrec .="\x00\x00";
$cdrec .="\x0a\x00";
$cdrec .="\x00\x00";
$cdrec .="\x00\x00";
$cdrec .="\x00\x00\x00\x00";
$cdrec .= pack("V",0);
$cdrec .= pack("V",0);
$cdrec .= pack("V",0);
$cdrec .= pack("v", strlen($name) );
$cdrec .= pack("v", 0 );
$cdrec .= pack("v", 0 );
$cdrec .= pack("v", 0 );
$cdrec .= pack("v", 0 );
$ext = "\x00\x00\x10\x00";
$ext = "\xff\xff\xff\xff";
$cdrec .= pack("V", 16 );
$cdrec .= pack("V", $this -> old_offset );
$cdrec .= $name;

$this -> ctrl_dir[] = $cdrec;
$this -> old_offset = $new_offset;
return;
}

function add_file($data, $name)
{
$name = str_replace("\\", "/", $name);
$unc_len = strlen($data);
$crc = crc32($data);
$zdata = gzcompress($data);
$zdata = substr ($zdata, 2, -4);
$c_len = strlen($zdata);

$fr = "\x50\x4b\x03\x04";
$fr .= "\x14\x00";
$fr .= "\x00\x00";
$fr .= "\x08\x00";
$fr .= "\x00\x00\x00\x00";
$fr .= pack("V",$crc);
$fr .= pack("V",$c_len);
$fr .= pack("V",$unc_len);
$fr .= pack("v", strlen($name) );
$fr .= pack("v", 0 );
$fr .= $name;
$fr .= $zdata;
$fr .= pack("V",$crc);
$fr .= pack("V",$c_len);
$fr .= pack("V",$unc_len);

$this -> datasec[] = $fr;

$new_offset = strlen(implode("", $this->datasec));

$cdrec = "\x50\x4b\x01\x02";
$cdrec .="\x00\x00";
$cdrec .="\x14\x00";
$cdrec .="\x00\x00";
$cdrec .="\x08\x00";
$cdrec .="\x00\x00\x00\x00";
$cdrec .= pack("V",$crc);
$cdrec .= pack("V",$c_len);
$cdrec .= pack("V",$unc_len);
$cdrec .= pack("v", strlen($name) );
$cdrec .= pack("v", 0 );
$cdrec .= pack("v", 0 );
$cdrec .= pack("v", 0 );
$cdrec .= pack("v", 0 );
$cdrec .= pack("V", 32 );
$cdrec .= pack("V", $this -> old_offset );

$this -> old_offset = $new_offset;

$cdrec .= $name;
$this -> ctrl_dir[] = $cdrec;
}



function file()
{
$data = implode("", $this -> datasec);
$ctrldir = implode("", $this -> ctrl_dir);

return
$data.
$ctrldir.
$this -> eof_ctrl_dir.
pack("v", sizeof($this -> ctrl_dir)).
pack("v", sizeof($this -> ctrl_dir)).
pack("V", strlen($ctrldir)).
pack("V", strlen($data)).
"\x00\x00";
}

}
?>

Заюзать это дело знаит написать

<?php
include "zipfile.php";
$zip = new zipfile();
$zip->add_file(file_get_contents("test1.txt"),"test1.txt");
$zip->add_file(file_get_contents("test2.txt"),"test2.txt");
file_put_contents("zip.zip", $zip->file());
?>

результат выводит функция file()

ура, товарищи.


Спасибо Джону Коггесталю, Pavel-у и louis woods-у.

Незнаю зачем пишу.....
Может пригодиться кому....
Поисковики же находят вещт в этом дневнике...

Категории: Программирование
комментировать 9 комментариев | Прoкoммeнтировaть


Lifequest > Программирование

читай на форуме:
...
Сделайте дизайн
пройди тесты:
А что если я незнаю что такое...
Разве любить обязательно?
Мальчики сначало подумайте ( часть 25).
читай в дневниках:
чисто случайно)
чужая
моя милая детка)

  Copyright © 2001—2018 MindMix
Авторами текстов, изображений и видео, размещённых на этой странице, являются пользователи сайта.
Задать вопрос.
Написать об ошибке.
Оставить предложения и комментарии.
Помощь в пополнении позитивок.
Сообщить о неприличных изображениях.
Информация для родителей.
Пишите нам на e-mail.
Разместить Рекламу.
If you would like to report an abuse of our service, such as a spam message, please contact us.
Если Вы хотите пожаловаться на содержимое этой страницы, пожалуйста, напишите нам.

↑вверх