Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.3.x will end 7 October 2024 (12 months).
  • Bug fixes for security issues in 4.3.x will end 21 April 2025 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.2.x is supported too.

Differences Between: [Versions 310 and 403] [Versions 39 and 403]

Implementation of .tar.gz packer. A limited subset of the .tar format is supported. This packer can open files that it wrote, but may not be able to open files from other sources, especially if they use extensions. There are restrictions on file length and character set of filenames.

Copyright: 2013 The Open University
License: http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
File Size: 902 lines (34 kb)
Included or required:0 times
Referenced: 3 times
Includes or requires: 0 files

Defines 3 classes

tgz_packer:: (13 methods):
  archive_to_storage()
  delete_existing_file_record()
  set_include_index()
  archive_to_pathname()
  write_tar_entry()
  calculate_checksum()
  list_files_path()
  list_files_stored()
  extract_to_pathname()
  extract_to_storage()
  list_files()
  is_tgz_file()
  has_required_extension()

tgz_packer_extract_to_pathname:: (4 methods):
  __construct()
  tgz_start_file()
  tgz_end_file()
  tgz_directory()

tgz_packer_extract_to_storage:: (4 methods):
  __construct()
  tgz_start_file()
  tgz_end_file()
  tgz_directory()


Class: tgz_packer  - X-Ref

Utility class - handles all packing/unpacking of .tar.gz files.

archive_to_storage(array $files, $contextid,$component, $filearea, $itemid, $filepath, $filename,$userid = null, $ignoreinvalidfiles = true, file_progress $progress = null)   X-Ref
Archive files and store the result in file storage.

Any existing file at that location will be overwritten.

param: array $files array from archive path => pathname or stored_file
param: int $contextid context ID
param: string $component component
param: string $filearea file area
param: int $itemid item ID
param: string $filepath file path
param: string $filename file name
param: int $userid user ID
param: bool $ignoreinvalidfiles true means ignore missing or invalid files, false means abort on any error
param: file_progress $progress Progress indicator callback or null if not required
return: stored_file|bool false if error stored_file instance if ok

delete_existing_file_record(file_storage $fs, array $filerecord)   X-Ref
Wrapper function useful for deleting an existing file (if present) just
before creating a new one.

param: file_storage $fs File storage
param: array $filerecord File record in same format used to create file

set_include_index($includeindex)   X-Ref
By default, the .tar file includes a .ARCHIVE_INDEX file as its first
entry. This makes list_files much faster and allows for better progress
reporting.

If you need to disable the inclusion of this file, use this function
before calling one of the archive_xx functions.

param: bool $includeindex If true, includes index

archive_to_pathname(array $files, $archivefile,$ignoreinvalidfiles=true, file_progress $progress = null)   X-Ref
Archive files and store the result in an OS file.

param: array $files array from archive path => pathname or stored_file
param: string $archivefile path to target zip file
param: bool $ignoreinvalidfiles true means ignore missing or invalid files, false means abort on any error
param: file_progress $progress Progress indicator callback or null if not required
return: bool true if file created, false if not

write_tar_entry($gz, $archivepath, $file, $size, $mtime, $content = null,file_progress $progress = null, $done = 0)   X-Ref
Writes a single tar file to the archive, including its header record and
then the file contents.

param: resource $gz Gzip file
param: string $archivepath Full path of file within archive
param: string|resource $file Full path of file on disk or file handle or null if none
param: int $size Size or 0 for directories
param: int|string $mtime Time or ? if unknown
param: string $content Actual content of file to write (null if using $filepath)
param: file_progress $progress Progress indicator or null if none
param: int $done Value for progress indicator
return: bool True if OK

calculate_checksum($str)   X-Ref
Calculates a checksum by summing all characters of the binary string
(treating them as unsigned numbers).

param: string $str Input string
return: int Checksum

list_files_path(array &$expandedfiles, $archivepath, $path,?file_progress $progress , $done)   X-Ref
Based on an OS path, adds either that path (if it's a file) or
all its children (if it's a directory) into the list of files to
archive.

If a progress indicator is supplied and if this corresponds to a
directory, then it will be repeatedly called with the same values. This
allows the progress handler to respond in some way to avoid timeouts
if required.

param: array $expandedfiles List of all files to archive (output)
param: string $archivepath Current path within archive
param: string $path OS path on disk
param: file_progress|null $progress Progress indicator or null if none
param: int $done Value for progress indicator
return: bool True if successful

list_files_stored(array &$expandedfiles, $archivepath, stored_file $file)   X-Ref
Based on a stored_file objects, adds either that file (if it's a file) or
all its children (if it's a directory) into the list of files to
archive.

If a progress indicator is supplied and if this corresponds to a
directory, then it will be repeatedly called with the same values. This
allows the progress handler to respond in some way to avoid timeouts
if required.

param: array $expandedfiles List of all files to archive (output)
param: string $archivepath Current path within archive
param: stored_file $file File object

extract_to_pathname($archivefile, $pathname,array $onlyfiles = null, file_progress $progress = null, $returnbool = false)   X-Ref
Extract file to given file path (real OS filesystem), existing files are overwritten.

param: stored_file|string $archivefile full pathname of zip file or stored_file instance
param: string $pathname target directory
param: array $onlyfiles only extract files present in the array
param: file_progress $progress Progress indicator callback or null if not required
param: bool $returnbool Whether to return a basic true/false indicating error state, or full per-file error
return: array list of processed files (name=>true)

extract_to_storage($archivefile, $contextid,$component, $filearea, $itemid, $pathbase, $userid = null,file_progress $progress = null)   X-Ref
Extract file to given file path (real OS filesystem), existing files are overwritten.

param: string|stored_file $archivefile full pathname of zip file or stored_file instance
param: int $contextid context ID
param: string $component component
param: string $filearea file area
param: int $itemid item ID
param: string $pathbase file path
param: int $userid user ID
param: file_progress $progress Progress indicator callback or null if not required
return: array list of processed files (name=>true)

list_files($archivefile)   X-Ref
Returns array of info about all files in archive.

param: string|stored_file $archivefile
return: array of file infos

is_tgz_file($archivefile)   X-Ref
Checks whether a file appears to be a .tar.gz file.

param: string|stored_file $archivefile
return: bool True if file contains the gzip magic number

has_required_extension()   X-Ref
The zlib extension is required for this packer to work. This is a single
location for the code to check whether the extension is available.

return: bool True if the zlib extension is available OK

Class: tgz_packer_extract_to_pathname  - X-Ref

Handles extraction to pathname.

__construct($pathname, array $onlyfiles = null)   X-Ref
Constructor.

param: string $pathname target directory
param: array $onlyfiles only extract files present in the array

tgz_start_file($archivepath)   X-Ref


tgz_end_file($archivepath, $realpath)   X-Ref


tgz_directory($archivepath, $mtime)   X-Ref


Class: tgz_packer_extract_to_storage  - X-Ref

Handles extraction to file storage.

__construct($contextid, $component, $filearea, $itemid, $pathbase, $userid)   X-Ref
Constructor.

param: int $contextid Context id for files.
param: string $component Component name for files.
param: string $filearea File area for files.
param: int $itemid Item ID for files.
param: string $pathbase Base path for files (subfolders will go inside this).
param: int $userid User id for files or null if none.

tgz_start_file($archivepath)   X-Ref


tgz_end_file($archivepath, $realpath)   X-Ref


tgz_directory($archivepath, $mtime)   X-Ref