[Programming] [Help] - Code Zip file,folder trên host |
17/04/2009 20:29:08 (+0700) | #1 | 177534 |
|
vnn1920
Member
|
0 |
|
|
Joined: 09/04/2009 01:10:06
Messages: 10
Offline
|
|
Mình có 1 code dùng để Zip file, folder trên host , nhưng đối với nững thư mục có dung lượng lớn , nó ko thể Zip dc , bạn nào có cách khắc phục thì giúp mình nha , thanks !
Code:
<?
@set_time_limit(3600);
$conf['dir'] = "ndkzipfiles";
if ((isset($_GET['step']))&&(!empty($_GET['step']))) $step=$_GET['step']; else $step=0;
if ((isset($_GET['dirname']))&&(!empty($_GET['dirname']))) $dirname=$_GET['dirname']; else $dirname=".";
$dirname = str_replace("../","",$dirname);
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 unix2DosTime($unixtime = 0) {
$timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
if ($timearray['year'] < 1980) {
$timearray['year'] = 1980;
$timearray['mon'] = 1;
$timearray['mday'] = 1;
$timearray['hours'] = 0;
$timearray['minutes'] = 0;
$timearray['seconds'] = 0;
} // end if
return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |
($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
} // end of the 'unix2DosTime()' method
function addFile($data, $name, $time = 0)
{
$name = str_replace('\\', '/', $name);
$dtime = dechex($this->unix2DosTime($time));
$hexdtime = '\x' . $dtime[6] . $dtime[7]
. '\x' . $dtime[4] . $dtime[5]
. '\x' . $dtime[2] . $dtime[3]
. '\x' . $dtime[0] . $dtime[1];
eval('$hexdtime = "' . $hexdtime . '";');
$fr = "\x50\x4b\x03\x04";
$fr .= "\x14\x00"; // ver needed to extract
$fr .= "\x00\x00"; // gen purpose bit flag
$fr .= "\x08\x00"; // compression method
$fr .= $hexdtime; // last mod time and date
// "local file header" segment
$unc_len = strlen($data);
$crc = crc32($data);
$zdata = gzcompress($data);
$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
$c_len = strlen($zdata);
$fr .= pack('V', $crc); // crc32
$fr .= pack('V', $c_len); // compressed filesize
$fr .= pack('V', $unc_len); // uncompressed filesize
$fr .= pack('v', strlen($name)); // length of filename
$fr .= pack('v', 0); // extra field length
$fr .= $name;
// "file data" segment
$fr .= $zdata;
// "data descriptor" segment (optional but necessary if archive is not
// served as file)
$fr .= pack('V', $crc); // crc32
$fr .= pack('V', $c_len); // compressed filesize
$fr .= pack('V', $unc_len); // uncompressed filesize
// add this entry to array
$this -> datasec[] = $fr;
// now add to central directory record
$cdrec = "\x50\x4b\x01\x02";
$cdrec .= "\x00\x00"; // version made by
$cdrec .= "\x14\x00"; // version needed to extract
$cdrec .= "\x00\x00"; // gen purpose bit flag
$cdrec .= "\x08\x00"; // compression method
$cdrec .= $hexdtime; // last mod time & date
$cdrec .= pack('V', $crc); // crc32
$cdrec .= pack('V', $c_len); // compressed filesize
$cdrec .= pack('V', $unc_len); // uncompressed filesize
$cdrec .= pack('v', strlen($name) ); // length of filename
$cdrec .= pack('v', 0 ); // extra field length
$cdrec .= pack('v', 0 ); // file comment length
$cdrec .= pack('v', 0 ); // disk number start
$cdrec .= pack('v', 0 ); // internal file attributes
$cdrec .= pack('V', 32 ); // external file attributes - 'archive' bit set
$cdrec .= pack('V', $this -> old_offset ); // relative offset of local header
$this -> old_offset += strlen($fr);
$cdrec .= $name;
// optional extra field, file comment goes here
// save to central directory
$this -> ctrl_dir[] = $cdrec;
} // end of the 'addFile()' method
function file()
{
$data = implode('', $this -> datasec);
$ctrldir = implode('', $this -> ctrl_dir);
return
$data .
$ctrldir .
$this -> eof_ctrl_dir .
pack('v', sizeof($this -> ctrl_dir)) . // total # of entries "on this disk"
pack('v', sizeof($this -> ctrl_dir)) . // total # of entries overall
pack('V', strlen($ctrldir)) . // size of central dir
pack('V', strlen($data)) . // offset to start of central dir
"\x00\x00"; // .zip file comment length
} // end of the 'file()' method
function addFiles($files /*Only Pass Array*/)
{
foreach($files as $file) {
if (is_file($file)) //directory check
{
$data = implode("",file($file));
$this->addFile($data,$file);
} else {
// $data = implode("",file("ndkziper.txt"));
// $this->addFile($data,$file."/ndkziper.txt");
}
}
}
function output($file)
{
$fp=fopen($file,"w");
fwrite($fp,$this->file());
fclose($fp);
}
} // end class
//===================================
function getdir($path=".") {
global $dirarray,$conf,$dirsize;
if ($dir = opendir($path)) {
while (false !== ($entry = @readdir($dir))) {
if (($entry!=".")&&($entry!="..")) {
$lastdot = strrpos($entry,".");
$ext = chop(strtolower(substr($entry,$lastdot+1)));
$fname = substr($entry,0,$lastdot);
if ($path!=".") $newpath = $path."/".$entry;
else $newpath = $entry;
$newpath = str_replace("//","/",$newpath);
if (($entry!="NDKziper.php")&&($entry!="ndkziper.txt")&&($entry!=$conf['dir'])) {
$dirarray[] = $newpath;
if ($fsize=@filesize($newpath)) $dirsize+=$fsize;
if (is_dir($newpath)) getdir($newpath);
}
}
}
}
}// end func
//===================================
function getcurrentdir($path=".") {
global $conf;
$dirarr = array();
if ($dir = opendir($path)) {
while (false !== ($entry = @readdir($dir))) {
if (($entry!=".")&&($entry!="..")) {
$lastdot = strrpos($entry,".");
$ext = chop(strtolower(substr($entry,$lastdot+1)));
$fname = substr($entry,0,$lastdot);
if ($path!=".") $newpath = $path."/".$entry;
else $newpath = $entry;
$newpath = str_replace("//","/",$newpath);
if (($entry!="NDKziper.php")&&($entry!="ndkziper.txt")&&($entry!=$conf['dir'])) {
$dirarr[] = $newpath;
}
}
}
}
return $dirarr;
}// end func
//=========================
function size_format($bytes="") {
$retval = "";
if ($bytes >= 1048576) {
$retval = round($bytes / 1048576 * 100 ) / 100 . " MB";
} else if ($bytes >= 1024) {
$retval = round($bytes / 1024 * 100 ) / 100 . " KB";
} else {
$retval = $bytes . " bytes";
}
return $retval;
}
//=============================
$currentdir = getcurrentdir($dirname);
sort($currentdir);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>-:[ NDK Ziper - ver 1.0 - ndkphoto.com ]:-</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<style type="text/css">
<!--
html {
overflow-x: auto;
scrollbar-face-color: #CECECE;
scrollbar-shadow-color: #6B6B6B;
scrollbar-highlight-color: #F8F8F8;
scrollbar-3dlight-color: #8A8A8A;
scrollbar-darkshadow-color: #8A8A8A;
scrollbar-track-color: #8A8A8A;
scrollbar-arrow-color: #215A8C;
}
body,td,th {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
color: #061D36;
}
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
background-color:#DCDCDC;
}
a:link {
color: #FF8400;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #FF8400;
}
a:hover {
text-decoration: none;
color: #FF6600;
}
a:active {
text-decoration: none;
color: #FF8400;
}
img { border : 0px; }
.bdr {
border: 1px solid #344559;
}
.ctittle {
font-size: 14px;
font-weight: bold;
color: #FFFFFF;
text-decoration: none;
background-color:#0063B0;
}
.mtittle {
font-size: 16px;
font-weight: bold;
color: #FFFFFF;
text-decoration: none;
background-color:#2B6082;
height:40px;
}
.ftittle {
font-size: 12px;
font-weight: bold;
color: #FFFFFF;
text-decoration: none;
background-color:#3A74AB;
height:25px;
}
.tittle {
font-size: 12px;
color: #FFFFFF;
text-decoration: none;
background-color:#3F668A;
}
.br_sp {
border-top-width: 1px;
border-top-style: dotted;
border-top-color: #003366;
color: #003333;
text-decoration: none;
font-size: 11px;
}
.btitle {
color: #FFFFFF;
font-weight: bold;
padding:5px;
}
.rowdir {
background-color:#EEEEEE;
color:#003333;
font-weight:bold;
}
.rowfile {
background-color:#FFFFFF;
}
.rowbut {
background-color:#FFFFCC;
}
-->
</style>
</head>
<body>
<script language="javascript">
/* - - - - - - - - - - - - - - - - - - - - - - -
NDK Javascript
- - - - - - - - - - - - - - - - - - - - - - - */
var ie45,ns6,ns4,dom;
if (navigator.appName=="Microsoft Internet Explorer") ie45=parseInt(navigator.appVersion)>=4;
else if (navigator.appName=="Netscape"){ ns6=parseInt(navigator.appVersion)>=5; ns4=parseInt(navigator.appVersion)<5;}
dom=ie45 || ns6;
function getobj(id) {
el = document.all ? document.all[id] : dom ? document.getElementById(id) : document.layers[id];
return el;
}
function checkall()
{
for ( i=0;i < document.finfo.elements.length ; i++ ){
if ( document.finfo.all.checked==true ){
document.finfo.elements[i].checked = true;
}
else
{
document.finfo.elements[i].checked = false;
}
}
}
</script>
<table width="100%" bgcolor="#1E476A" align=center border=0 cellspacing=1 cellpadding=1>
<tr><td align=center class="mtittle" valign="middle"><b>NDK Ziper - ver 1.0</b></td>
<td align=center class="ftittle">Coded by <a href="mailto:kesitinh265@yahoo.com">NDK</a> © 2006 </td></tr>
</table>
<br>
<? if ($step!=0) { ?>
<br />
<table width="70%" border="0" cellspacing="2" cellpadding="3" align="center" style="border:1px #666666 solid">
<tr>
<td align="center" bgcolor="#FFFFFF" height="100"><span id="status">
<p><img src="http://ndkphoto.com/images/wait.gif" width="32" height="32" /> <img src="http://ndkphoto.com/images/wait.gif" width="32" height="32" /> <img src="http://ndkphoto.com/images/wait.gif" width="32" height="32" /> <img src="http://ndkphoto.com/images/wait.gif" width="32" height="32" /> <img src="http://ndkphoto.com/images/wait.gif" width="32" height="32" /></p>
<p>Processing Zip Folders & Files selected .</p></span>
</td>
</tr>
</table>
<br>
<? } else { ?>
<form action="?step=1" id="finfo" name="finfo" method="post">
<table width="60%" border="0" cellspacing="1" cellpadding="3" align="center" style="border:1px #999999 solid">
<tr>
<td style="background-color:#2B6082; color:#FFFFFF; padding:5px;" align="left"><b>Current directory : <a href="?dirname=.">Ziper</a> <?
if ((!empty($dirname))&&($dirname!=".")) {
$lpath = explode("/",$dirname);
if (count($lpath)>1) echo "- <a href='?dirname={$lpath[0]}'>{$lpath[0]}</a>";
}
?></b></td>
</tr>
<?
for ($i=0;$i<count($currentdir);$i++) {
$entry = $currentdir[$i];
if (!is_dir($entry)) {
$class="rowfile";
$name = $entry;
} else {
$class="rowdir";
$name = "<a href='?dirname={$entry}'>{$entry}</a>";
// $name = $entry;
}
?>
<tr>
<td align="left" class="<?=$class?>"><input type="checkbox" name="zdir[]" value="<?=$entry?>" /> <?=$name?></td>
</tr>
<? } ?>
<tr>
<td align="left" style="background-color:#2B6082; color:#FFFFFF"><input type="checkbox" name="all"onclick="javascript:checkall();" /> Select all</td>
</tr>
</table>
<br />
<table width="60%" border="0" cellspacing="1" cellpadding="3" align="center" bgcolor="#FFFFFF" style="border:1px #999999 solid">
<tr>
<td>File name : <input type="text" name="filename" value="NDKziper" size="40" />.zip</td>
<td align="right"><input type="submit" name="submit" value=" Start " /></td>
</tr>
</table>
</form>
<? } ?>
<br>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="200" align="center" bgcolor="#3A74AB"><a href="NDKziper.php" class="btitle">Main</a></td>
<td align="center" bgcolor="#2B6082" class="btitle">© 2006 NDKphoto.com </td>
</tr>
</table>
<br>
</body>
</html>
<?
if ($step==1) {
$zdir = $_POST['zdir'];
if (count($zdir)>0) {
$dirarray=array();
$dirsize=0;
$zdirsize=0;
for ($i=0;$i<count($zdir);$i++) {
$ffile = $zdir[$i];
if (is_dir($ffile)) {
getdir($ffile);
} else {
if ($fsize=@filesize($ffile)) $zdirsize+=$fsize;
}
}
$zdirsize+=$dirsize;
for ($i=0;$i<count($dirarray);$i++) {
$zdir[] = $dirarray[$i];
}
if (!@is_dir($conf['dir'])) {
$res = @mkdir($conf['dir'],0777);
if (!$res) $txtout = "Cannot create dir !<br>";
} else @chmod($conf['dir'],0777);
$zipname = $_POST['filename'];
$zipname=str_replace("/","",$zipname);
if (empty($zipname)) $zipname="NDKzip";
$zipname.=".zip";
$ziper = new zipfile();
$ziper->addFiles($zdir);
$ziper->output("{$conf['dir']}/{$zipname}");
if ($fsize=@filesize("{$conf['dir']}/{$zipname}")) $zipsize=$fsize;
else $zipsize=0;
$zdirsize = size_format($zdirsize);
$zipsize = size_format($zipsize);
?>
<script language="javascript">getobj('status').innerHTML="<p><b>Zip successful !</b></p><p>Download : <a href='<?=$conf['dir']?>/<?=$zipname?>'><?=$zipname?></a></p><p>Original size : <?=$zdirsize?> Zip size : <?=$zipsize?></p>";</script>
<?
} else {
?><script language="javascript">getobj('status').innerHTML="No file or folder selected !";</script><?
}
}
?>
|
|
|
|
|
[Question] Re: [Help] - Code Zip file,folder trên host |
18/04/2009 04:18:18 (+0700) | #2 | 177596 |
|
vnn1920
Member
|
0 |
|
|
Joined: 09/04/2009 01:10:06
Messages: 10
Offline
|
|
|
|
[Question] Re: [Help] - Code Zip file,folder trên host |
18/04/2009 04:44:51 (+0700) | #3 | 177599 |
|
phonglanbiec
Member
|
0 |
|
|
Joined: 03/07/2006 20:56:00
Messages: 162
Offline
|
|
Mình kinh nghiệm chưa cao nên có gì sai sót bỏ qua. Thường thì php sẽ set time cho 1 file là 30s tức là quá 30s thì không run nữa, mà việc zip thì rất nặng nề.
Trước nay khi mình backup sever mà dùng php để zip thì chưa bao giờ thành công cả! |
|
|
|
|
[Question] Re: [Help] - Code Zip file,folder trên host |
18/04/2009 12:43:39 (+0700) | #4 | 177629 |
|
vnn1920
Member
|
0 |
|
|
Joined: 09/04/2009 01:10:06
Messages: 10
Offline
|
|
nếu như bạn nói thì ở đây nó set là 3600 :@set_time_limit(3600);
mình đã tăng thời gian lên nhưng vẫn ko dc .
bạn có cách nào ko , giúp với nhé , hiện tại mình rất cần code này có thể zip dc folder khoảng 30-40Mb (có thể hơn)
P/s: ai có cách nào giúp mình với nhé
thanks !
|
|
|
|
|
[Programming] Reply ssssssssssssss |
08/11/2009 09:23:51 (+0700) | #5 | 197832 |
heroes1412
Member
|
0 |
|
|
Joined: 19/10/2008 21:22:30
Messages: 11
Offline
|
|
Tìm file Php.ini mở ra cậu tìm dòng này
PHP Code:
max_execution_time = 60 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
memory_limit = 16M ; Maximum amount of memory a script may consume (16MB)
Tăng các giá trị đó lên , memory_limit ~~> mún nén nhiu thì tăng lên nhiu.
max_execution_time = 60; thời gian thực thi lệnh
sau khi sửa xong thì restart lại máy
Nếu dùng host ; ko chỉnh dc file này trên server ; phải dùng file .htaccess hoặc hàm
.htaccess
soạn file .htaccess có nội dung
Code:
php_value memory_limit 16M
(và tất nhiên là phải tăng cái 16 đó lên mức cậu muốn)
hàm
Bỏ code này lên đầu file
PHP Code:
ini_set("memory_limit","16M"
(và tất nhiên là phải tăng cái 16 đó lên mức cậu muốn)
và nếu chủ server cấu hình ko cho mình dùng htaccess hay dis hàm ini_set để sưa giá trị này thì chịu thui |
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|