Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/wp-conte.../plugins/smart-sl.../Nextend/Framewor.../Misc/Zip
File: Creator.php
<?php
[0] Fix | Delete
[1] Fix | Delete
namespace Nextend\Framework\Misc\Zip;
[2] Fix | Delete
[3] Fix | Delete
[4] Fix | Delete
/**
[5] Fix | Delete
* Zip file creation class.
[6] Fix | Delete
* Makes zip files.
[7] Fix | Delete
*
[8] Fix | Delete
* @access public
[9] Fix | Delete
* @package PhpMyAdmin
[10] Fix | Delete
* @see Official ZIP file format: http://www.pkware.com/support/zip-app-note
[11] Fix | Delete
*/
[12] Fix | Delete
class Creator {
[13] Fix | Delete
[14] Fix | Delete
/**
[15] Fix | Delete
* Whether to echo zip as it's built or return as string from -> file
[16] Fix | Delete
*
[17] Fix | Delete
* @var boolean $doWrite
[18] Fix | Delete
*/
[19] Fix | Delete
var $doWrite = false;
[20] Fix | Delete
[21] Fix | Delete
/**
[22] Fix | Delete
* Array to store compressed data
[23] Fix | Delete
*
[24] Fix | Delete
* @var array $datasec
[25] Fix | Delete
*/
[26] Fix | Delete
var $datasec = array();
[27] Fix | Delete
[28] Fix | Delete
/**
[29] Fix | Delete
* Central directory
[30] Fix | Delete
*
[31] Fix | Delete
* @var array $ctrl_dir
[32] Fix | Delete
*/
[33] Fix | Delete
var $ctrl_dir = array();
[34] Fix | Delete
[35] Fix | Delete
/**
[36] Fix | Delete
* End of central directory record
[37] Fix | Delete
*
[38] Fix | Delete
* @var string $eof_ctrl_dir
[39] Fix | Delete
*/
[40] Fix | Delete
var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
[41] Fix | Delete
[42] Fix | Delete
/**
[43] Fix | Delete
* Last offset position
[44] Fix | Delete
*
[45] Fix | Delete
* @var integer $old_offset
[46] Fix | Delete
*/
[47] Fix | Delete
var $old_offset = 0;
[48] Fix | Delete
[49] Fix | Delete
[50] Fix | Delete
/**
[51] Fix | Delete
* Sets member variable this -> doWrite to true
[52] Fix | Delete
* - Should be called immediately after class instantiantion
[53] Fix | Delete
* - If set to true, then ZIP archive are echo'ed to STDOUT as each
[54] Fix | Delete
* file is added via this -> addfile(), and central directories are
[55] Fix | Delete
* echoed to STDOUT on final call to this -> file(). Also,
[56] Fix | Delete
* this -> file() returns an empty string so it is safe to issue a
[57] Fix | Delete
* "echo $zipfile;" command
[58] Fix | Delete
*
[59] Fix | Delete
* @access public
[60] Fix | Delete
*
[61] Fix | Delete
* @return void
[62] Fix | Delete
*/
[63] Fix | Delete
function setDoWrite() {
[64] Fix | Delete
$this->doWrite = true;
[65] Fix | Delete
} // end of the 'setDoWrite()' method
[66] Fix | Delete
[67] Fix | Delete
/**
[68] Fix | Delete
* Converts an Unix timestamp to a four byte DOS date and time format (date
[69] Fix | Delete
* in high two bytes, time in low two bytes allowing magnitude comparison).
[70] Fix | Delete
*
[71] Fix | Delete
* @param integer $unixtime the current Unix timestamp
[72] Fix | Delete
*
[73] Fix | Delete
* @return integer the current date in a four byte DOS format
[74] Fix | Delete
*
[75] Fix | Delete
* @access private
[76] Fix | Delete
*/
[77] Fix | Delete
function unix2DosTime($unixtime = 0) {
[78] Fix | Delete
$timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
[79] Fix | Delete
[80] Fix | Delete
if ($timearray['year'] < 1980) {
[81] Fix | Delete
$timearray['year'] = 1980;
[82] Fix | Delete
$timearray['mon'] = 1;
[83] Fix | Delete
$timearray['mday'] = 1;
[84] Fix | Delete
$timearray['hours'] = 0;
[85] Fix | Delete
$timearray['minutes'] = 0;
[86] Fix | Delete
$timearray['seconds'] = 0;
[87] Fix | Delete
} // end if
[88] Fix | Delete
[89] Fix | Delete
return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
[90] Fix | Delete
} // end of the 'unix2DosTime()' method
[91] Fix | Delete
[92] Fix | Delete
[93] Fix | Delete
/**
[94] Fix | Delete
* Adds "file" to archive
[95] Fix | Delete
*
[96] Fix | Delete
* @param string $data file contents
[97] Fix | Delete
* @param string $name name of the file in the archive (may contains the path)
[98] Fix | Delete
* @param integer $time the current timestamp
[99] Fix | Delete
*
[100] Fix | Delete
* @access public
[101] Fix | Delete
*
[102] Fix | Delete
* @return void
[103] Fix | Delete
*/
[104] Fix | Delete
function addFile($data, $name, $time = 0) {
[105] Fix | Delete
$name = str_replace('\\', '/', $name);
[106] Fix | Delete
[107] Fix | Delete
$hexdtime = pack('V', $this->unix2DosTime($time));
[108] Fix | Delete
[109] Fix | Delete
$fr = "\x50\x4b\x03\x04";
[110] Fix | Delete
$fr .= "\x14\x00"; // ver needed to extract
[111] Fix | Delete
$fr .= "\x00\x00"; // gen purpose bit flag
[112] Fix | Delete
$fr .= "\x08\x00"; // compression method
[113] Fix | Delete
$fr .= $hexdtime; // last mod time and date
[114] Fix | Delete
[115] Fix | Delete
// "local file header" segment
[116] Fix | Delete
$unc_len = strlen($data);
[117] Fix | Delete
$crc = crc32($data);
[118] Fix | Delete
$zdata = gzcompress($data);
[119] Fix | Delete
$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
[120] Fix | Delete
$c_len = strlen($zdata);
[121] Fix | Delete
$fr .= pack('V', $crc); // crc32
[122] Fix | Delete
$fr .= pack('V', $c_len); // compressed filesize
[123] Fix | Delete
$fr .= pack('V', $unc_len); // uncompressed filesize
[124] Fix | Delete
$fr .= pack('v', strlen($name)); // length of filename
[125] Fix | Delete
$fr .= pack('v', 0); // extra field length
[126] Fix | Delete
$fr .= $name;
[127] Fix | Delete
[128] Fix | Delete
// "file data" segment
[129] Fix | Delete
$fr .= $zdata;
[130] Fix | Delete
[131] Fix | Delete
// echo this entry on the fly, ...
[132] Fix | Delete
if ($this->doWrite) {
[133] Fix | Delete
// PHPCS - The value contains zip file binary data, so nothing to escape
[134] Fix | Delete
echo $fr; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
[135] Fix | Delete
} else { // ... OR add this entry to array
[136] Fix | Delete
$this->datasec[] = $fr;
[137] Fix | Delete
}
[138] Fix | Delete
[139] Fix | Delete
// now add to central directory record
[140] Fix | Delete
$cdrec = "\x50\x4b\x01\x02";
[141] Fix | Delete
$cdrec .= "\x00\x00"; // version made by
[142] Fix | Delete
$cdrec .= "\x14\x00"; // version needed to extract
[143] Fix | Delete
$cdrec .= "\x00\x00"; // gen purpose bit flag
[144] Fix | Delete
$cdrec .= "\x08\x00"; // compression method
[145] Fix | Delete
$cdrec .= $hexdtime; // last mod time & date
[146] Fix | Delete
$cdrec .= pack('V', $crc); // crc32
[147] Fix | Delete
$cdrec .= pack('V', $c_len); // compressed filesize
[148] Fix | Delete
$cdrec .= pack('V', $unc_len); // uncompressed filesize
[149] Fix | Delete
$cdrec .= pack('v', strlen($name)); // length of filename
[150] Fix | Delete
$cdrec .= pack('v', 0); // extra field length
[151] Fix | Delete
$cdrec .= pack('v', 0); // file comment length
[152] Fix | Delete
$cdrec .= pack('v', 0); // disk number start
[153] Fix | Delete
$cdrec .= pack('v', 0); // internal file attributes
[154] Fix | Delete
$cdrec .= pack('V', 32); // external file attributes
[155] Fix | Delete
// - 'archive' bit set
[156] Fix | Delete
[157] Fix | Delete
$cdrec .= pack('V', $this->old_offset); // relative offset of local header
[158] Fix | Delete
$this->old_offset += strlen($fr);
[159] Fix | Delete
[160] Fix | Delete
$cdrec .= $name;
[161] Fix | Delete
[162] Fix | Delete
// optional extra field, file comment goes here
[163] Fix | Delete
// save to central directory
[164] Fix | Delete
$this->ctrl_dir[] = $cdrec;
[165] Fix | Delete
} // end of the 'addFile()' method
[166] Fix | Delete
[167] Fix | Delete
[168] Fix | Delete
/**
[169] Fix | Delete
* Echo central dir if ->doWrite==true, else build string to return
[170] Fix | Delete
*
[171] Fix | Delete
* @return string if ->doWrite {empty string} else the ZIP file contents
[172] Fix | Delete
*
[173] Fix | Delete
* @access public
[174] Fix | Delete
*/
[175] Fix | Delete
function file() {
[176] Fix | Delete
$ctrldir = implode('', $this->ctrl_dir);
[177] Fix | Delete
$header = $ctrldir . $this->eof_ctrl_dir . pack('v', sizeof($this->ctrl_dir)) . //total #of entries "on this disk"
[178] Fix | Delete
pack('v', sizeof($this->ctrl_dir)) . //total #of entries overall
[179] Fix | Delete
pack('V', strlen($ctrldir)) . //size of central dir
[180] Fix | Delete
pack('V', $this->old_offset) . //offset to start of central dir
[181] Fix | Delete
"\x00\x00"; //.zip file comment length
[182] Fix | Delete
[183] Fix | Delete
if ($this->doWrite) { // Send central directory & end ctrl dir to STDOUT
[184] Fix | Delete
[185] Fix | Delete
// PHPCS - The value is zip file binary header, so nothing to escape.
[186] Fix | Delete
echo $header; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
[187] Fix | Delete
[188] Fix | Delete
return ""; // Return empty string
[189] Fix | Delete
} else { // Return entire ZIP archive as string
[190] Fix | Delete
$data = implode('', $this->datasec);
[191] Fix | Delete
[192] Fix | Delete
return $data . $header;
[193] Fix | Delete
}
[194] Fix | Delete
} // end of the 'file()' method
[195] Fix | Delete
}
[196] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function