refcount1.phpt 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. --TEST--
  2. Phar: test that refcounting avoids problems with deleting a file
  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.php';
  11. $pname = 'phar://' . $fname;
  12. $file = "<?php __HALT_COMPILER(); ?>";
  13. $files = array();
  14. $files['a.php'] = '<?php echo "This is a\n"; ?>';
  15. $files['b.php'] = '<?php echo "This is b\n"; ?>';
  16. $files['b/c.php'] = '<?php echo "This is b/c\n"; ?>';
  17. include 'files/phar_test.inc';
  18. $fp = fopen($pname . '/b/c.php', 'wb');
  19. fwrite($fp, "extra");
  20. fclose($fp);
  21. echo "===CLOSE===\n";
  22. $p = new Phar($fname);
  23. $b = fopen($pname . '/b/c.php', 'rb');
  24. $a = $p['b/c.php'];
  25. var_dump($a);
  26. var_dump(fread($b, 20));
  27. rewind($b);
  28. echo "===UNLINK===\n";
  29. unlink($pname . '/b/c.php');
  30. var_dump($a);
  31. var_dump(fread($b, 20));
  32. include $pname . '/b/c.php';
  33. ?>
  34. --CLEAN--
  35. <?php unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
  36. --EXPECTF--
  37. ===CLOSE===
  38. object(PharFileInfo)#%d (2) {
  39. [%spathName":%sSplFileInfo":private]=>
  40. string(%d) "phar://%srefcount1.phar.php/b/c.php"
  41. [%sfileName":%sSplFileInfo":private]=>
  42. string(%d) "c.php"
  43. }
  44. string(5) "extra"
  45. ===UNLINK===
  46. Warning: unlink(): phar error: "b/c.php" in phar "%srefcount1.phar.php", has open file pointers, cannot unlink in %srefcount1.php on line %d
  47. object(PharFileInfo)#%d (2) {
  48. [%spathName":%sSplFileInfo":private]=>
  49. string(%d) "phar://%srefcount1.phar.php/b/c.php"
  50. [%sfileName":%sSplFileInfo":private]=>
  51. string(%s) "c.php"
  52. }
  53. string(5) "extra"
  54. extra