fopen_edgecases.phpt 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. --TEST--
  2. Phar: fopen/stat/fseek/unlink/rename edge cases
  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. $fname2 = __DIR__ . '/' . basename(__FILE__, '.php') . '.2.phar.php';
  12. $fname3 = __DIR__ . '/' . basename(__FILE__, '.php') . '.3.phar.php';
  13. $pname = 'phar://' . $fname;
  14. $pname2 = 'phar://' . $fname2;
  15. $pname3 = 'phar://' . $fname3;
  16. // create in cwd
  17. chdir(__DIR__);
  18. file_put_contents('phar://fopen_edgetest.phar/hi', 'hi');
  19. // append
  20. $a = fopen($pname . '/b/c.php', 'a');
  21. // invalid pharname
  22. $a = fopen($pname . '.phar.gz', 'r');
  23. // test phar_open_url() with quiet stat for code coverage
  24. var_dump(file_exists($pname . '.phar.gz/hi'));
  25. // test open for write with new phar
  26. $a = fopen($pname . '/hi', 'w');
  27. fclose($a);
  28. // test open for write with corrupted phar
  29. file_put_contents($fname2, '<?php oh crap __HALT_COMPILER();');
  30. $a = fopen($pname2 . '/hi', 'w');
  31. $a = fopen('phar://', 'r');
  32. $a = fopen('phar://foo.phar', 'r');
  33. file_put_contents($pname . '/hi', 'hi');
  34. $a = fopen($pname . '/hi', 'r');
  35. var_dump(fseek($a, 1), ftell($a));
  36. var_dump(fseek($a, 1, SEEK_CUR), ftell($a));
  37. fclose($a);
  38. var_dump(stat('phar://'));
  39. var_dump(stat('phar://foo.phar'));
  40. var_dump(is_dir($pname));
  41. // this tests coverage of the case where the phar exists and has no files
  42. $phar = new Phar($fname3);
  43. var_dump(file_exists($pname3 . '/test'));
  44. unlink($pname2 . '/hi');
  45. unlink('phar://');
  46. unlink('phar://foo.phar');
  47. unlink($pname . '/oops');
  48. rename('phar://', 'phar://');
  49. rename($pname . '/hi', 'phar://');
  50. rename('phar://foo.phar/hi', 'phar://');
  51. rename($pname . '/hi', 'phar://foo.phar/hi');
  52. ini_set('phar.readonly', 1);
  53. rename($pname . '/hi', $pname . '/there');
  54. ini_set('phar.readonly', 0);
  55. Phar::unlinkArchive($fname);
  56. file_put_contents($pname . '/test.php', '<?php
  57. $a = fopen("./notfound.php", "r");
  58. ?>');
  59. include $pname . '/test.php';
  60. ?>
  61. --CLEAN--
  62. <?php unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
  63. <?php unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.2.phar.php'); ?>
  64. <?php unlink(__DIR__ . '/fopen_edgetest.phar'); ?>
  65. --EXPECTF--
  66. Warning: fopen(phar://%sfopen_edgecases.phar.php/b/c.php): Failed to open stream: phar error: open mode append not supported in %sfopen_edgecases.php on line %d
  67. Warning: fopen(phar://%sfopen_edgecases.phar.php.phar.gz): Failed to open stream: phar error: invalid url or non-existent phar "phar://%sfopen_edgecases.phar.php.phar.gz" in %sfopen_edgecases.php on line %d
  68. bool(false)
  69. Warning: fopen(phar://%sfopen_edgecases.2.phar.php/hi): Failed to open stream: internal corruption of phar "%sfopen_edgecases.2.phar.php" (truncated manifest at stub end) in %sfopen_edgecases.php on line %d
  70. Warning: fopen(phar://): Failed to open stream: phar error: no directory in "phar://", must have at least phar:/// for root directory (always use full path to a new phar) in %sfopen_edgecases.php on line %d
  71. Warning: fopen(phar://foo.phar): Failed to open stream: %s in %sfopen_edgecases.php on line %d
  72. int(0)
  73. int(1)
  74. int(0)
  75. int(2)
  76. Warning: stat(): stat failed for phar:// in %sfopen_edgecases.php on line %d
  77. bool(false)
  78. Warning: stat(): stat failed for phar://foo.phar in %sfopen_edgecases.php on line %d
  79. bool(false)
  80. bool(true)
  81. bool(false)
  82. Warning: unlink(): internal corruption of phar "%sfopen_edgecases.2.phar.php" (truncated manifest at stub end) in %sfopen_edgecases.php on line %d
  83. Warning: unlink(): phar error: unlink failed in %sfopen_edgecases.php on line %d
  84. Warning: unlink(): phar error: no directory in "phar://", must have at least phar:/// for root directory (always use full path to a new phar) in %sfopen_edgecases.php on line %d
  85. Warning: unlink(): phar error: unlink failed in %sfopen_edgecases.php on line %d
  86. Warning: unlink(): phar error: invalid url or non-existent phar "phar://foo.phar" in %sfopen_edgecases.php on line %d
  87. Warning: unlink(): phar error: unlink failed in %sfopen_edgecases.php on line %d
  88. Warning: unlink(): unlink of "phar://%sfopen_edgecases.phar.php/oops" failed, file does not exist in %sfopen_edgecases.php on line %d
  89. Warning: rename(): phar error: cannot rename "phar://" to "phar://": invalid or non-writable url "phar://" in %sfopen_edgecases.php on line %d
  90. Warning: rename(): phar error: cannot rename "phar://%sfopen_edgecases.phar.php/hi" to "phar://": invalid or non-writable url "phar://" in %sfopen_edgecases.php on line %d
  91. Warning: rename(): phar error: cannot rename "phar://foo.phar/hi" to "phar://": invalid or non-writable url "phar://" in %sfopen_edgecases.php on line %d
  92. Warning: rename(): phar error: cannot rename "phar://%sfopen_edgecases.phar.php/hi" to "phar://foo.phar/hi", not within the same phar archive in %sfopen_edgecases.php on line %d
  93. Warning: rename(): phar error: cannot rename "phar://%sfopen_edgecases.phar.php/hi" to "phar://%sfopen_edgecases.phar.php/there": invalid or non-writable url "phar://%sfopen_edgecases.phar.php/hi" in %sfopen_edgecases.php on line %d
  94. Warning: fopen(./notfound.php): Failed to open stream: No such file or directory in phar://%sfopen_edgecases.phar.php/test.php on line %d