char * phar_decompress_filter(phar_entry_info * entry, int return_unknown);
char * phar_compress_filter(phar_entry_info * entry, int return_unknown);
-void phar_rename_archive(phar_archive_data *phar, char *ext TSRMLS_DC);
+void phar_rename_archive(phar_archive_data *phar, char *ext, zend_bool compress TSRMLS_DC);
int phar_mount_entry(phar_archive_data *phar, char *filename, int filename_len, char *path, int path_len TSRMLS_DC);
char *phar_find_in_include_path(char *file, char *entry, phar_archive_data *phar TSRMLS_DC);
char *phar_fix_filepath(char *path, int *new_len, int use_cwd TSRMLS_DC);
source->is_temporary_alias = 0;
source->flags = phar.flags;
- phar_rename_archive(source, ext TSRMLS_CC);
+ phar_rename_archive(source, ext, 0 TSRMLS_CC);
phar_flush(source, 0, 0, convert, &error TSRMLS_CC);
}
/* }}} */
} else {
pharobj_set_compression(&phar_obj->arc.archive->manifest, PHAR_ENT_COMPRESSED_GZ TSRMLS_CC);
}
+
phar_obj->arc.archive->is_modified = 1;
-
+ phar_rename_archive(phar_obj->arc.archive, NULL, 1 TSRMLS_CC);
+
phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
if (error) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, error);
} else {
pharobj_set_compression(&phar_obj->arc.archive->manifest, PHAR_ENT_COMPRESSED_BZ2 TSRMLS_CC);
}
+
phar_obj->arc.archive->is_modified = 1;
-
+ phar_rename_archive(phar_obj->arc.archive, NULL, 1 TSRMLS_CC);
+
phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
if (error) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, error);
} else {
pharobj_set_compression(&phar_obj->arc.archive->manifest, PHAR_ENT_COMPRESSED_NONE TSRMLS_CC);
}
+
phar_obj->arc.archive->is_modified = 1;
-
+ phar_rename_archive(phar_obj->arc.archive, NULL, 0 TSRMLS_CC);
+
phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
if (error) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, error);
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
?>
--EXPECTF--
string(1) "a"
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
?>
--EXPECTF--
string(1) "a"
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
?>
--EXPECTF--
bool(false)
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
?>
--EXPECTF--
string(1) "a"
<?php
$fname = dirname(__FILE__) . '/tar_makebz2.phar.tar';
-$alias = 'phar://' . $fname;
-$fname2 = dirname(__FILE__) . '/tar_makebz2_b.phar.tar';
-$alias2 = 'phar://' . $fname2;
+$fname2 = dirname(__FILE__) . '/tar_makebz2.phar.tar.bz2';
+$fname3 = dirname(__FILE__) . '/tar_makebz2_b.phar.tar.bz2';
$phar = new Phar($fname);
$phar['test'] = 'hi';
var_dump($phar->isTar());
$phar->compressAllFilesBZIP2();
-copy($fname, $fname2);
+copy($fname2, $fname3);
-$phar2 = new Phar($fname2);
+$phar2 = new Phar($fname3);
var_dump($phar2->isTar());
var_dump($phar2->isCompressed() == Phar::BZ2);
===DONE===
--CLEAN--
<?php
-@unlink(dirname(__FILE__) . '/tar_makebz2.phar.tar');
-@unlink(dirname(__FILE__) . '/tar_makebz2_b.phar.tar');
+@unlink(dirname(__FILE__) . '/tar_makebz2.phar.tar.bz2');
+@unlink(dirname(__FILE__) . '/tar_makebz2_b.phar.tar.bz2');
?>
--EXPECTF--
bool(true)
bool(true)
bool(true)
-===DONE===
\ No newline at end of file
+===DONE===
--FILE--
<?php
-$fname = dirname(__FILE__) . '/tar_makegz.phar.tar';
-$alias = 'phar://' . $fname;
-$fname2 = dirname(__FILE__) . '/tar_makegz_b.phar.tar';
-$alias2 = 'phar://' . $fname2;
+$fname = dirname(__FILE__) . '/tar_makebz2.phar.tar';
+$fname2 = dirname(__FILE__) . '/tar_makebz2.phar.tar.gz';
+$fname3 = dirname(__FILE__) . '/tar_makebz2_b.phar.tar.gz';
$phar = new Phar($fname);
$phar['test'] = 'hi';
var_dump($phar->isTar());
$phar->compressAllFilesGZ();
-copy($fname, $fname2);
+copy($fname2, $fname3);
-$phar2 = new Phar($fname2);
+$phar2 = new Phar($fname3);
var_dump($phar2->isTar());
var_dump($phar2->isCompressed() == Phar::GZ);
===DONE===
--CLEAN--
<?php
-@unlink(dirname(__FILE__) . '/tar_makegz.phar.tar');
-@unlink(dirname(__FILE__) . '/tar_makegz_b.phar.tar');
+@unlink(dirname(__FILE__) . '/tar_makebz2.phar.tar.gz');
+@unlink(dirname(__FILE__) . '/tar_makebz2_b.phar.tar.gz');
?>
--EXPECTF--
bool(true)
return php_stream_seek(fp, temp, SEEK_SET);
}
-void phar_rename_archive(phar_archive_data *phar, char *ext TSRMLS_DC)
+void phar_rename_archive(phar_archive_data *phar, char *ext, zend_bool compress TSRMLS_DC)
{
char *oldname = NULL, *oldpath = NULL;
char *basename = NULL, *basepath = NULL;
char *newname = NULL, *newpath = NULL;
+ if (phar->flags && compress) {
+ char *error;
+
+ phar_flush(phar, 0, 0, 0, &error TSRMLS_CC);
+ if (error) {
+ zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, error);
+ efree(error);
+ }
+ }
+
if (!ext) {
if (phar->is_zip) {
if (phar->is_data) {