test_alias_unset.phpt 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. --TEST--
  2. Phar: test for the odd case where we intend to remove an archive from memory
  3. --EXTENSIONS--
  4. phar
  5. --INI--
  6. phar.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. $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. --CLEAN--
  33. <?php unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
  34. <?php unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.2.phar.php'); ?>
  35. --EXPECTF--
  36. Cannot open archive "%stest_alias_unset.2.phar.php", alias is already in use by existing archive
  37. string(5) "first"
  38. 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