Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

06.05.2008, 13:02
|
|
Новичок
Регистрация: 26.03.2007
Сообщений: 20
Провел на форуме: 30027
Репутация:
2
|
|
php архиватор
Ищу скрипт php архиватора, который сможет создавать архивы из нескольких файлов, например:
есть список предположим из 20 ссылок на файлы, возле кадой ссылки есть чекбокс. Если нажать просто на ссылку то качается один из 20 файлов, а если выделить несколько чекбоксов и ниже нажать кнопку скачать, то создается архив с сгенерированным именем на некоторе время(пусть будет 3 часа) , а в этом архиве будут выделенные чекбоком файлы. Через 3 часа архив должен сам удалится...
Чтото подобное реализовано здесь: http://gdmods.alibom.net/index.php?action=master&sm=show
зы: есть плагин для одного движка, там можно каждый файл архивировать по отдельности, но нельзя архивировать несколько файлов сразу, если пригодится я могу выложить
|
|
|

06.05.2008, 19:27
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
system("rar a -m0 $arc $files &")
|
|
|

06.05.2008, 20:09
|
|
Новичок
Регистрация: 26.03.2007
Сообщений: 20
Провел на форуме: 30027
Репутация:
2
|
|
А можно маленький пример?
Что должно быть в $arc и $files ?
|
|
|

06.05.2008, 21:06
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
ну прочитай хелп к рару или другому архиватору.
|
|
|

06.05.2008, 21:23
|
|
Постоянный
Регистрация: 20.12.2007
Сообщений: 577
Провел на форуме: 1636674
Репутация:
171
|
|
http://ua.php.net/manual/ru/book.zip.php
у них-же есть модули для прямой работы с зип, бз2. зачем морочиться?
|
|
|

06.05.2008, 23:18
|
|
Пачка маргарина
Регистрация: 14.07.2005
Сообщений: 964
Провел на форуме: 4646474
Репутация:
1424
|
|
под себя переделвал php class tar
PHP код:
<?
function Ch($b) {
$u=0;
for($i=0;$i<512;$i++)
$u+=ord($b[$i]);
for($i=0;$i<8;$i++)
$u-=ord($b[148+$i]);
$u+=ord(" ")*8;
return $u;
}
$arrfw=array('./');
$arrfile=array();
$ife=0;
while(++$ife<=count($arrfw)){
$pathfw=$arrfw[$ife-1];
if(is_readable($pathfw)){
if($hfw=opendir($pathfw)){
while(false!==($ffw=readdir($hfw))){
$ffw=$pathfw.$ffw;
if(!preg_match('/\/\.+$/',$ffw)){
if(is_dir($ffw) && !preg_match('!/log$!',$ffw)){array_push($arrfw,$ffw.'/');print $ffw.'<br>';}
else array_push($arrfile,$ffw);
}}
closedir($hfw);}}}
$fpp=fopen('x.tar',"wb");
$pq=preg_quote($arrfw[0]);
array_shift($arrfw);
foreach($arrfw as $dn){
$in=@stat($dn);
$dn=preg_replace("!^$pq!",'',$dn);
$hr=str_pad($dn,100,"\0").str_pad(decoct($in["mode"]),7,"0",STR_PAD_LEFT)."\0".str_pad(decoct($in["uid"]),7,"0",STR_PAD_LEFT)."\0".str_pad(decoct($in["gid"]),7,"0",STR_PAD_LEFT)."\0".str_pad(decoct(0),11,"0",STR_PAD_LEFT)."\0".str_pad(decoct($in["ctime"]),11,"0",STR_PAD_LEFT)."\0".str_repeat(" ",8)."5".str_repeat("\0",100).str_pad("ustar",6," ")." "."\0".str_pad("",32,"\0").str_pad("",32,"\0").str_repeat("\0",8).str_repeat("\0",8).str_repeat("\0",155).str_repeat("\0",12);
$cm=str_pad(decoct(Ch($hr)),6,"0",STR_PAD_LEFT);
for($i=0;$i<6;$i++){$hr[(148+$i)]=substr($cm,$i,1);}
$hr[154]="\0";
$hr[155]=" ";
fwrite($fpp,$hr);
}
foreach($arrfile as $fl){
if(filesize($fl)>31457280)break;
$in=@stat($fl);
$fp=@fopen($fl,"rb");
$fi=@fread($fp,filesize($fl));
@fclose($fp);
$fl=preg_replace("!^$pq!",'',$fl);
$he=str_pad($fl,100,"\0").str_pad(decoct($in["mode"]),7,"0",STR_PAD_LEFT)."\0".str_pad(decoct($in["uid"]),7,"0",STR_PAD_LEFT)."\0".str_pad(decoct($in["gid"]),7,"0",STR_PAD_LEFT)."\0".str_pad(decoct($in["size"]),11,"0",STR_PAD_LEFT)."\0".str_pad(decoct($in["ctime"]),11,"0",STR_PAD_LEFT)."\0".str_repeat(" ",8)."0".str_repeat("\0",100).str_pad("ustar",6," ")." \0".str_pad("",32,"\0").str_pad("",32,"\0").str_repeat("\0",183);
$cm=str_pad(decoct(Ch($he)),6,"0",STR_PAD_LEFT);
for($i=0;$i<6;$i++){$he[(148+$i)]=substr($cm,$i,1);}
$he[154]="\0";
$he[155]=" ";
$fi=str_pad($fi,(ceil($in["size"]/512)*512),"\0");
fwrite($fpp,$he.$fi);
}
fwrite($fpp,str_repeat("\0",512));
fclose($fpp);
после тара можно в gzip или bzip запихнуть это не проблема.
Последний раз редактировалось ShAnKaR; 06.05.2008 в 23:21..
|
|
|

06.05.2008, 23:26
|
|
Новичок
Регистрация: 26.03.2007
Сообщений: 20
Провел на форуме: 30027
Репутация:
2
|
|
у меня есть класс pclzip
просто я незнаю как засунуть в архим не один файл, а несколько выбранных...
чтобы заархивировать файл используется всего лиш одна функция которая передает классу данные для упаковки...я просто непонимаю как передать несколько файлов....
если надо, могу выложить сам класс
вот сама функция:
PHP код:
function file_funct($action,$dir,$file,$tmp="") {
global $locale;
$error = "";
if ($action == "add_arh") {
$file_name = substr($file,0,strrpos($file,"."));
if (!file_exists(BASEDIR.$dir.$file)){$error = $locale['fmf029']."<br>\n";}
else if (file_exists(BASEDIR.$dir.$file_name.".zip")){$error = $locale['fmf028']."<br>\n";}
if(!$error) {
$pclzip = new PclZip(BASEDIR.$dir.$file_name.".zip");
$arh = $pclzip->create(BASEDIR.$dir.$file, PCLZIP_OPT_COMMENT, "подпись к архиву", PCLZIP_OPT_REMOVE_PATH, BASEDIR.$dir);
if ($arh == 0) {
$error = $locale['fmf013']."<br>\n";
opentable("<center>".$locale['fmf020']."</center>");
echo "<center>$error <a href='".FUSION_SELF."?dir=$dir'>".$locale['fmf022']."</a></center>";
closetable();
} else {
chmod(BASEDIR.$dir.$file_name.".zip",0644);
redirect(FUSION_SELF."?dir=$dir");
}
} else {
opentable("<center>".$locale['fmf020']."</center>");
echo "<center>$error <a href='".FUSION_SELF."?dir=$dir'>".$locale['fmf022']."</a></center>";
closetable();
}
} else {
redirect(FUSION_SELF."?dir=$dir");
}
}
|
|
|

06.05.2008, 23:30
|
|
Пачка маргарина
Регистрация: 14.07.2005
Сообщений: 964
Провел на форуме: 4646474
Репутация:
1424
|
|
на счет моего скрипта:
там массив дается
это начальная папка, потом рекурсивно читаются все файлы в ней и по очереди тарятся, можно не делать рекурсию а в ручную на пихать в этот массив пути до нужных файлов.
вот и все.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|