phar: Changelog

Version Message
2.0.0 BC BREAKING RELEASE
BC breaks:
* Phar object Compression API is rewritten. Use Phar::compress() and decompress(),
Phar::compressFiles()/decompressFiles() and PharFileInfo->compress()/decompress().
* phar.extract_list and Phar::getExtractList() are removed

Major feature functionality release
* phar.cache_list allows web-based phar applications to run at equal or faster than
their on-disk equivalent [Greg]
* new default stub allows running of phar-based phars without phar extension [Greg/Steph]
* add support for tar-based and zip-based phar archives [Greg]
* add support for OpenSSL-based true signatures [Greg]
* add support for signatures to tar-based phar archives [Greg]
* add Phar::isFileFormat() [Greg]
* add Phar::convertToExecutable(), Phar::convertToData() [Greg]
* add Phar::compress() [Greg]
* rename Phar::compressAllFiles() to compressFiles(), uncompressAllFiles() to
decompressFiles() [Greg]
* conversion to compressed or to other file formats automatically copies the archive
to a new extension (i.e. ".phar" to ".phar.tar" or ".tar" to ".tar.gz") [Steph]
* add Phar::webPhar() for running a web-based application unmodified
directly from a phar archive [Greg]
* file functions (fopen-based and stat-based) can be instructed to only look for
relative paths within a phar via Phar::interceptFileFuncs()
* add PharData class to allow manipulation/creation of non-executable tar and zip archives. [Steph]
non-executable tar/zip manipulation is allowed even when phar.readonly=1 [Greg]
* paths with . and .. work (phar://blah.phar/a/../b.php => phar://blah.phar/b.php) [Greg]
* add support for mkdir()/rmdir() and support for empty directories to phar file format [Greg]
* add option to compress the entire phar file for phar/tar file format [Greg]
* implement Phar::isCompressed() returning 0, Phar::GZ or Phar::BZ2 [Greg]
* implement Phar::copy(string $from, string $to) [Greg]
* implement Phar::running(), returns path or URL to currently executed phar
* implement Phar::buildFromIterator(Iterator $it[, string $base_directory]) [Greg]
* implement Phar::buildFromDirectory(string $base_directory[, string $regex]) [Steph]
* implement Phar::mount() for mounting external paths or files to locations inside a phar [Greg]
* add Phar::delete() [Greg]
* implement Phar::unlinkArchive() [Greg]

Security addition
* aliases are validated so that they contain no directory separators as intended
* on conversion to other formats, user-supplied aliases are validated

Changes since 2.0.0RC2:
fixed PHP Bug #49021: phar tar signature algorithm reports as Unknown (0) in
getSignature() call
fixed PHP Bug #49020: phar misinterprets ustar long filename standard
fixed PHP Bug #49018: phar tar stores long filenames with prefix/name reversed
fixed PHP Bug #48791: open office files always reported as corrupted
fixed PHP Bug #48783: make install will fail saying phar file exists
fixed PHP Bug #48740: PHAR install fails when INSTALL_ROOT is not the final install location
fixed PHP Bug #48681: openssl signature verification for tar archives broken
fixed PHP Bug #48377: error message unclear on converting phar with existing file
fixed isset() on sub-directories (isset("blah") if file "blah/foo.php" exists)

make phar work in PHP 6
Changes since 2.0.0RC1:
security vulnerability in handling of long tar filenames fixed
fixed PECL Bug #14646: phar error message unclear with php stream wrappers
fixed PECL Bug #16338: php_stream_copy_to_stream{,_ex}()
fixed PHP Bug #48257: PharData throws an exception with non-phar tar
fixed PHP Bug #47085: rename() returns true even if the file in PHAR does not exist
fixed PHP Bug #46032: PharData::__construct() - wrong memory read
fixed PHP Bug #46060: Phar::addEmptyDir() breaks
fixed PHP Bug #45907: undefined reference to 'PHP_SHA512Init'
fixed PHP Bug #45726: PHP_Archive / Archive.php missing
Changes since 2.0.0a2: many bugfixes, removal of phar.extract_list, compression API refactored,
conversion API refactored
Changes since 2.0.0b1: addition of phar.cache_list, many performance improvements and bugfixes
implement OpenSSL asynchronous true package signing
add support for package signing to tar-based archives
require PHP 5.2.1+
2.0.0RC2 BC BREAKING RELEASE
BC breaks:
* Phar object Compression API is rewritten. Use Phar::compress() and decompress(),
Phar::compressFiles()/decompressFiles() and PharFileInfo->compress()/decompress().
* phar.extract_list and Phar::getExtractList() are removed

Major feature functionality release
* phar.cache_list allows web-based phar applications to run at equal or faster than
their on-disk equivalent [Greg]
* new default stub allows running of phar-based phars without phar extension [Greg/Steph]
* add support for tar-based and zip-based phar archives [Greg]
* add support for OpenSSL-based true signatures [Greg]
* add support for signatures to tar-based phar archives [Greg]
* add Phar::isFileFormat() [Greg]
* add Phar::convertToExecutable(), Phar::convertToData() [Greg]
* add Phar::compress() [Greg]
* rename Phar::compressAllFiles() to compressFiles(), uncompressAllFiles() to
decompressFiles() [Greg]
* conversion to compressed or to other file formats automatically copies the archive
to a new extension (i.e. ".phar" to ".phar.tar" or ".tar" to ".tar.gz") [Steph]
* add Phar::webPhar() for running a web-based application unmodified
directly from a phar archive [Greg]
* file functions (fopen-based and stat-based) can be instructed to only look for
relative paths within a phar via Phar::interceptFileFuncs()
* add PharData class to allow manipulation/creation of non-executable tar and zip archives. [Steph]
non-executable tar/zip manipulation is allowed even when phar.readonly=1 [Greg]
* paths with . and .. work (phar://blah.phar/a/../b.php => phar://blah.phar/b.php) [Greg]
* add support for mkdir()/rmdir() and support for empty directories to phar file format [Greg]
* add option to compress the entire phar file for phar/tar file format [Greg]
* implement Phar::isCompressed() returning 0, Phar::GZ or Phar::BZ2 [Greg]
* implement Phar::copy(string $from, string $to) [Greg]
* implement Phar::running(), returns path or URL to currently executed phar
* implement Phar::buildFromIterator(Iterator $it[, string $base_directory]) [Greg]
* implement Phar::buildFromDirectory(string $base_directory[, string $regex]) [Steph]
* implement Phar::mount() for mounting external paths or files to locations inside a phar [Greg]
* add Phar::delete() [Greg]
* implement Phar::unlinkArchive() [Greg]

Security addition
* aliases are validated so that they contain no directory separators as intended
* on conversion to other formats, user-supplied aliases are validated

Changes since 2.0.0RC1:
security vulnerability in handling of long tar filenames fixed
fixed PECL Bug #14646: phar error message unclear with php stream wrappers
fixed PECL Bug #16338: php_stream_copy_to_stream{,_ex}()
fixed PHP Bug #48257: PharData throws an exception with non-phar tar
fixed PHP Bug #47085: rename() returns true even if the file in PHAR does not exist
fixed PHP Bug #46032: PharData::__construct() - wrong memory read
fixed PHP Bug #46060: Phar::addEmptyDir() breaks
fixed PHP Bug #45907: undefined reference to 'PHP_SHA512Init'
fixed PHP Bug #45726: PHP_Archive / Archive.php missing
Changes since 2.0.0a2: many bugfixes, removal of phar.extract_list, compression API refactored,
conversion API refactored
Changes since 2.0.0b1: addition of phar.cache_list, many performance improvements and bugfixes
implement OpenSSL asynchronous true package signing
add support for package signing to tar-based archives
require PHP 5.2.1+
2.0.0RC1 BC BREAKING RELEASE
BC breaks:
* Phar object Compression API is rewritten. Use Phar::compress() and decompress(),
Phar::compressFiles()/decompressFiles() and PharFileInfo->compress()/decompress().
* phar.extract_list and Phar::getExtractList() are removed

Major feature functionality release
* phar.cache_list allows web-based phar applications to run at equal or faster than
their on-disk equivalent [Greg]
* new default stub allows running of phar-based phars without phar extension [Greg/Steph]
* add support for tar-based and zip-based phar archives [Greg]
* add support for OpenSSL-based true signatures [Greg]
* add support for signatures to tar-based phar archives [Greg]
* add Phar::isFileFormat() [Greg]
* add Phar::convertToExecutable(), Phar::convertToData() [Greg]
* add Phar::compress() [Greg]
* rename Phar::compressAllFiles() to compressFiles(), uncompressAllFiles() to
decompressFiles() [Greg]
* conversion to compressed or to other file formats automatically copies the archive
to a new extension (i.e. ".phar" to ".phar.tar" or ".tar" to ".tar.gz") [Steph]
* add Phar::webPhar() for running a web-based application unmodified
directly from a phar archive [Greg]
* file functions (fopen-based and stat-based) can be instructed to only look for
relative paths within a phar via Phar::interceptFileFuncs()
* add PharData class to allow manipulation/creation of non-executable tar and zip archives. [Steph]
non-executable tar/zip manipulation is allowed even when phar.readonly=1 [Greg]
* paths with . and .. work (phar://blah.phar/a/../b.php => phar://blah.phar/b.php) [Greg]
* add support for mkdir()/rmdir() and support for empty directories to phar file format [Greg]
* add option to compress the entire phar file for phar/tar file format [Greg]
* implement Phar::isCompressed() returning 0, Phar::GZ or Phar::BZ2 [Greg]
* implement Phar::copy(string $from, string $to) [Greg]
* implement Phar::running(), returns path or URL to currently executed phar
* implement Phar::buildFromIterator(Iterator $it[, string $base_directory]) [Greg]
* implement Phar::buildFromDirectory(string $base_directory[, string $regex]) [Steph]
* implement Phar::mount() for mounting external paths or files to locations inside a phar [Greg]
* add Phar::delete() [Greg]
* implement Phar::unlinkArchive() [Greg]

Security addition
* aliases are validated so that they contain no directory separators as intended
* on conversion to other formats, user-supplied aliases are validated

Changes since 2.0.0a2: many bugfixes, removal of phar.extract_list, compression API refactored,
conversion API refactored
Changes since 2.0.0b1: addition of phar.cache_list, many performance improvements and bugfixes
implement OpenSSL asynchronous true package signing
add support for package signing to tar-based archives
require PHP 5.2.1+
2.0.0b1 BC BREAKING RELEASE
BC breaks:
* Phar object Compression API is rewritten. Use Phar::compress() and decompress(),
Phar::compressFiles()/decompressFiles() and PharFileInfo->compress()/decompress().
* phar.extract_list and Phar::getExtractList() are removed

Major feature functionality release
* new default stub allows running of phar-based phars without phar extension [Greg/Steph]
* add support for tar-based and zip-based phar archives [Greg]
* add Phar::isFileFormat() [Greg]
* add Phar::convertToExecutable(), Phar::convertToData() [Greg]
* add Phar::compress() [Greg]
* rename Phar::compressAllFiles() to compressFiles(), uncompressAllFiles() to
decompressFiles() [Greg]
* conversion to compressed or to other file formats automatically copies the archive
to a new extension (i.e. ".phar" to ".phar.tar" or ".tar" to ".tar.gz") [Steph]
* add Phar::webPhar() for running a web-based application unmodified
directly from a phar archive [Greg]
* file functions (fopen-based and stat-based) can be instructed to only look for
relative paths within a phar via Phar::interceptFileFuncs()
* add PharData class to allow manipulation/creation of non-executable tar and zip archives. [Steph]
non-executable tar/zip manipulation is allowed even when phar.readonly=1 [Greg]
* paths with . and .. work (phar://blah.phar/a/../b.php => phar://blah.phar/b.php) [Greg]
* add support for mkdir()/rmdir() and support for empty directories to phar file format [Greg]
* add option to compress the entire phar file for phar/tar file format [Greg]
* implement Phar::isCompressed() returning 0, Phar::GZ or Phar::BZ2 [Greg]
* implement Phar::copy(string $from, string $to) [Greg]
* implement Phar::running(), returns path or URL to currently executed phar
* implement Phar::buildFromIterator(Iterator $it[, string $base_directory]) [Greg]
* implement Phar::buildFromDirectory(string $base_directory[, string $regex]) [Steph]
* implement Phar::mount() for mounting external paths or files to locations inside a phar [Greg]
* add Phar::delete() [Greg]
* implement Phar::unlinkArchive() [Greg]

Security addition
* aliases are validated so that they contain no directory separators as intended
* on conversion to other formats, user-supplied aliases are validated

Changes since 2.0.0a2: many bugfixes, removal of phar.extract_list, compression API refactored,
conversion API refactored
2.0.0a2 Major feature functionality release
* new default stub allows running of phar-based phars without phar extension [Greg/Steph]
* add support for tar-based and zip-based phar archives [Greg]
* add Phar::isTar(), Phar::isZip(), and Phar::isPhar() [Greg]
* add Phar::convertToTar(), Phar::convertToZip(), and Phar::convertToPhar() [Greg]
* add Phar::compress() [Greg]
* conversion to compressed or to other file formats automatically copies the archive
to a new extension (i.e. ".phar" to ".phar.tar" or ".tar" to ".tar.gz") [Steph]
* add Phar::webPhar() for running a web-based application unmodified
directly from a phar archive [Greg]
* file functions (fopen-based and stat-based) can be instructed to only look for
relative paths within a phar via Phar::interceptFileFuncs()
* add PharData class to allow manipulation/creation of non-executable tar and zip archives. [Steph]
non-executable tar/zip manipulation is allowed even when phar.readonly=1 [Greg]
* paths with . and .. work (phar://blah.phar/a/../b.php => phar://blah.phar/b.php) [Greg]
* add support for mkdir()/rmdir() and support for empty directories to phar file format [Greg]
* add option to compress the entire phar file for phar/tar file format [Greg]
* implement Phar::isCompressed() returning 0, Phar::GZ or Phar::BZ2 [Greg]
* implement Phar::copy(string $from, string $to) [Greg]
* implement Phar::buildFromIterator(Iterator $it[, string $base_directory]) [Greg]
* implement Phar::mount() for mounting external paths or files to locations inside a phar [Greg]
* add Phar::delete() [Greg]

Changes since 2.0.0a1: fix build in PHP 5.2
2.0.0a1 Major feature functionality release
* new default stub allows running of phar-based phars without phar extension [Greg/Steph]
* add support for tar-based and zip-based phar archives [Greg]
* add Phar::isTar(), Phar::isZip(), and Phar::isPhar() [Greg]
* add Phar::convertToTar(), Phar::convertToZip(), and Phar::convertToPhar() [Greg]
* add Phar::compress() [Greg]
* conversion to compressed or to other file formats automatically copies the archive
to a new extension (i.e. ".phar" to ".phar.tar" or ".tar" to ".tar.gz") [Steph]
* add Phar::webPhar() for running a web-based application unmodified
directly from a phar archive [Greg]
* file functions (fopen-based and stat-based) can be instructed to only look for
relative paths within a phar via Phar::interceptFileFuncs()
* add PharData class to allow manipulation/creation of non-executable tar and zip archives. [Steph]
non-executable tar/zip manipulation is allowed even when phar.readonly=1 [Greg]
* paths with . and .. work (phar://blah.phar/a/../b.php => phar://blah.phar/b.php) [Greg]
* add support for mkdir()/rmdir() and support for empty directories to phar file format [Greg]
* add option to compress the entire phar file for phar/tar file format [Greg]
* implement Phar::isCompressed() returning 0, Phar::GZ or Phar::BZ2 [Greg]
* implement Phar::copy(string $from, string $to) [Greg]
* implement Phar::buildFromIterator(Iterator $it[, string $base_directory]) [Greg]
* implement Phar::mount() for mounting external paths or files to locations inside a phar [Greg]
* add Phar::delete() [Greg]
1.2.3 * fix creation of Phar object with relative path:
$a = new Phar('blah.phar');
* fix creation and read of Phar objects on Windows, manage
windows path separators (on windows only)
* phar.phar is now installed as a script, and can be run as "phar.phar"
* phar.phar looks for PHP in /usr/local/bin/php by default
* fix Bug #12492: filenew incorrectly creates file path [urkle]
* fix Bug #12493: extract throws an error and won't open the file [urkle]
1.2.2 * fix to work with PHP 5.3
* fix Bug #12124: Phar object cannot be iterated over
* remove unused variables
* fix jit file open sprintf calls
1.2.1 * improve speed of uncompressed phars used readonly by 2x [Greg]
* improve speed of phars with signatures 2x [Greg]
* add Phar::setAlias() [Greg]
* fix too many open file handles issue [Greg]
* fix rename [Greg]
* add Phar::getAlias() [Marcus]
* Made -a optional in pack subcommand of phar.phar [Marcus]
* Fix issue with apache module and extracted archives [Marcus]
* Send all error messages to stderr in phar.phar [Marcus]
* Added new subcommands add and delete to phar.phar [Marcus]
* Made Phar::loadPhar() and Phar::mapPhar() ignore extracted archives [Marcus]
* Fix issue with compressed entries and uncompressing entries [Marcus]
* Verify stubs before writing [Marcus]
* Always use longest stub end to avoid issues with length field [Marcus]
1.2.0 * add PharFileInfo::hasMetadata(), PharFileInfo::delMetadata() [Marcus]
* add Phar::hasMetadata(), Phar::delMetadata() [Marcus]
* fix Phar::CanWrite() [Marcus]
* add preliminary phar command (phar.php) [Marcus]
* add phar command (phar.phar) [Marcus]
* list all available compression methods using Phar::getSupportedCompression() [Marcus]
* remove RINIT [Marcus]
1.1.0 * implement ability connect a phar file 'phar://whatever' to a directory. That way all
access to that phar archive are directed to the extracted directory. This
allows to have the installed files and the archieve keep the same includes.
[Marcus]
* implement SHA-2 (256, 512) support [Marcus]
* implement setSignatureAlgorithm() and Phar::MD5 Phar::SHA1 Phar::SHA256 Phar::SHA512 Phar::PGP to
choose the kind of signature to use (PGP falls back to SHA1) [Greg]
1.0.1 * Fix return value of unlink() and rename() when used for phar archievs.
[Marcus]
1.0.0 *BACKWARDS COMPATIBILITY BREAK*
Rename Phar->begin/isFlushingToPhar/commit to startBuffering/isBuffering/stopBuffering
Note that isBuffering() returns the opposite value to isFlushingToPhar()