function apachesolr_confgen_zipfile::addFile in Apache Solr Config Generator 7
Same name and namespace in other branches
- 8 lib/apachesolr_confgen_zipfile.php \apachesolr_confgen_zipfile::addFile()
- 6 lib/apachesolr_confgen_zipfile.php \apachesolr_confgen_zipfile::addFile()
Adds "file" to archive
@access public
Parameters
string file contents:
string name of the file in the archive (may contains the path):
integer the current timestamp:
1 call to apachesolr_confgen_zipfile::addFile()
- apachesolr_confgen_zipfile::addFiles in lib/
apachesolr_confgen_zipfile.php - A Wrapper of original addFile Function
File
- lib/
apachesolr_confgen_zipfile.php, line 163 - Zip file creation class to pack Apache Solr configuration files
Class
- apachesolr_confgen_zipfile
- Zip file creation class. Makes zip files.
Code
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 = "PK\3\4";
$fr .= "\24\0";
// ver needed to extract
$fr .= "\0\0";
// gen purpose bit flag
$fr .= "\10\0";
// 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 = "PK\1\2";
$cdrec .= "\0\0";
// version made by
$cdrec .= "\24\0";
// version needed to extract
$cdrec .= "\0\0";
// gen purpose bit flag
$cdrec .= "\10\0";
// 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;
}