Joomla CMS  4.2.2
Documentation des API du CMS Joomla en version 4.2.2
Référence de la classe ZIPExtraction

Fonctions membres publiques

 __construct ()
 
 __wakeup ()
 
 enforceMinimumExecutionTime ()
 
 setFilename (string $value)
 
 setAddPath (string $addPath)
 
 setSkipFiles (array $skipFiles)
 
 setIgnoreDirectories (array $ignoreDirectories)
 
 initialize ()
 
 step ()
 
 getError ()
 

Fonctions membres publiques statiques

static getInstance ()
 
static getSerialised ()
 
static unserialiseInstance (string $serialised)
 

Champs de données

 $totalSize = 0
 
 $skipFiles = []
 
 $compressedTotal = 0
 
 $uncompressedTotal = 0
 
 $filesProcessed = 0
 

Fonctions membres privées

 getTimeLeft ()
 
 getRunningTime ()
 
 processLastExtractedFile ()
 
 setLastExtractedFilename (?string $lastExtractedFilename)
 
 setLastExtractedFileTimestamp (int $lastExtractedFileTimestamp)
 
 shutdown ()
 
 binStringLength (?string $string)
 
 setError (string $error)
 
 fread ($fp, ?int $length=null)
 
 readArchiveHeader ()
 
 readFileHeader ()
 
 createDirectory ()
 
 processFileData ()
 
 openArchiveFile ()
 
 isEOF ()
 
 setCorrectPermissions (string $path)
 
 isIgnoredDirectory (string $shortFilename)
 
 processTypeDir ()
 
 processTypeLink ()
 
 processTypeFileUncompressed ()
 
 processTypeFileCompressed ()
 
 setupMaxExecTime ()
 
 getPhpMaxExecTime ()
 
 debugMsg (string $message, int $priority=self::LOG_INFO)
 
 initializeLog (string $logPath)
 

Attributs privés

const CHUNK_SIZE = 524288
 
const MAX_EXEC_TIME = 4
 
const RUNTIME_BIAS = 90
 
const MIN_EXEC_TIME = 3
 
const AK_STATE_INITIALIZE = -1
 
const AK_STATE_NOFILE = 0
 
const AK_STATE_HEADER = 1
 
const AK_STATE_DATA = 2
 
const AK_STATE_DATAREAD = 3
 
const AK_STATE_POSTPROC = 4
 
const AK_STATE_DONE = 5
 
const AK_STATE_FINISHED = 999
 
const LOG_DEBUG = 1
 
const LOG_INFO = 10
 
const LOG_WARNING = 50
 
const LOG_ERROR = 90
 
 $maxExecTime = null
 
 $startTime
 
 $lastErrorMessage = null
 
 $filename = null
 
 $archiveFileIsBeingRead = false
 
 $currentOffset = 0
 
 $addPath = ''
 
 $fp = null
 
 $runState = self::AK_STATE_INITIALIZE
 
 $fileHeader = null
 
 $dataReadLength = 0
 
 $ignoreDirectories = []
 
 $expectDataDescriptor = false
 
 $lastExtractedFileTimestamp = 0
 
 $lastExtractedFilename = null
 

Attributs privés statiques

static $instance = null
 
static $logFP = null
 
static $logFilePath = null
 

Description détaillée

ZIP archive extraction class

This is a derivative work of Akeeba Restore which is Copyright (c)2008-2021 Nicholas K. Dionysopoulos and Akeeba Ltd, distributed under the terms of GNU General Public License version 3 or later.

The author of the original work has decided to relicense the derivative work under the terms of the GNU General Public License version 2 or later and share the copyright of the derivative work with Open Source Matters, Inc (OSM), granting OSM non-exclusive rights to this work per the terms of the Joomla Contributor Agreement (JCA) the author signed back in 2011 and which is still in effect. This is affirmed by the cryptographically signed commits in the Git repository containing this file, the copyright messages and this notice here.

Depuis
4.0.4

Documentation des constructeurs et destructeur

◆ __construct()

__construct ( )

Public constructor.

Sets up the internal timer.

Depuis
4.0.4

Références setupMaxExecTime().

Documentation des fonctions membres

◆ __wakeup()

__wakeup ( )

Wakeup function, called whenever the class is deserialized.

This method does the following:

  • Restart the timer.
  • Reopen the archive file, if one is defined.
  • Seek to the correct offset of the file.
Renvoie
void
Depuis
4.0.4

◆ binStringLength()

binStringLength ( ?string  $string)
private

Unicode-safe binary data length

Paramètres
string | null$stringThe binary data to get the length for
Renvoie
integer
Depuis
4.0.4

Référencé par processTypeFileCompressed(), processTypeFileUncompressed(), et processTypeLink().

◆ createDirectory()

createDirectory ( )
private

Creates the directory this file points to

Renvoie
void
Depuis
4.0.4

Références isIgnoredDirectory(), et setError().

Référencé par readFileHeader().

◆ debugMsg()

debugMsg ( string  $message,
int  $priority = self::LOG_INFO 
)
private

Write a message to the debug error log

Paramètres
string$messageThe message to log
int$priorityThe message's log priority
Renvoie
void
Depuis
4.0.4

Références $message.

Référencé par fread(), initialize(), openArchiveFile(), processFileData(), processLastExtractedFile(), processTypeFileCompressed(), processTypeFileUncompressed(), processTypeLink(), readArchiveHeader(), readFileHeader(), et step().

◆ enforceMinimumExecutionTime()

enforceMinimumExecutionTime ( )

Enforce the minimum execution time.

Renvoie
void
Depuis
4.0.4

If we need to sleep for more than 1 second we should be using sleep() or time_sleep_until() to prevent high CPU usage, also because some OS might not support sleeping for over 1 second using these functions. In all other cases we will try to use usleep or time_nanosleep instead.

Références getPhpMaxExecTime(), et getRunningTime().

◆ fread()

fread (   $fp,
?int  $length = null 
)
private

Reads data from the archive.

Paramètres
resource$fpThe file pointer to read data from
int | null$lengthThe volume of data to read, in bytes
Renvoie
string The data read from the file
Depuis
4.0.4

Références $data, $fp, et debugMsg().

Référencé par processTypeFileCompressed(), processTypeFileUncompressed(), processTypeLink(), readArchiveHeader(), et readFileHeader().

◆ getError()

getError ( )

Get the most recent error message

Renvoie
string|null The message string, null if there's no error
Depuis
4.0.4

Références $lastErrorMessage.

Référencé par initialize(), et step().

◆ getInstance()

static getInstance ( )
static

Singleton implementation.

Renvoie
static
Depuis
4.0.4

◆ getPhpMaxExecTime()

getPhpMaxExecTime ( )
private

Get the PHP maximum execution time.

If it's not defined or it's zero (infinite) we use a fake value of 10 seconds.

Renvoie
integer
Depuis
4.0.4

Référencé par enforceMinimumExecutionTime(), et setupMaxExecTime().

◆ getRunningTime()

getRunningTime ( )
private

Gets the time elapsed since object creation/unserialization, effectively how long Akeeba Engine has been processing data

Renvoie
float
Depuis
4.0.4

Références $startTime.

Référencé par enforceMinimumExecutionTime(), et getTimeLeft().

◆ getSerialised()

static getSerialised ( )
static

Returns a serialised copy of the object.

This is different to calling serialise() directly. This operates on a copy of the object which undergoes a call to shutdown() first so any open files are closed first.

Renvoie
string The serialised data, potentially base64 encoded.
Depuis
4.0.4

◆ getTimeLeft()

getTimeLeft ( )
private

Gets the number of seconds left, before we hit the "must break" threshold

Renvoie
float
Depuis
4.0.4

Références getRunningTime().

Référencé par processTypeFileUncompressed(), et step().

◆ initialize()

initialize ( )

Prepares for the archive extraction

Renvoie
void
Depuis
4.0.4

Références debugMsg(), getError(), et readArchiveHeader().

Référencé par step().

◆ initializeLog()

initializeLog ( string  $logPath)
private

Initialise the debug log file

Paramètres
string$logPathThe path where the log file will be written to
Renvoie
void
Depuis
4.0.4

Référencé par setFilename().

◆ isEOF()

isEOF ( )
private

Returns true if we have reached the end of file

Renvoie
boolean True if we have reached End Of File
Depuis
4.0.4

feof() will return false if the file pointer is exactly at the last byte of the file. However, this is a condition we want to treat as a proper EOF for the purpose of extracting a ZIP file. Hence the second part after the logical OR.

Référencé par processTypeFileCompressed(), processTypeFileUncompressed(), processTypeLink(), et readFileHeader().

◆ isIgnoredDirectory()

isIgnoredDirectory ( string  $shortFilename)
private

Is this file or directory contained in a directory we've decided to ignore write errors for? This is useful to let the extraction work despite write errors in the log, logs and tmp directories which MIGHT be used by the system on some low quality hosts and Plesk-powered hosts.

Paramètres
string$shortFilenameThe relative path of the file/directory in the package
Renvoie
boolean True if it belongs in an ignored directory
Depuis
4.0.4

Références $check.

Référencé par createDirectory(), processTypeFileCompressed(), et processTypeFileUncompressed().

◆ openArchiveFile()

openArchiveFile ( )
private

Opens the next part file for reading

Renvoie
void
Depuis
4.0.4

Références $message, debugMsg(), et setError().

Référencé par readArchiveHeader().

◆ processFileData()

processFileData ( )
private

Concrete classes must use this method to process file data. It must set $runState to self::AK_STATE_DATAREAD when it's finished processing the file data.

Renvoie
boolean True if processing the file data was successful, false if an error occurred
Depuis
4.0.4

Références debugMsg(), processTypeDir(), processTypeFileCompressed(), processTypeFileUncompressed(), processTypeLink(), et setError().

Référencé par step().

◆ processLastExtractedFile()

processLastExtractedFile ( )
private

Process the last extracted file or directory

This invalidates OPcache for .php files. Also applies the correct permissions and timestamp.

Renvoie
void
Depuis
4.0.4

Références clearFileInOPCache(), et debugMsg().

Référencé par step().

◆ processTypeDir()

processTypeDir ( )
private

Process the file data of a directory entry

Renvoie
boolean
Depuis
4.0.4

Référencé par processFileData().

◆ processTypeFileCompressed()

processTypeFileCompressed ( )
private

Processes a compressed file

Renvoie
boolean
Depuis
4.0.4

PhpComposerExtensionStubsInspection
PhpComposerExtensionStubsInspection

Références binStringLength(), debugMsg(), fread(), isEOF(), isIgnoredDirectory(), setCorrectPermissions(), et setError().

Référencé par processFileData().

◆ processTypeFileUncompressed()

processTypeFileUncompressed ( )
private

Processes an uncompressed (stored) file

Renvoie
boolean
Depuis
4.0.4

Références $data, $dataReadLength, binStringLength(), debugMsg(), fread(), getTimeLeft(), isEOF(), isIgnoredDirectory(), setCorrectPermissions(), et setError().

Référencé par processFileData().

◆ processTypeLink()

processTypeLink ( )
private

Process the file data of a link entry

Renvoie
boolean
Depuis
4.0.4

Références $data, $filename, binStringLength(), clearFileInOPCache(), debugMsg(), fread(), isEOF(), et setError().

Référencé par processFileData().

◆ readArchiveHeader()

readArchiveHeader ( )
private

Read the header of the archive, making sure it's a valid ZIP file.

Renvoie
void
Depuis
4.0.4

Références debugMsg(), fread(), openArchiveFile(), et setError().

Référencé par initialize().

◆ readFileHeader()

readFileHeader ( )
private

Concrete classes must use this method to read the file header

Renvoie
boolean True if reading the file was successful, false if an error occurred or we reached end of archive.
Depuis
4.0.4

The last file had bit 3 of the general purpose bit flag set. This means that we have a 12 byte data descriptor we need to skip. To make things worse, there might also be a 4 byte optional data descriptor header (0x08074b50).

Références $dir, $format, $this, createDirectory(), debugMsg(), elseif, fread(), isEOF(), null, setError(), et setLastExtractedFilename().

Référencé par step().

◆ setAddPath()

setAddPath ( string  $addPath)

Sets the path to prefix all extracted files with. Essentially, where the archive will be extracted to.

Paramètres
string$addPathThe path where the archive will be extracted.
Renvoie
void
Depuis
4.0.4

Références $addPath.

◆ setCorrectPermissions()

setCorrectPermissions ( string  $path)
private

Handles the permissions of the parent directory to a file and the file itself to make it writeable.

Paramètres
string$pathA path to a file
Renvoie
void
Depuis
4.0.4

Références $path, et null.

Référencé par processTypeFileCompressed(), et processTypeFileUncompressed().

◆ setError()

setError ( string  $error)
private

Add an error message

Paramètres
string$errorError message
Renvoie
void
Depuis
4.0.4

Référencé par createDirectory(), openArchiveFile(), processFileData(), processTypeFileCompressed(), processTypeFileUncompressed(), processTypeLink(), readArchiveHeader(), readFileHeader(), et setFilename().

◆ setFilename()

setFilename ( string  $value)

Set the filepath to the ZIP archive which will be extracted.

Paramètres
string$valueThe filepath to the archive. Only LOCAL files are allowed!
Renvoie
void
Depuis
4.0.4

Références $value, initializeLog(), et setError().

◆ setIgnoreDirectories()

setIgnoreDirectories ( array  $ignoreDirectories)

Set the directories to skip over when extracting the ZIP archive

Paramètres
array$ignoreDirectoriesThe list of directories to ignore.
Renvoie
void
Depuis
4.0.4

Références $ignoreDirectories.

◆ setLastExtractedFilename()

setLastExtractedFilename ( ?string  $lastExtractedFilename)
private

Set the last extracted filename

Paramètres
string | null$lastExtractedFilenameThe last extracted filename
Renvoie
void
Depuis
4.0.4

Références $lastExtractedFilename.

Référencé par readFileHeader().

◆ setLastExtractedFileTimestamp()

setLastExtractedFileTimestamp ( int  $lastExtractedFileTimestamp)
private

Set the last modification UNIX timestamp for the last extracted file

Paramètres
int$lastExtractedFileTimestampThe timestamp
Renvoie
void
Depuis
4.0.4

Références $lastExtractedFileTimestamp.

Référencé par step().

◆ setSkipFiles()

setSkipFiles ( array  $skipFiles)

Set the list of files to skip when extracting the ZIP file.

Paramètres
array$skipFilesA list of files to skip when extracting the ZIP archive
Renvoie
void
Depuis
4.0.4

Références $skipFiles.

◆ setupMaxExecTime()

setupMaxExecTime ( )
private

Set up the maximum execution time

Renvoie
void
Depuis
4.0.4

Références getPhpMaxExecTime().

Référencé par __construct().

◆ shutdown()

shutdown ( )
private

Sleep function, called whenever the class is serialized

Renvoie
void
Depuis
4.0.4

◆ step()

step ( )

Executes a step of the archive extraction

Renvoie
boolean True if we are done extracting or an error occurred
Depuis
4.0.4

Références debugMsg(), elseif, getError(), getTimeLeft(), initialize(), null, processFileData(), processLastExtractedFile(), readFileHeader(), et setLastExtractedFileTimestamp().

◆ unserialiseInstance()

static unserialiseInstance ( string  $serialised)
static

Restores a serialised instance into the singleton implementation and returns it.

If the serialised data is corrupt it will return null.

Paramètres
string$serialisedThe serialised data, potentially base64 encoded, to deserialize.
Renvoie
static|null The instance of the object, NULL if it cannot be deserialised.
Depuis
4.0.4

Références $instance, class, et null.

Documentation des champs

◆ $addPath

$addPath = ''
private

Référencé par setAddPath().

◆ $archiveFileIsBeingRead

$archiveFileIsBeingRead = false
private

◆ $compressedTotal

$compressedTotal = 0

◆ $currentOffset

$currentOffset = 0
private

◆ $dataReadLength

$dataReadLength = 0
private

Référencé par processTypeFileUncompressed().

◆ $expectDataDescriptor

$expectDataDescriptor = false
private

◆ $fileHeader

$fileHeader = null
private

◆ $filename

$filename = null
private

Référencé par processTypeLink().

◆ $filesProcessed

$filesProcessed = 0

◆ $fp

$fp = null
private

Référencé par fread().

◆ $ignoreDirectories

$ignoreDirectories = []
private

Référencé par setIgnoreDirectories().

◆ $instance

$instance = null
staticprivate

Référencé par unserialiseInstance().

◆ $lastErrorMessage

$lastErrorMessage = null
private

Référencé par getError().

◆ $lastExtractedFilename

$lastExtractedFilename = null
private

Référencé par setLastExtractedFilename().

◆ $lastExtractedFileTimestamp

$lastExtractedFileTimestamp = 0
private

◆ $logFilePath

$logFilePath = null
staticprivate

◆ $logFP

$logFP = null
staticprivate

◆ $maxExecTime

$maxExecTime = null
private

◆ $runState

$runState = self::AK_STATE_INITIALIZE
private

◆ $skipFiles

$skipFiles = []

Référencé par setSkipFiles().

◆ $startTime

$startTime
private

Référencé par getRunningTime().

◆ $totalSize

$totalSize = 0

◆ $uncompressedTotal

$uncompressedTotal = 0

◆ AK_STATE_DATA

const AK_STATE_DATA = 2
private

◆ AK_STATE_DATAREAD

const AK_STATE_DATAREAD = 3
private

◆ AK_STATE_DONE

const AK_STATE_DONE = 5
private

◆ AK_STATE_FINISHED

const AK_STATE_FINISHED = 999
private

◆ AK_STATE_HEADER

const AK_STATE_HEADER = 1
private

◆ AK_STATE_INITIALIZE

const AK_STATE_INITIALIZE = -1
private

◆ AK_STATE_NOFILE

const AK_STATE_NOFILE = 0
private

◆ AK_STATE_POSTPROC

const AK_STATE_POSTPROC = 4
private

◆ CHUNK_SIZE

const CHUNK_SIZE = 524288
private

◆ LOG_DEBUG

const LOG_DEBUG = 1
private

◆ LOG_ERROR

const LOG_ERROR = 90
private

◆ LOG_INFO

const LOG_INFO = 10
private

◆ LOG_WARNING

const LOG_WARNING = 50
private

◆ MAX_EXEC_TIME

const MAX_EXEC_TIME = 4
private

◆ MIN_EXEC_TIME

const MIN_EXEC_TIME = 3
private

◆ RUNTIME_BIAS

const RUNTIME_BIAS = 90
private

La documentation de cette classe a été générée à partir du fichier suivant :