PageRenderTime 47ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/classes/options/merge.php

https://gitlab.com/dkiller1/rapidleech
PHP | 176 lines | 175 code | 1 blank | 0 comment | 60 complexity | 1a5a6fbe0652b7096d2871ef3beff615 MD5 | raw file
  1. <?php
  2. function merge() {
  3. global $options, $list, $PHP_SELF;
  4. if (count($_GET["files"]) !== 1) {
  5. echo lang(167)."<br /><br />";
  6. }
  7. else {
  8. $file = $list [$_GET ["files"] [0]];
  9. if (substr ( $file ["name"], - 4 ) == '.001' && is_file ( substr ( $file ["name"], 0, - 4 ) . '.crc' )) {
  10. echo lang(168)."<br /><br />";
  11. } elseif (substr ( $file ["name"], - 4 ) !== '.crc' && substr ( $file ["name"], - 4 ) !== '.001') {
  12. echo lang(169)."<br /><br />";
  13. } else {
  14. echo lang(306)." <b>".basename(substr($file["name"], 0, -4))."</b><br /><br />";
  15. $usingcrcfile = (substr ( $file ["name"], - 4 ) === '.001') ? false : true;
  16. ?>
  17. <form method="post" action="<?php echo $PHP_SELF; ?>"><input type="hidden" name="files[0]" value="<?php echo $_GET ["files"] [0]; ?>" />
  18. <table>
  19. <?php
  20. if ($usingcrcfile) {
  21. ?>
  22. <tr>
  23. <td align="left"><input type="checkbox" name="crc_check" value="1" checked="checked" onclick="javascript:var displ=this.checked?'inline':'none';document.getElementById('crc_check_mode').style.display=displ;" />&nbsp;<?php echo lang(170); ?><br />
  24. <span id="crc_check_mode"><?php echo lang(171); ?>:<br />
  25. <?php
  26. if (function_exists ( 'hash_file' )) {
  27. ?><input type="radio" name="crc_mode" value="hash_file" checked="checked" />&nbsp;<?php echo lang(172); ?><br />
  28. <?php } ?>
  29. <input type="radio" name="crc_mode" value="fake"<?php if (!function_exists('hash_file')) { echo 'checked="checked"'; }?> />&nbsp;<?php echo lang(174); ?></span></td>
  30. </tr>
  31. <tr>
  32. <td><input type="checkbox" name="del_ok" <?php echo $options['disable_deleting'] ? 'disabled="disabled"' : 'checked="checked"'; ?> />&nbsp;<?php echo lang(175); ?></td>
  33. </tr>
  34. <?php
  35. } else {
  36. ?>
  37. <tr>
  38. <td align="center"><?php echo lang(176); ?>: <b><?php echo lang(177); ?></b></td>
  39. </tr>
  40. <?php
  41. }
  42. ?>
  43. <tr>
  44. <td align="center"><input type="hidden" name="act" value="merge_go" /> <input type="submit" value="<?php echo lang(291); ?>" /></td>
  45. </tr>
  46. </table>
  47. </form>
  48. <?php
  49. }
  50. }
  51. }
  52. function merge_go() {
  53. global $list, $options;
  54. if (count($_POST["files"]) !== 1) {
  55. echo lang(167)."<br /><br />";
  56. } else {
  57. $file = $list [$_POST ["files"] [0]];
  58. if (substr ( $file ["name"], - 4 ) == '.001' && is_file ( substr ( $file ["name"], 0, - 4 ) . '.crc' )) {
  59. echo lang(168)."<br /><br />";
  60. } elseif (substr ( $file ["name"], - 4 ) !== '.crc' && substr ( $file ["name"], - 4 ) !== '.001') {
  61. echo lang(169)."<br /><br />";
  62. } else {
  63. $usingcrcfile = (substr ( $file ["name"], - 4 ) === '.001') ? false : true;
  64. if (! $usingcrcfile) {
  65. $data = array ('filename' => basename ( substr ( $file ["name"], 0, - 4 ) ), 'size' => - 1, 'crc32' => '00111111' );
  66. } else {
  67. $fs = @fopen ( $file ["name"], "rb" );
  68. }
  69. if ($usingcrcfile && ! $fs) {
  70. echo lang(178)."<br /><br />";
  71. } else {
  72. if ($usingcrcfile) {
  73. $data = array ();
  74. while ( ! feof ( $fs ) ) {
  75. $data_ = explode ( '=', trim ( fgets ( $fs ) ), 2 );
  76. if ($data_[0] == 'crc32') $data_[1] = strtoupper($data_[1]);
  77. $data [$data_ [0]] = $data_ [1];
  78. }
  79. fclose ( $fs );
  80. }
  81. $path = realpath ( DOWNLOAD_DIR ) . PATH_SPLITTER;
  82. $filename = basename ( $data ['filename'] );
  83. $partfiles = array ();
  84. $partsSize = 0;
  85. for($j = 1; $j < 10000; $j ++) {
  86. if (! is_file ( $path . $filename . '.' . sprintf ( "%03d", $j ) )) {
  87. if ($j == 1) {
  88. $partsSize = - 1;
  89. }
  90. break;
  91. }
  92. $partfiles [] = $path . $filename . '.' . sprintf ( "%03d", $j );
  93. $partsSize += filesize ( $path . $filename . '.' . sprintf ( "%03d", $j ) );
  94. }
  95. if (file_exists ( $path . $filename )) {
  96. printf(lang(179),$path . $filename);
  97. echo "<br /><br />";
  98. } elseif ($usingcrcfile && $partsSize != $data ['size']) {
  99. echo lang(180)."<br /><br />";
  100. } elseif ($options['check_these_before_unzipping'] && is_array ( $options['forbidden_filetypes'] ) && in_array ( strtolower ( strrchr ( $filename, "." ) ), $options['forbidden_filetypes'] )) {
  101. printf(lang(181),strrchr ( $filename, "." ));
  102. echo "<br /><br />";
  103. } else {
  104. $merge_buffer_size = 2 * 1024 * 1024;
  105. $merge_dest = @fopen ( $path . $filename, "wb" );
  106. if (! $merge_dest) {
  107. printf(lang(182),$path . $filename);
  108. echo "<br /><br />";
  109. } else {
  110. $merge_ok = true;
  111. foreach ( $partfiles as $part ) {
  112. $merge_source = @fopen ( $part, "rb" );
  113. while ( ! feof ( $merge_source ) ) {
  114. $merge_buffer = fread ( $merge_source, $merge_buffer_size );
  115. if ($merge_buffer === false) {
  116. printf(lang(65),$part);
  117. echo "<br /><br />";
  118. $merge_ok = false;
  119. break;
  120. }
  121. if (fwrite ( $merge_dest, $merge_buffer ) === false) {
  122. printf(lang(183),$path . $filename);
  123. echo "<br /><br />";
  124. $merge_ok = false;
  125. break;
  126. }
  127. }
  128. fclose ( $merge_source );
  129. if (! $merge_ok) {
  130. break;
  131. }
  132. }
  133. fclose ( $merge_dest );
  134. if ($merge_ok) {
  135. $fc = (($_POST['crc_mode'] == 'hash_file' && function_exists('hash_file')) ? strtoupper(hash_file('crc32b', $path . $filename)) : '111111');
  136. if ($fc != $data["crc32"]) {
  137. echo lang(184)."<br /><br />";
  138. } else {
  139. printf(lang(185),$filename);
  140. echo '!<br /><br />';
  141. if ($usingcrcfile && $fc != '00111111' && $_POST["del_ok"] && !$options['disable_deleting']) {
  142. if ($usingcrcfile) {
  143. $partfiles [] = $file ["name"];
  144. }
  145. foreach ( $partfiles as $part ) {
  146. if (@unlink ( $part )) {
  147. foreach ( $list as $list_key => $list_file ) {
  148. if ($list_file ["name"] === $part) {
  149. unset ( $list [$list_key] );
  150. }
  151. }
  152. echo "<b>" . basename ( $part ) . "</b> ".lang(186).".<br />";
  153. } else {
  154. echo "<b>" . basename ( $part ) . "</b> ".lang(187).".<br />";
  155. }
  156. }
  157. echo "<br />";
  158. }
  159. $time = filemtime($path.$filename);
  160. while ( isset ( $list [$time] ) ) {
  161. $time ++;
  162. }
  163. $list [$time] = array ("name" => $path . $filename, "size" => bytesToKbOrMbOrGb ( $partsSize ), "date" => $time );
  164. if (! updateListInFile ( $list )) {
  165. echo lang(146)."<br /><br />";
  166. }
  167. }
  168. }
  169. }
  170. }
  171. }
  172. }
  173. }
  174. }
  175. ?>