1--TEST--
2Phar: test for the odd case where we intend to remove an archive from memory
3--EXTENSIONS--
4phar
5--INI--
6phar.readonly=0
7--FILE--
8<?php
9$fname = __DIR__ . '/' . basename(__FILE__, '.php') . '.phar.php';
10$pname = 'phar://' . $fname;
11$fname2 = __DIR__ . '/' . basename(__FILE__, '.php') . '.2.phar.php';
12$pname2 = 'phar://' . $fname2;
13
14$phar = new Phar($fname);
15$phar->setAlias('first');
16$phar['file1.txt'] = 'hi';
17unset($phar);
18
19$phar2 = new Phar($fname2);
20$phar2->setAlias('first'); // this works because there are no references to $fname open
21$phar2['file1.txt'] = 'hi';
22unset($phar2);
23
24$a = fopen($pname . '/file1.txt', 'r'); // this works because there are no references to $fname2 open
25try {
26$phar2 = new Phar($fname2); // fails because references open to $fname
27} catch (Exception $e) {
28echo $e->getMessage(),"\n";
29}
30fclose($a);
31$phar2 = new Phar($fname2); // succeeds because all refs are closed
32var_dump($phar2->getAlias());
33
34$a = file_get_contents($pname . '/file1.txt'); // this fails because $fname2 ref exists
35?>
36--CLEAN--
37<?php unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
38<?php unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.2.phar.php'); ?>
39--EXPECTF--
40Cannot open archive "%stest_alias_unset.2.phar.php", alias is already in use by existing archive
41string(5) "first"
42
43Warning: file_get_contents(phar://%sfile1.txt): Failed to open stream: Cannot open archive "%stest_alias_unset.phar.php", alias is already in use by existing archive in %stest_alias_unset.php on line %d
44