/**
* Create or open a phar for writing
*/
-static int phar_open_or_create_filename(char *fname, int fname_len, char *alias, int alias_len, int options, phar_archive_data** pphar TSRMLS_DC) /* {{{ */
+int phar_open_or_create_filename(char *fname, int fname_len, char *alias, int alias_len, int options, phar_archive_data** pphar TSRMLS_DC) /* {{{ */
{
phar_archive_data *mydata;
int register_alias;
/* set up our manifest */
mydata = ecalloc(sizeof(phar_archive_data), 1);
+ if (pphar) {
+ *pphar = mydata;
+ }
zend_hash_init(&mydata->manifest, sizeof(phar_entry_info),
zend_get_hash_value, destroy_phar_manifest, 0);
mydata->fname = estrndup(fname, fname_len);
ssb->sb.st_ctime = phar->max_timestamp;
#endif
}
- if (!phar->is_writeable) {
+ if (PHAR_G(readonly)) {
ssb->sb.st_mode = (ssb->sb.st_mode & 0555) | (ssb->sb.st_mode & ~0777);
}
ALLOC_HASHTABLE(data);
zend_hash_init(data, 64, zend_get_hash_value, NULL, 0);
+ if (*dir == '/' && dirlen == 1 && (manifest->nNumOfElements == 0)) {
+ // make empty root directory for empty phar
+ efree(dir);
+ return php_stream_alloc(&phar_dir_ops, data, NULL, "r");
+ }
zend_hash_internal_pointer_reset(manifest);
while (FAILURE != zend_hash_has_more_elements(manifest)) {
if (HASH_KEY_NON_EXISTANT == zend_hash_get_current_key_ex(manifest, &key, &keylen, &unused, 0, NULL)) {
void phar_object_init(TSRMLS_D);
int phar_open_filename(char *fname, int fname_len, char *alias, int alias_len, int options, phar_archive_data** pphar TSRMLS_DC);
+int phar_open_or_create_filename(char *fname, int fname_len, char *alias, int alias_len, int options, phar_archive_data** pphar TSRMLS_DC);
int phar_open_compiled_file(char *alias, int alias_len TSRMLS_DC);
#ifdef PHAR_MAIN
return;
}
- if (phar_open_filename(fname, fname_len, alias, alias_len, REPORT_ERRORS, &phar_data TSRMLS_CC) == FAILURE) {
+ if (phar_open_or_create_filename(fname, fname_len, alias, alias_len, REPORT_ERRORS, &phar_data TSRMLS_CC) == FAILURE) {
zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC,
"Cannot open phar file '%s' with alias '%s'", fname, alias);
return;
$p->commitWrite();
var_dump($p->getStub());
$p->commitWrite("<?php
-function __autoload($class)
+function __autoload(\$class)
{
- include 'phar://' . str_replace('_', '/', $class);
+ include 'phar://' . str_replace('_', '/', \$class);
}
-Phar::mapPhar('myphar.phar');
-include 'phar://myphar.phar/startup.php';
+Phar::mapPhar('brandnewphar.phar');
+include 'phar://brandnewphar.phar/startup.php';
__HALT_COMPILER();
?>");
var_dump($p->getStub());
<?php
unlink(dirname(__FILE__) . '/brandnewphar.phar');
?>
---EXPECT--
\ No newline at end of file
+--EXPECT--
+string(24) "<?php __HALT_COMPILER();"
+string(198) "<?php
+function __autoload($class)
+{
+ include 'phar://' . str_replace('_', '/', $class);
+}
+Phar::mapPhar('brandnewphar.phar');
+include 'phar://brandnewphar.phar/startup.php';
+__HALT_COMPILER();
+?>"
+===DONE===
\ No newline at end of file