phar_extract.phpt 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. --TEST--
  2. Phar: Phar::extractTo()
  3. --SKIPIF--
  4. <?php if (!extension_loaded("phar")) die("skip"); ?>
  5. --INI--
  6. phar.readonly=0
  7. --FILE--
  8. <?php
  9. $fname = dirname(__FILE__) . '/tempmanifest1.phar.php';
  10. $pname = 'phar://' . $fname;
  11. $a = new Phar($fname);
  12. $a['file1.txt'] = 'hi';
  13. $a['file2.txt'] = 'hi2';
  14. $a['subdir/ectory/file.txt'] = 'hi3';
  15. $a->mount($pname . '/mount', __FILE__);
  16. $a->addEmptyDir('one/level');
  17. $a->extractTo(dirname(__FILE__) . '/extract', 'mount');
  18. $a->extractTo(dirname(__FILE__) . '/extract');
  19. $out = array();
  20. foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator(dirname(__FILE__) . '/extract', 0x00003000), RecursiveIteratorIterator::CHILD_FIRST) as $p => $b) {
  21. $out[] = $p;
  22. }
  23. sort($out);
  24. foreach ($out as $b) {
  25. echo "$b\n";
  26. }
  27. $a->extractTo(dirname(__FILE__) . '/extract1', 'file1.txt');
  28. var_dump(file_get_contents(dirname(__FILE__) . '/extract1/file1.txt'));
  29. $a->extractTo(dirname(__FILE__) . '/extract1', 'subdir/ectory/file.txt');
  30. var_dump(file_get_contents(dirname(__FILE__) . '/extract1/subdir/ectory/file.txt'));
  31. $a->extractTo(dirname(__FILE__) . '/extract1-2', array('file2.txt', 'one/level'));
  32. var_dump(file_get_contents(dirname(__FILE__) . '/extract1-2/file2.txt'));
  33. var_dump(is_dir(dirname(__FILE__) . '/extract1-2/one/level'));
  34. try {
  35. $a->extractTo(dirname(__FILE__) . '/whatever', 134);
  36. } catch (Exception $e) {
  37. echo $e->getMessage(), "\n";
  38. }
  39. $a->extractTo(array());
  40. try {
  41. $a->extractTo('');
  42. } catch (Exception $e) {
  43. echo $e->getMessage(), "\n";
  44. }
  45. file_put_contents(dirname(__FILE__) . '/oops', 'I is file');
  46. try {
  47. $a->extractTo(dirname(__FILE__) . '/oops', 'file1.txt');
  48. } catch (Exception $e) {
  49. echo $e->getMessage(), "\n";
  50. }
  51. try {
  52. $a->extractTo(dirname(__FILE__) . '/oops1', array(array(), 'file1.txt'));
  53. } catch (Exception $e) {
  54. echo $e->getMessage(), "\n";
  55. }
  56. try {
  57. $a->extractTo(dirname(__FILE__) . '/extract', 'file1.txt');
  58. } catch (Exception $e) {
  59. echo $e->getMessage(), "\n";
  60. }
  61. file_put_contents(dirname(__FILE__) . '/extract/file1.txt', 'first');
  62. var_dump(file_get_contents(dirname(__FILE__) . '/extract/file1.txt'));
  63. $a->extractTo(dirname(__FILE__) . '/extract', 'file1.txt', true);
  64. var_dump(file_get_contents(dirname(__FILE__) . '/extract/file1.txt'));
  65. try {
  66. $a->extractTo(str_repeat('a', 20000), 'file1.txt');
  67. } catch (Exception $e) {
  68. echo $e->getMessage(), "\n";
  69. }
  70. $a[str_repeat('a', 20000)] = 'long';
  71. try {
  72. $a->extractTo(dirname(__FILE__) . '/extract', str_repeat('a', 20000));
  73. } catch (Exception $e) {
  74. echo $e->getMessage(), "\n";
  75. }
  76. ?>
  77. ===DONE===
  78. --CLEAN--
  79. <?php
  80. @rmdir(dirname(__FILE__) . '/whatever');
  81. @unlink(dirname(__FILE__) . '/oops');
  82. @rmdir(dirname(__FILE__) . '/oops1');
  83. @unlink(dirname(__FILE__) . '/tempmanifest1.phar.php');
  84. $e = dirname(__FILE__) . '/extract/';
  85. @unlink($e . 'file1.txt');
  86. @unlink($e . 'file2.txt');
  87. @unlink($e . 'subdir/ectory/file.txt');
  88. @rmdir($e . 'subdir/ectory');
  89. @rmdir($e . 'subdir');
  90. @rmdir($e . 'one/level');
  91. @rmdir($e . 'one');
  92. @rmdir($e);
  93. $e = dirname(__FILE__) . '/extract1/';
  94. @unlink($e . 'file1.txt');
  95. @unlink($e . 'subdir/ectory/file.txt');
  96. @rmdir($e . 'subdir/ectory');
  97. @rmdir($e . 'subdir');
  98. @rmdir($e);
  99. $e = dirname(__FILE__) . '/extract1-2/';
  100. @unlink($e . 'file2.txt');
  101. @rmdir($e . 'one/level');
  102. @rmdir($e . 'one');
  103. @rmdir($e);
  104. ?>
  105. --EXPECTF--
  106. %sextract%cfile1.txt
  107. %sextract%cfile2.txt
  108. %sextract%cone
  109. %sextract%csubdir
  110. %sextract%csubdir%cectory
  111. %sextract%csubdir%cectory%cfile.txt
  112. string(2) "hi"
  113. string(3) "hi3"
  114. string(3) "hi2"
  115. bool(false)
  116. Invalid argument, expected a filename (string) or array of filenames
  117. Warning: Phar::extractTo() expects parameter 1 to be a valid path, array given in %sphar_extract.php on line %d
  118. Invalid argument, extraction path must be non-zero length
  119. Unable to use path "%soops" for extraction, it is a file, must be a directory
  120. Invalid argument, array of filenames to extract contains non-string value
  121. Extraction from phar "%stempmanifest1.phar.php" failed: Cannot extract "file1.txt" to "%sextract/file1.txt", path already exists
  122. string(5) "first"
  123. string(2) "hi"
  124. Cannot extract to "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...", destination directory is too long for filesystem
  125. Extraction from phar "%stempmanifest1.phar.php" failed: Cannot extract "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..." to "%s...", extracted filename is too long for filesystem
  126. ===DONE===