&& ((alias && fname_len == phar->fname_len
&& !strncmp(unixfname, phar->fname, fname_len)) || !alias)
) {
+ phar_entry_info *stub;
efree(unixfname);
#else
if (SUCCESS == phar_get_archive(&phar, fname, fname_len, alias, alias_len, error TSRMLS_CC)
&& ((alias && fname_len == phar->fname_len
&& !strncmp(fname, phar->fname, fname_len)) || !alias)
) {
+ phar_entry_info *stub;
#endif
/* logic above is as follows:
If an explicit alias was requested, ensure the filename passed in
matches the phar's filename.
If no alias was passed in, then it can match either and be valid
*/
+
+ if (!is_data) {
+ /* prevent any ".phar" without a stub getting through */
+ if (!phar->halt_offset && !phar->is_brandnew) {
+ if (FAILURE == zend_hash_find(&(phar->manifest), ".phar/stub.php", sizeof(".phar/stub.php")-1, (void **)&stub)) {
+ spprintf(error, 0, "'%s' is not a phar archive. Use PharData::__construct() for a standard zip or tar archive", fname);
+ return FAILURE;
+ }
+ }
+ }
+ phar->is_data = is_data;
if (pphar) {
*pphar = phar;
}
- phar->is_data = is_data;
return SUCCESS;
} else {
#ifdef PHP_WIN32
if (ext_len >= sizeof(".zip")-1 && !memcmp((void *) ext_str, (void *) ".zip", sizeof(".zip")-1)) {
zip = 1;
}
-
- if (ext_len >= sizeof(".tar")-1 && !memcmp((void *) ext_str, (void *) ".tar", sizeof(".tar")-1)) {
+
+ if ((ext_len >= sizeof(".tar")-1 && !memcmp((void *) ext_str, (void *) ".tar", sizeof(".tar")-1)) || (ext_len >= sizeof(".tgz")-1 && !memcmp((void *) ext_str, (void *) ".tgz", sizeof(".tgz")-1))) {
tar = 1;
}
if (tar || zip) {
if (objname && strncmp(objname, "PharData", 8) != 0) {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Cannot open '%s' as a Phar object. Use PharData::__construct() for a standard zip or tar archive", fname);
+ /* Nested exception causes memleak here */
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot open '%s' as a Phar object. Use PharData::__construct() for a standard %s archive", fname, tar ? "tar" : "zip");
return FAILURE;
}
is_data = 1;
} else {
if (objname && strncmp(objname, "PharData", 8) == 0) {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Cannot open '%s' as a PharData object. Use Phar::__construct() for archives other than .zip and .tar", fname);
+ /* Nested exception causes memleak here */
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot open '%s' as a PharData object. Use Phar::__construct() for archives named other than .zip or .tar", fname);
return FAILURE;
}
}
} else {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Cannot open '%s' as a %s object, file extension (or combination) not recognised", fname, objname);
+ /* Nested exception causes memleak here */
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot open '%s' as a %s object, file extension (or combination) not recognised", fname, objname);
return FAILURE;
}
return phar_open_or_create_tar(fname, fname_len, alias, alias_len, is_data, options, pphar, error TSRMLS_CC);
}
- return phar_create_or_parse_filename(fname, fname_len, alias, alias_len, options, pphar, error TSRMLS_CC);
+ return phar_create_or_parse_filename(fname, fname_len, alias, alias_len, is_data, options, pphar, error TSRMLS_CC);
}
-int phar_create_or_parse_filename(char *fname, int fname_len, char *alias, int alias_len, int options, phar_archive_data** pphar, char **error TSRMLS_DC) /* {{{ */
+int phar_create_or_parse_filename(char *fname, int fname_len, char *alias, int alias_len, int is_data, int options, phar_archive_data** pphar, char **error TSRMLS_DC) /* {{{ */
{
phar_archive_data *mydata;
int register_alias;
if (fp) {
if (phar_open_fp(fp, fname, fname_len, alias, alias_len, options, pphar, error TSRMLS_CC) == SUCCESS) {
- if (!PHAR_G(readonly)) {
+ if (is_data || !PHAR_G(readonly)) {
(*pphar)->is_writeable = 1;
}
if (actual) {
efree(actual);
}
-
- if (PHAR_G(readonly)) {
+ if (PHAR_G(readonly) && !is_data) {
if (options & REPORT_ERRORS) {
if (error) {
spprintf(error, 0, "creating archive \"%s\" disabled by INI setting", fname);
zend_hash_init(&mydata->mounted_dirs, sizeof(char *),
zend_get_hash_value, NULL, 0);
mydata->fname_len = fname_len;
- mydata->alias = alias ? estrndup(alias, alias_len) : estrndup(mydata->fname, fname_len);
- mydata->alias_len = alias ? alias_len : fname_len;
+ if (is_data) {
+ alias = NULL;
+ alias_len = 0;
+ } else {
+ mydata->alias = alias ? estrndup(alias, alias_len) : estrndup(mydata->fname, fname_len);
+ mydata->alias_len = alias ? alias_len : fname_len;
+ }
snprintf(mydata->version, sizeof(mydata->version), "%s", PHAR_API_VERSION_STR);
mydata->is_temporary_alias = alias ? 0 : 1;
mydata->internal_file_start = -1;
{
php_stream *fp;
char *actual;
- int ret;
+ int ret, is_data = 0;
if (error) {
*error = NULL;
}
-
- if (phar_open_loaded(fname, fname_len, alias, alias_len, 0, options, pphar, error TSRMLS_CC) == SUCCESS) {
+
+ if (!strstr(fname, ".phar")) {
+ is_data = 1;
+ }
+
+ if (phar_open_loaded(fname, fname_len, alias, alias_len, is_data, options, pphar, error TSRMLS_CC) == SUCCESS) {
return SUCCESS;
} else if (error && *error) {
return FAILURE;
{
char end;
char *pos_t = strstr(filename, ".tar");
+ char *pos_tgz = strstr(filename, ".tgz");
char *pos_z = strstr(filename, ".zip");
char *pos_tg = strstr(filename, ".tar.gz");
char *pos_tb = strstr(filename, ".tar.bz2");
} else if (pos_z) {
*ext_str = pos_z;
*ext_len = 4;
+ } else if (pos_tgz) {
+ *ext_str = pos_tgz;
+ *ext_len = 4;
} else if (pos_t) {
*ext_str = pos_t;
*ext_len = 4;
long halt_offset;
zval *halt_constant;
php_stream *fp;
- int fname_len;
+ int fname_len, is_data = 0;
if (error) {
*error = NULL;
fname = zend_get_executed_filename(TSRMLS_C);
fname_len = strlen(fname);
- if (phar_open_loaded(fname, fname_len, alias, alias_len, 0, REPORT_ERRORS, NULL, 0 TSRMLS_CC) == SUCCESS) {
+ if (!strstr(fname, ".phar")) {
+ is_data = 1;
+ }
+
+ if (phar_open_loaded(fname, fname_len, alias, alias_len, is_data, REPORT_ERRORS, NULL, 0 TSRMLS_CC) == SUCCESS) {
return SUCCESS;
}
int phar_open_entry_file(phar_archive_data *phar, phar_entry_info *entry, char **error TSRMLS_DC);
int phar_open_filename(char *fname, int fname_len, char *alias, int alias_len, int options, phar_archive_data** pphar, char **error TSRMLS_DC);
int phar_open_or_create_filename(char *fname, int fname_len, char *alias, int alias_len, char *objname, int options, phar_archive_data** pphar, char **error TSRMLS_DC);
-int phar_create_or_parse_filename(char *fname, int fname_len, char *alias, int alias_len, int options, phar_archive_data** pphar, char **error TSRMLS_DC);
+int phar_create_or_parse_filename(char *fname, int fname_len, char *alias, int alias_len, int is_data, int options, phar_archive_data** pphar, char **error TSRMLS_DC);
int phar_open_compiled_file(char *alias, int alias_len, char **error TSRMLS_DC);
int phar_get_archive(phar_archive_data **archive, char *fname, int fname_len, char *alias, int alias_len, char **error TSRMLS_DC);
int phar_open_loaded(char *fname, int fname_len, char *alias, int alias_len, int is_data, int options, phar_archive_data** pphar, char **error TSRMLS_DC);
#if !HAVE_SPL
zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_CC, "Cannot instantiate Phar object without SPL extension");
#else
- char *fname, *alias = NULL, *error, *arch, *entry = NULL, *save_fname;
+ char *fname, *alias = NULL, *error, *arch, *entry = NULL, *save_fname, *objname;
int fname_len, alias_len = 0, arch_len, entry_len, is_data;
long flags = 0;
phar_archive_object *phar_obj;
#endif
}
- if (phar_open_or_create_filename(fname, fname_len, alias, alias_len, phar_obj->std.ce->name, REPORT_ERRORS, &phar_data, &error TSRMLS_CC) == FAILURE) {
+ objname = phar_obj->std.ce->name;
+
+ if (phar_open_or_create_filename(fname, fname_len, alias, alias_len, objname, REPORT_ERRORS, &phar_data, &error TSRMLS_CC) == FAILURE) {
if (fname == arch) {
efree(arch);
fname = save_fname;
}
- if (error) {
+ if (entry) {
efree(entry);
+ }
+ if (error) {
zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC,
- "Cannot open phar file '%s' with alias '%s': %s", fname, alias, error);
+ "%s", error);
efree(error);
- } else {
- efree(entry);
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC,
- "Cannot open phar file '%s' with alias '%s'", fname, alias);
}
return;
}
int ext_len = 0;
PHAR_ARCHIVE_OBJECT();
- if (phar_obj->arc.archive->is_data) {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC,
- "A plain %s archive cannot be converted to a Phar archive", phar_obj->arc.archive->is_tar ? "tar" : "zip");
- return;
- }
-
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ls", &method, &ext, &ext_len) == FAILURE) {
return;
}
RETURN_TRUE;
}
+ if (PHAR_G(readonly)) { /* Don't override this one for is_data */
+ zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC,
+ "Cannot write out phar archive, phar is read-only");
+ return;
+ }
+
switch (method) {
case 0:
flags = PHAR_FILE_COMPRESSED_NONE;
"Unknown compression specified, please pass one of Phar::GZ or Phar::BZ2");
return;
}
- if (PHAR_G(readonly)) {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC,
- "Cannot write out phar archive, phar is read-only");
- return;
- }
if (phar_obj->arc.archive->donotflush) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC,
int phar_open_or_create_tar(char *fname, int fname_len, char *alias, int alias_len, int is_data, int options, phar_archive_data** pphar, char **error TSRMLS_DC) /* {{{ */
{
phar_archive_data *phar;
- int ret = phar_create_or_parse_filename(fname, fname_len, alias, alias_len, options, &phar, error TSRMLS_CC);
+ int ret = phar_create_or_parse_filename(fname, fname_len, alias, alias_len, is_data, options, &phar, error TSRMLS_CC);
if (FAILURE == ret) {
return FAILURE;
phar->is_data = is_data;
- if (is_data) {
- /* phar->is_writeable; WTF */
- phar->alias = NULL;
- phar->alias_len = 0;
- }
-
if (phar->is_tar) {
return ret;
}
phar.require_hash=0
--FILE--
<?php
+
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
$pname = 'phar://' . $fname;
$file = "<?php
include 'files/phar_test.inc';
include $fname;
+
echo file_get_contents('phar://hio/a');
+
?>
--CLEAN--
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
--EXPECT--
-a
\ No newline at end of file
+a
--- /dev/null
+--TEST--
+Phar::convertToZip|Tar|Phar() repeated (phar_based archives)
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--INI--
+phar.require_hash=0
+phar.readonly=0
+--FILE--
+<?php
+
+$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar';
+$pname = 'phar://' . $fname;
+$fname2 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.zip';
+$fname3 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.tar';
+$stub = '<?php echo "first stub\n"; __HALT_COMPILER(); ?>';
+$file = $stub;
+
+$files = array();
+$files['a'] = 'a';
+$files['b'] = 'b';
+$files['c'] = 'c';
+
+include 'files/phar_test.inc';
+
+echo "=================== new Phar() =======================\n";
+$phar = new Phar($fname);
+var_dump($phar->isPhar());
+var_dump($phar->isTar());
+var_dump($phar->isZip());
+var_dump($phar->getStub());
+var_dump($phar->getAlias());
+
+echo "================= convertToTar() =====================\n";
+
+$phar->convertToTar();
+var_dump($phar->isPhar());
+var_dump($phar->isTar());
+var_dump($phar->isZip());
+var_dump($phar->getStub());
+var_dump($phar->getAlias());
+
+echo "================= convertToZip() =====================\n";
+
+$phar->convertToZip();
+var_dump($phar->isPhar());
+var_dump($phar->isTar());
+var_dump($phar->isZip());
+var_dump($phar->getStub());
+var_dump($phar->getAlias());
+
+echo "================= convertToPhar() ====================\n";
+
+$phar->convertToPhar();
+var_dump($phar->isPhar());
+var_dump($phar->isTar());
+var_dump($phar->isZip());
+var_dump(strlen($phar->getStub()));
+var_dump($phar->getAlias());
+
+echo "================= convertToZip() =====================\n";
+
+$phar->convertToZip();
+var_dump($phar->isPhar());
+var_dump($phar->isTar());
+var_dump($phar->isZip());
+var_dump($phar->getStub());
+var_dump($phar->getAlias());
+
+echo "================= convertToTar() =====================\n";
+
+$phar->convertToTar();
+var_dump($phar->isPhar());
+var_dump($phar->isTar());
+var_dump($phar->isZip());
+var_dump($phar->getStub());
+var_dump($phar->getAlias());
+
+echo "================= convertToZip() =====================\n";
+
+$phar->convertToZip();
+var_dump($phar->isPhar());
+var_dump($phar->isTar());
+var_dump($phar->isZip());
+var_dump($phar->getStub());
+var_dump($phar->getAlias());
+
+?>
+===DONE===
+--CLEAN--
+<?php
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.zip');
+?>
+--EXPECT--
+=================== new Phar() =======================
+bool(true)
+bool(false)
+bool(false)
+string(48) "<?php echo "first stub\n"; __HALT_COMPILER(); ?>"
+string(3) "hio"
+================= convertToTar() =====================
+bool(false)
+bool(true)
+bool(false)
+string(60) "<?php // tar-based phar archive stub file
+__HALT_COMPILER();"
+string(57) "C:/sandbox/pecl/phar/tests/phar_convert_repeated.phar.tar"
+================= convertToZip() =====================
+bool(false)
+bool(false)
+bool(true)
+string(60) "<?php // zip-based phar archive stub file
+__HALT_COMPILER();"
+string(57) "C:/sandbox/pecl/phar/tests/phar_convert_repeated.phar.zip"
+================= convertToPhar() ====================
+bool(true)
+bool(false)
+bool(false)
+int(6573)
+string(53) "C:/sandbox/pecl/phar/tests/phar_convert_repeated.phar"
+================= convertToZip() =====================
+bool(false)
+bool(false)
+bool(true)
+string(60) "<?php // zip-based phar archive stub file
+__HALT_COMPILER();"
+string(57) "C:/sandbox/pecl/phar/tests/phar_convert_repeated.phar.zip"
+================= convertToTar() =====================
+bool(false)
+bool(true)
+bool(false)
+string(60) "<?php // tar-based phar archive stub file
+__HALT_COMPILER();"
+string(57) "C:/sandbox/pecl/phar/tests/phar_convert_repeated.phar.tar"
+================= convertToZip() =====================
+bool(false)
+bool(false)
+bool(true)
+string(60) "<?php // zip-based phar archive stub file
+__HALT_COMPILER();"
+string(57) "C:/sandbox/pecl/phar/tests/phar_convert_repeated.phar.zip"
+===DONE===
--- /dev/null
+--TEST--
+PharData::convertToZip|Tar|Phar() repeated (phardata_based archives)
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--INI--
+phar.require_hash=0
+phar.readonly=0
+--FILE--
+<?php
+
+$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.zip';
+
+echo "=================== new PharData() ==================\n";
+$phar = new PharData($fname);
+$phar['a'] = 'a';
+$phar['b'] = 'b';
+$phar['c'] = 'c';
+
+var_dump($phar->isPhar());
+var_dump($phar->isTar());
+var_dump($phar->isZip());
+var_dump($phar->getStub());
+var_dump($phar->getAlias());
+
+echo "================= convertToTar() =====================\n";
+
+$phar->convertToTar(Phar::GZ);
+var_dump($phar->isPhar());
+var_dump($phar->isTar());
+var_dump($phar->isZip());
+var_dump($phar->getStub());
+var_dump($phar->getAlias());
+
+echo "================= convertToZip() =====================\n";
+
+$phar->convertToZip();
+var_dump($phar->isPhar());
+var_dump($phar->isTar());
+var_dump($phar->isZip());
+var_dump($phar->getStub());
+var_dump($phar->getAlias());
+
+echo "================= convertToPhar() ====================\n";
+
+try {
+ $phar->convertToPhar();
+ var_dump($phar->isPhar());
+ var_dump($phar->isTar());
+ var_dump($phar->isZip());
+ var_dump(strlen($phar->getStub()));
+ var_dump($phar->getAlias());
+} catch(Exception $e) {
+ echo $e->getMessage()."\n";
+}
+
+echo "================ convertToTar(GZ) ====================\n";
+
+$phar->convertToTar(Phar::GZ);
+var_dump($phar->isPhar());
+var_dump($phar->isTar());
+var_dump($phar->isZip());
+var_dump($phar->getStub());
+var_dump($phar->getAlias());
+
+echo "================= convertToPhar() ====================\n";
+
+try {
+ $phar->convertToPhar();
+ var_dump($phar->isPhar());
+ var_dump($phar->isTar());
+ var_dump($phar->isZip());
+ var_dump(strlen($phar->getStub()));
+ var_dump($phar->getAlias());
+} catch(Exception $e) {
+ echo $e->getMessage()."\n";
+}
+
+?>
+===DONE===
+--CLEAN--
+<?php
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
+?>
+--EXPECT--
+=================== new PharData() ==================
+bool(false)
+bool(false)
+bool(true)
+string(0) ""
+NULL
+================= convertToTar() =====================
+bool(false)
+bool(true)
+bool(false)
+string(0) ""
+NULL
+================= convertToZip() =====================
+bool(false)
+bool(false)
+bool(true)
+string(0) ""
+NULL
+================= convertToPhar() ====================
+bool(true)
+bool(false)
+bool(false)
+int(6573)
+NULL
+================ convertToTar(GZ) ====================
+bool(false)
+bool(true)
+bool(false)
+string(0) ""
+NULL
+================= convertToPhar() ====================
+bool(true)
+bool(false)
+bool(false)
+int(6573)
+NULL
+===DONE===
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
$pname = 'phar://' . $fname;
-$fname2 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.tar';
-$fname3 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.2.phar.tar';
+$fname2 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.tar.gz';
+$fname3 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.tar';
$stub = '<?php echo "first stub\n"; __HALT_COMPILER(); ?>';
$file = $stub;
var_dump($phar->isCompressed());
var_dump($phar->getStub());
-copy($fname2 . '.gz', $fname3);
+copy($fname2, $fname3);
$phar = new Phar($fname3);
var_dump($phar->isTar());
--CLEAN--
<?php
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.tar.gz');
-unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.2.phar.tar');
-__HALT_COMPILER();
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.tar');
?>
--EXPECT--
bool(false)
@unlink(dirname(__FILE__) . '/tar_001.phar.tar');
?>
--EXPECTF--
-Warning: fopen(phar://%star_001.phar.tar/tar_001.phpt): failed to open stream: phar error: "%star_001.phar.tar" is a corrupted tar file in %star_001.php on line %d
-Cannot open phar file '%star_001.phar.tar' with alias '(null)': phar error: "%star_001.phar.tar" is a corrupted tar file
-===DONE===
\ No newline at end of file
+Warning: fopen(phar://C:\sandbox\pecl\phar\tests\tar/tar_001.phar.tar/tar_001.phpt): failed to open stream: phar error: "C:\sandbox\pecl\phar\tests\tar\tar_001.phar.tar" is a corrupted tar file in C:\sandbox\pecl\phar\tests\tar\tar_001.php on line 9
+phar error: "C:\sandbox\pecl\phar\tests\tar\tar_001.phar.tar" is a corrupted tar file
+===DONE===
@unlink(dirname(__FILE__) . '/tar_002.phar.tar');
?>
--EXPECTF--
-Warning: fopen(phar://%star_002.phar.tar/tar_002.phpt): failed to open stream: phar error: "%star_002.phar.tar" is a corrupted tar file in %star_002.php on line %d
-Cannot open phar file '%star_002.phar.tar' with alias '(null)': phar error: "%star_002.phar.tar" is a corrupted tar file
-===DONE===
\ No newline at end of file
+Warning: fopen(phar://C:\sandbox\pecl\phar\tests\tar/tar_002.phar.tar/tar_002.phpt): failed to open stream: phar error: "C:\sandbox\pecl\phar\tests\tar\tar_002.phar.tar" is a corrupted tar file in C:\sandbox\pecl\phar\tests\tar\tar_002.php on line 9
+phar error: "C:\sandbox\pecl\phar\tests\tar\tar_002.phar.tar" is a corrupted tar file
+===DONE===
$tar = new tarmaker($fname, 'none');
$tar->init();
+$tar->addFile('.phar/stub.php', "<?php // tar-based phar archive stub file\n__HALT_COMPILER();");
$tar->addFile('tar_003.phpt', $g = fopen(__FILE__, 'r'));
$tar->addFile('internal/file/here', "hi there!\n");
$tar->mkDir('internal/dir');
echo file_get_contents($alias . '/internal/file/here');
+try {
$tar = opendir($alias . '/');
+} catch (Exception $e) {
+echo $e->getMessage()."\n";
+}
while (false !== ($v = readdir($tar))) {
echo (is_file($alias . '/' . $v) ? "file\n" : "dir\n");
--EXPECT--
hi there!
dir
+.phar
+dir
dir
dir
internal
tar_003.phpt
second round
dir
+.phar
+dir
dir
dir
internal
file
tar_003.phpt
-===DONE===
\ No newline at end of file
+===DONE===
include dirname(__FILE__) . '/files/tarmaker.php.inc';
$fname = dirname(__FILE__) . '/tar_004.phar.tar';
$alias = 'phar://' . $fname;
+$fname2 = dirname(__FILE__) . '/tar_004.tar';
$tar = new tarmaker($fname, 'none');
$tar->init();
$tar->addFile('internal/file/here', "hi there!\n");
$tar->close();
-$phar = new Phar($fname);
-var_dump($phar->getStub());
+try {
+ $phar = new Phar($fname);
+ var_dump($phar->getStub());
+} catch (Exception $e) {
+ echo $e->getMessage()."\n";
+}
+
+copy($fname, $fname2);
+
+try {
+ $phar = new PharData($fname2);
+ var_dump($phar->getStub());
+} catch (Exception $e) {
+ echo $e->getMessage()."\n";
+}
?>
===DONE===
--CLEAN--
<?php
@unlink(dirname(__FILE__) . '/tar_004.phar.tar');
+@unlink(dirname(__FILE__) . '/tar_004.tar');
?>
--EXPECTF--
+RecursiveDirectoryIterator::__construct(phar://%star_004.phar.tar/): failed to open dir: '%star_004.phar.tar' is not a phar archive. Use PharData::__construct() for a standard zip or tar archive
string(0) ""
===DONE===
<?php
$file = "zfapp";
-$tgz_file = dirname(__FILE__) . "/files/$file.tgz";
-chdir(dirname(__FILE__));
+$orig_file = dirname(__FILE__) . "/files/$file.tgz";
+$tgz_file = dirname(__FILE__) . "/$file.tgz";
+$phar_file = dirname(__FILE__) . "/$file.phar";
+copy($orig_file, $tgz_file);
-$phar_file = basename(__FILE__, '.php') . '.phar';
-@unlink($phar_file);
-copy($tgz_file, $phar_file);
+$phar = new PharData($tgz_file);
+$phar->convertToPhar();
+$phar->stopBuffering();
$phar = new Phar($phar_file);
$phar->startBuffering();
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
-__HALT_COMPILER();
+unlink(dirname(__FILE__) . '/zfapp.phar');
?>
--EXPECTF--
-phar://%szf_test.phar/application/default/controllers/ErrorController.php
-phar://%szf_test.phar/application/default/controllers/IndexController.php
-phar://%szf_test.phar/application/default/views/scripts/error/error.phtml
-phar://%szf_test.phar/application/default/views/scripts/index/index.phtml
-phar://%szf_test.phar/html/.htaccess
-phar://%szf_test.phar/html/index.php
+phar://%szfapp.phar/application/default/controllers/ErrorController.php
+phar://%szfapp.phar/application/default/controllers/IndexController.php
+phar://%szfapp.phar/application/default/views/scripts/error/error.phtml
+phar://%szfapp.phar/application/default/views/scripts/index/index.phtml
+phar://%szfapp.phar/html/.htaccess
+phar://%szfapp.phar/html/index.php
===DONE===
int phar_open_or_create_zip(char *fname, int fname_len, char *alias, int alias_len, int is_data, int options, phar_archive_data** pphar, char **error TSRMLS_DC) /* {{{ */
{
phar_archive_data *phar;
- int ret = phar_create_or_parse_filename(fname, fname_len, alias, alias_len, options, &phar, error TSRMLS_CC);
+ int ret = phar_create_or_parse_filename(fname, fname_len, alias, alias_len, is_data, options, &phar, error TSRMLS_CC);
+
+ if (FAILURE == ret) {
+ return FAILURE;
+ }
if (pphar) {
*pphar = phar;
phar->is_data = is_data;
- if (is_data) {
- phar->is_writeable = 1;
- phar->alias = NULL;
- phar->alias_len = 0;
- }
-
- if (FAILURE == ret) {
- return FAILURE;
- }
-
if (phar->is_zip) {
return ret;
}