_archiveFileName; } /** * returns the number of files that are going to be added to ZIP * without reopenning the stream to file. * * @return int */ public function getNewAddedFilesSize() { return $this->_newAddedFilesSize; } /** * sets the number of files that are going to be added to ZIP * without reopenning the stream to file. if no size is specified, default is 100. * * @param int * @return ZipArchiveImproved self reference */ public function setNewlAddedFilesSize($size = 100) { if (empty($size) || ! is_int($size) || $size < 1) { $size = 100; } $this->_newAddedFilesSize = $size; return $this; } /** * opens a stream to a ZIP archive file. calls the ZipArchive::open() internally. * overwrites ZipArchive::open() to add the archiveFileName functionality. * * @param string $fileName * @param int $flags * return mixed */ public function open($fileName, $flags = null) { $this->_archiveFileName = $fileName; $this->_newAddedFilesCounter = 0; return parent::open($fileName, $flags); } /** * closes the stream to ZIP archive file. calls the ZipArchive::close() internally. * overwrites ZipArchive::close() to add the archiveFileName functionality. * * @return bool */ public function close() { $this->_archiveFileName = null; $this->_newAddedFilesCounter = 0; return parent::close(); } /** * closes the connection to ZIP file and openes the connection again. * * @return bool */ public function reopen() { $archiveFileName = $this->_archiveFileName; if ( ! $this->close()) { return false; } return $this->open($archiveFileName, self::CREATE); } /** * adds a file to a ZIP archive from the given path. calls the ZipArchive::addFile() internally. * overwrites ZipArchive::addFile() to handle maximum file connections in operating systems. * * @param string $fileName the path to file to be added to archive * @param string [optional] $localname the name of the file in the ZIP archive * @param integer $start * @param integer $length * @return bool */ public function addFile($fileName, $localname = null, $start = 0, $length = 0) { if ($this->_newAddedFilesCounter >= $this->_newAddedFilesSize) { $this->reopen(); } $added = parent::addFile($fileName, $localname, $start, $length); if ($added) { $this->_newAddedFilesCounter ++; } return $added; } }