refcount1.phpt 1.7 KB

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