refcount1.phpt 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. --TEST--
  2. Phar: test that refcounting avoids problems with deleting a file zip-based
  3. --EXTENSIONS--
  4. phar
  5. --INI--
  6. phar.readonly=0
  7. phar.require_hash=0
  8. --FILE--
  9. <?php
  10. $fname = __DIR__ . '/' . basename(__FILE__, '.php') . '.phar.zip';
  11. $alias = 'phar://' . $fname;
  12. $phar = new Phar($fname);
  13. $phar->setStub("<?php __HALT_COMPILER(); ?>");
  14. $phar->setAlias('hio');
  15. $files = array();
  16. $files['a.php'] = '<?php echo "This is a\n"; ?>';
  17. $files['b.php'] = '<?php echo "This is b\n"; ?>';
  18. $files['b/c.php'] = '<?php echo "This is b/c\n"; ?>';
  19. foreach ($files as $n => $file) {
  20. $phar[$n] = $file;
  21. }
  22. $phar->stopBuffering();
  23. $fp = fopen($alias . '/b/c.php', 'wb');
  24. fwrite($fp, "extra");
  25. fclose($fp);
  26. echo "===CLOSE===\n";
  27. $b = fopen($alias . '/b/c.php', 'rb');
  28. $a = $phar['b/c.php'];
  29. var_dump($a);
  30. var_dump(fread($b, 20));
  31. rewind($b);
  32. echo "===UNLINK===\n";
  33. unlink($alias . '/b/c.php');
  34. var_dump($a);
  35. var_dump(fread($b, 20));
  36. include $alias . '/b/c.php';
  37. ?>
  38. --CLEAN--
  39. <?php unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar.zip'); ?>
  40. --EXPECTF--
  41. ===CLOSE===
  42. object(PharFileInfo)#%d (2) {
  43. [%spathName":%sSplFileInfo":private]=>
  44. string(%d) "phar://%srefcount1.phar.zip/b/c.php"
  45. [%sfileName":%sSplFileInfo":private]=>
  46. string(%d) "c.php"
  47. }
  48. string(5) "extra"
  49. ===UNLINK===
  50. Warning: unlink(): phar error: "b/c.php" in phar "%srefcount1.phar.zip", has open file pointers, cannot unlink in %srefcount1.php on line %d
  51. object(PharFileInfo)#%d (2) {
  52. [%spathName":%sSplFileInfo":private]=>
  53. string(%d) "phar://%srefcount1.phar.zip/b/c.php"
  54. [%sfileName":%sSplFileInfo":private]=>
  55. string(%s) "c.php"
  56. }
  57. string(5) "extra"
  58. extra