protected function close_current_file($handler) {
        if ($this->currentfp !== null) {
            if (!fclose($this->currentfp)) {
                throw new moodle_exception('errorprocessingarchive', '', '', null,
                        'Failed to close output file: ' .  $this->currentfile);
            }

            // At this point we should touch the file to set its modified
            // time to $this->currentmtime. However, when extracting to the
            // temp directory, cron will delete files more than a week old,
            // so to avoid problems we leave all files at their current time.
        }

        if ($this->currentarchivepath === tgz_packer::ARCHIVE_INDEX_FILE) {
            if ($this->mode === self::MODE_LIST) {
                // When listing array, use the archive index to produce the list.
                $index = file($this->currentfile);
                $ok = true;
                foreach ($index as $num => $value) {
                    // For first line (header), check it's valid then skip it.
                    if ($num == 0) {
                        if (preg_match('~^' . preg_quote(tgz_packer::ARCHIVE_INDEX_COUNT_PREFIX) . '~', $value)) {
                            continue;
                        } else {
                            // Not valid, better ignore the file.
                            $ok = false;
                            break;
                        }
                    }
                    // Split on tabs and store in results array.
                    $values = explode("\t", trim($value));
                    $this->listresults[] = (object)array(
                        'original_pathname' => $values[0],
                        'pathname' => $values[0],
                        'mtime' => ($values[3] === '?' ? tgz_packer::DEFAULT_TIMESTAMP : (int)$values[3]),
                        'is_directory' => $values[1] === 'd',
                        'size' => (int)$values[2]);
                }
                if ($ok) {
                    $this->mode = self::MODE_LIST_COMPLETE;
                }
                unlink($this->currentfile);
            } else {
                // For index file, get number of files and delete temp file.
                $contents = file_get_contents($this->currentfile, null, null, null, 128);
                $matches = array();
                if (preg_match('~^' . preg_quote(tgz_packer::ARCHIVE_INDEX_COUNT_PREFIX) .
                        '([0-9]+)~', $contents, $matches)) {
                    $this->numfiles = (int)$matches[1];
                }
                unlink($this->currentfile);
            }
        } else {
            // Report to handler and put in results.
            if ($this->currentfp !== null) {
                $handler->tgz_end_file($this->currentarchivepath, $this->currentfile);
                $this->results[$this->currentarchivepath] = true;
            }
            $this->donefiles++;
        }

        // No longer have a current file.
        $this->currentfp = null;
        $this->currentfile = null;
        $this->currentarchivepath = null;
    }
protected function close_current_file($handler) {
        if ($this->currentfp !== null) {
            if (!fclose($this->currentfp)) {
                throw new moodle_exception('errorprocessingarchive', '', '', null,
                        'Failed to close output file: ' .  $this->currentfile);
            }

            // At this point we should touch the file to set its modified
            // time to $this->currentmtime. However, when extracting to the
            // temp directory, cron will delete files more than a week old,
            // so to avoid problems we leave all files at their current time.
        }

        if ($this->currentarchivepath === tgz_packer::ARCHIVE_INDEX_FILE) {
            if ($this->mode === self::MODE_LIST) {
                // When listing array, use the archive index to produce the list.
                $index = file($this->currentfile);
                $ok = true;
                foreach ($index as $num => $value) {
                    // For first line (header), check it's valid then skip it.
                    if ($num == 0) {
                        if (preg_match('~^' . preg_quote(tgz_packer::ARCHIVE_INDEX_COUNT_PREFIX) . '~', $value)) {
                            continue;
                        } else {
                            // Not valid, better ignore the file.
                            $ok = false;
                            break;
                        }
                    }
                    // Split on tabs and store in results array.
                    $values = explode("\t", trim($value));
                    $this->listresults[] = (object)array(
                        'original_pathname' => $values[0],
                        'pathname' => $values[0],
                        'mtime' => ($values[3] === '?' ? tgz_packer::DEFAULT_TIMESTAMP : (int)$values[3]),
                        'is_directory' => $values[1] === 'd',
                        'size' => (int)$values[2]);
                }
                if ($ok) {
                    $this->mode = self::MODE_LIST_COMPLETE;
                }
                unlink($this->currentfile);
            } else {
                // For index file, get number of files and delete temp file.
                $contents = file_get_contents($this->currentfile, null, null, null, 128);
                $matches = array();
                if (preg_match('~^' . preg_quote(tgz_packer::ARCHIVE_INDEX_COUNT_PREFIX) .
                        '([0-9]+)~', $contents, $matches)) {
                    $this->numfiles = (int)$matches[1];
                }
                unlink($this->currentfile);
            }
        } else {
            // Report to handler and put in results.
            if ($this->currentfp !== null) {
                $handler->tgz_end_file($this->currentarchivepath, $this->currentfile);
                $this->results[$this->currentarchivepath] = true;
            }
            $this->donefiles++;
        }

        // No longer have a current file.
        $this->currentfp = null;
        $this->currentfile = null;
        $this->currentarchivepath = null;
    }
protected function close_current_file ( $ handler ) { if ( $ this -> currentfp !== null ) { if ( ! fclose ( $ this -> currentfp ) ) { throw new moodle_exception ( 'errorprocessingarchive' , '' , '' , null , 'Failed to close output file: ' . $ this -> currentfile ) ; } // At this point we should touch the file to set its modified // time to $this->currentmtime. However, when extracting to the // temp directory, cron will delete files more than a week old, // so to avoid problems we leave all files at their current time. } if ( $ this -> currentarchivepath === tgz_packer :: ARCHIVE_INDEX_FILE ) { if ( $ this -> mode === self :: MODE_LIST ) { // When listing array, use the archive index to produce the list. $ index = file ( $ this -> currentfile ) ; $ ok = true ; foreach ( $ index as $ num => $ value ) { // For first line (header), check it's valid then skip it. if ( $ num == 0 ) { if ( preg_match ( '~^' . preg_quote ( tgz_packer :: ARCHIVE_INDEX_COUNT_PREFIX ) . '~' , $ value ) ) { continue ; } else { // Not valid, better ignore the file. $ ok = false ; break ; } } // Split on tabs and store in results array. $ values = explode ( "\t" , trim ( $ value ) ) ; $ this -> listresults [ ] = ( object ) array ( 'original_pathname' => $ values [ 0 ] , 'pathname' => $ values [ 0 ] , 'mtime' => ( $ values [ 3 ] === '?' ? tgz_packer :: DEFAULT_TIMESTAMP : ( int ) $ values [ 3 ] ) , 'is_directory' => $ values [ 1 ] === 'd' , 'size' => ( int ) $ values [ 2 ] ) ; } if ( $ ok ) { $ this -> mode = self :: MODE_LIST_COMPLETE ; } unlink ( $ this -> currentfile ) ; } else { // For index file, get number of files and delete temp file. $ contents = file_get_contents ( $ this -> currentfile , null , null , null , 128 ) ; $ matches = array ( ) ; if ( preg_match ( '~^' . preg_quote ( tgz_packer :: ARCHIVE_INDEX_COUNT_PREFIX ) . '([0-9]+)~' , $ contents , $ matches ) ) { $ this -> numfiles = ( int ) $ matches [ 1 ] ; } unlink ( $ this -> currentfile ) ; } } else { // Report to handler and put in results. if ( $ this -> currentfp !== null ) { $ handler -> tgz_end_file ( $ this -> currentarchivepath , $ this -> currentfile ) ; $ this -> results [ $ this -> currentarchivepath ] = true ; } $ this -> donefiles ++ ; } // No longer have a current file. $ this -> currentfp = null ; $ this -> currentfile = null ; $ this -> currentarchivepath = null ; }
Closes the current file, calls handler, and sets up data.

@param tgz_extractor_handler $handler Will be called for extracted files
@throws moodle_exception If there is an error closing it
Closes the current file calls handler and sets up data .