test_alias_unset.phpt 1.6 KB

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