Create Zip
<form action="<?=$_SERVER[`PHP_SELF`]?>" method="post">
<input type="submit" name="sub" value="create zip"/>
</form>
<?php
$imagedir="upload_pic";
$zipname="myzip.zip";
if($_POST[`sub`]!=""){
$ziper = new zipfile();
$ziper->addFiles(getAllFile($imagedir)); // getAllFile($imagedir) returns array of files
$ziper->output($zipname);
echo `<a href="`.$zipname.`">Download zip</a>`;
}
?>
<?php
/*
Don`t edit anything.........................................................
*/
class zipfile
{
var $datasec = array();
var $ctrl_dir = array();
var $eof_ctrl_dir = "x50x4bx05x06x00x00x00x00";
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 = "x50x4bx03x04";
$fr .= "x14x00"; // ver needed to extract
$fr .= "x00x00"; // gen purpose bit flag
$fr .= "x08x00"; // 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 = "x50x4bx01x02";
$cdrec .= "x00x00"; // version made by
$cdrec .= "x14x00"; // version needed to extract
$cdrec .= "x00x00"; // gen purpose bit flag
$cdrec .= "x08x00"; // 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
"x00x00"; // .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);
}
}
}
function output($file)
{
$fp=fopen($file,"w");
fwrite($fp,$this->file());
fclose($fp);
}
}
function getAllFile($dir)
{
$myarray=array();
if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle))) {
if($file!=="." && $file!="..")
$myarray[]=$dir."/$file";
}
closedir($handle);
}
return $myarray;
}
?>
Upload large file
There are three ways to do this task which are below.
1) .htaccess
2) php.ini
3) httpd.conf
When you are working in localhost than you may change and increase the upload file size limit using any of the above. But the best way is to do with .htaccess as when your site will be on server than you may not have access of php.ini and httpd.conf. You can make .htaccess file , write the below rules and you will get the solution to increase the upload file size.
Below is the rules of htaccess using which you can use to upload a large file using file field of the form and copy() OR move_uploaded_file() function in PHP.
php_value upload_max_filesize 32M
php_value post_max_size 32M
php_value max_execution_time 360
php_value max_input_time 360
That's it. Now you can upload the file with size up-to 32MB.
In the above .htaccess rules,uploading capability is increased by above rules which are explained below.
Rule 1: upload_max_filesize sets maximum file size for uploading.
Rule 2: post_max_size sets maximum size of the post data.
Rule 3: max_execution_time sets maximum time in seconds a script is allowed to run before it is terminated.
Rule 4: max_input_time sets maximum time in seconds a script is allowed to parse input data of HTML form.
You can set the value of these parameters as per your file size.
You can also set these values from php.ini or httpd.conf file by searching these name and increase the size limit as per your needs.