First set of modifications
This commit is contained in:
113
workflow/engine/classes/Zip_File.php
Normal file
113
workflow/engine/classes/Zip_File.php
Normal file
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
/*--------------------------------------------------
|
||||
* TAR/GZIP/BZIP2/ZIP ARCHIVE CLASSES 2.1
|
||||
* By Devin Doucette
|
||||
* Copyright (c) 2005 Devin Doucette
|
||||
* Email: darksnoopy@shaw.ca
|
||||
*--------------------------------------------------
|
||||
* Email bugs/suggestions to darksnoopy@shaw.ca
|
||||
*--------------------------------------------------
|
||||
* This script has been created and released under
|
||||
* the GNU GPL and is free to use and redistribute
|
||||
* only if this copyright statement is not removed
|
||||
*--------------------------------------------------*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @package workflow.engine.classes
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class is derived from the class archive, is imployed to use files .
|
||||
* zip
|
||||
*
|
||||
* @package workflow.engine.classes
|
||||
*/class zip_file extends archive
|
||||
{
|
||||
|
||||
public function zip_file ($name)
|
||||
{
|
||||
$this->archive( $name );
|
||||
$this->options['type'] = "zip";
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is used to create archives .
|
||||
* zip
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function create_zip ()
|
||||
{
|
||||
$files = 0;
|
||||
$offset = 0;
|
||||
$central = "";
|
||||
if (! empty( $this->options['sfx'] )) {
|
||||
if ($fp = @fopen( $this->options['sfx'], "rb" )) {
|
||||
$temp = fread( $fp, filesize( $this->options['sfx'] ) );
|
||||
fclose( $fp );
|
||||
$this->add_data( $temp );
|
||||
$offset += strlen( $temp );
|
||||
unset( $temp );
|
||||
} else {
|
||||
$this->error[] = "Could not open sfx module from {$this->options['sfx']}.";
|
||||
}
|
||||
}
|
||||
$pwd = getcwd();
|
||||
chdir( $this->options['basedir'] );
|
||||
foreach ($this->files as $current) {
|
||||
if ($current['name'] == $this->options['name']) {
|
||||
continue;
|
||||
}
|
||||
$timedate = explode( " ", date( "Y n j G i s", $current['stat'][9] ) );
|
||||
$timedate = ($timedate[0] - 1980 << 25) | ($timedate[1] << 21) | ($timedate[2] << 16) | ($timedate[3] << 11) | ($timedate[4] << 5) | ($timedate[5]);
|
||||
$block = pack( "VvvvV", 0x04034b50, 0x000A, 0x0000, (isset( $current['method'] ) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate );
|
||||
if ($current['stat'][7] == 0 && $current['type'] == 5) {
|
||||
$block .= pack( "VVVvv", 0x00000000, 0x00000000, 0x00000000, strlen( $current['name2'] ) + 1, 0x0000 );
|
||||
$block .= $current['name2'] . "/";
|
||||
$this->add_data( $block );
|
||||
$central .= pack( "VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, (isset( $current['method'] ) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, 0x00000000, 0x00000000, 0x00000000, strlen( $current['name2'] ) + 1, 0x0000, 0x0000, 0x0000, 0x0000, $current['type'] == 5 ? 0x00000010 : 0x00000000, $offset );
|
||||
$central .= $current['name2'] . "/";
|
||||
$files ++;
|
||||
$offset += (31 + strlen( $current['name2'] ));
|
||||
} elseif ($current['stat'][7] == 0) {
|
||||
$block .= pack( "VVVvv", 0x00000000, 0x00000000, 0x00000000, strlen( $current['name2'] ), 0x0000 );
|
||||
$block .= $current['name2'];
|
||||
$this->add_data( $block );
|
||||
$central .= pack( "VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, (isset( $current['method'] ) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, 0x00000000, 0x00000000, 0x00000000, strlen( $current['name2'] ), 0x0000, 0x0000, 0x0000, 0x0000, $current['type'] == 5 ? 0x00000010 : 0x00000000, $offset );
|
||||
$central .= $current['name2'];
|
||||
$files ++;
|
||||
$offset += (30 + strlen( $current['name2'] ));
|
||||
} elseif ($fp = @fopen( $current['name'], "rb" )) {
|
||||
$temp = fread( $fp, $current['stat'][7] );
|
||||
fclose( $fp );
|
||||
$crc32 = G::encryptCrc32( $temp );
|
||||
if (! isset( $current['method'] ) && $this->options['method'] == 1) {
|
||||
$temp = gzcompress( $temp, $this->options['level'] );
|
||||
$size = strlen( $temp ) - 6;
|
||||
$temp = substr( $temp, 2, $size );
|
||||
} else {
|
||||
$size = strlen( $temp );
|
||||
}
|
||||
$block .= pack( "VVVvv", $crc32, $size, $current['stat'][7], strlen( $current['name2'] ), 0x0000 );
|
||||
$block .= $current['name2'];
|
||||
$this->add_data( $block );
|
||||
$this->add_data( $temp );
|
||||
unset( $temp );
|
||||
$central .= pack( "VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, (isset( $current['method'] ) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, $crc32, $size, $current['stat'][7], strlen( $current['name2'] ), 0x0000, 0x0000, 0x0000, 0x0000, 0x00000000, $offset );
|
||||
$central .= $current['name2'];
|
||||
$files ++;
|
||||
$offset += (30 + strlen( $current['name2'] ) + $size);
|
||||
} else {
|
||||
$this->error[] = "Could not open file {$current['name']} for reading. It was not added.";
|
||||
}
|
||||
}
|
||||
$this->add_data( $central );
|
||||
$this->add_data( pack( "VvvvvVVv", 0x06054b50, 0x0000, 0x0000, $files, $files, strlen( $central ), $offset, ! empty( $this->options['comment'] ) ? strlen( $this->options['comment'] ) : 0x0000 ) );
|
||||
if (! empty( $this->options['comment'] )) {
|
||||
$this->add_data( $this->options['comment'] );
|
||||
}
|
||||
chdir( $pwd );
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user