Поиск текста в файлах

stream

Модератор
Команда форума
Регистрация
09.09.14
Сообщения
945
Реакции
582
Баллы
93
...Сегодня озадачился поиском некоего текста в php-файлах чата. В гугле нашел несколько вариантов. Выкладываю проверенный:
PHP:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=win-1251'/>
<title>:)</title>
</head>
<body>
<?php
error_reporting (E_ALL);
$user = $_SERVER['HTTP_USER_AGENT'];
// здесь пишите свой $_SERVER['HTTP_USER_AGENT']
$t_user = "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A456 Safari/602.1";
if($user == $t_user) {
echo "Welcome, admin!<br>";
} else {
echo "This page only for admin!";
exit;
}
function imTimer($name= 'default', $mode= ''){
static $timers= array();
$now=microtime(true);
if(!isset($timers[$name])){
$timers[$name]= $now;
return 0;}
$ret= $now - $timers[$name];
if($mode == 'reset')
$timers[$name]= $now;
return round($ret, 5);}
imTimer();
if(isset($_POST['submit'])){
    if($_POST['line_search']=="" or $_POST['dir']=="") header("Location: ".$_SERVER['PHP_SELF']);
    $line_search=$_POST['line_search'];
    $dir=trim($_POST['dir']);
    $files_in_dir=array();
    function filesdir($dir='.'){
        global $files_in_dir;
        $scandir=scandir($dir);
        foreach ($scandir as $num_file => $name_file)
            {
            if($name_file=='.' or $name_file=='..') continue;
            if($dir=='.') $add_name=""; else $add_name = $dir."/";
            if(is_file($add_name.$name_file)){
                $ext=explode('.',$add_name.$name_file); $ext=$ext[count($ext)-1];
$scriptFileName=explode('/', $_SERVER['PHP_SELF']); $scriptFileName=$scriptFileName[count($scriptFileName)-1];
  //в изображениях текст не ищут. Можно добавить свои расширения.
if($ext=='gif' or $ext=='zip' or $ext=='rar' or $ext=='jpg' or $ext=='jpeg' or $ext=='png' or $name_file==$scriptFileName) continue;
                $files_in_dir[]=$add_name.$name_file;
                }
            elseif(is_dir($add_name.$name_file)) filesdir($add_name.$name_file);
            }
        }
    filesdir($dir);
    foreach ($files_in_dir as $num_file => $name_file)
        {
        $file=file($name_file);
        $found=false;
        foreach ($file as $line_num => $line_text)
            {
            if (strpos($line_text, $line_search) !== false) {$found=true; $num_line[]=$line_num+1; $text_num_line[]=htmlspecialchars(trim($line_text), ENT_QUOTES);}
            }
        if($found==true)
            {
            echo '<b>'.$name_file.'</b>:<br>';
            $count=count($num_line);
            for($i=0;$i<=$count-1;$i++)
            {
            echo 'Found: line <b>'.$num_line[$i].'</b> ('.$text_num_line[$i].')<br>';
            }
            $num_line='';
            }
        }
}

$line_search_post=isset($_POST['line_search'])?$_POST['line_search']:"";
$dir_post=isset($_POST['dir'])?trim($_POST['dir']):".";
?>
<form method="POST">
Текст: <input type="text" name="line_search" value="<? echo $line_search_post; ?>">
<br>
Папка: <input type="text" name="dir" value="<? echo $dir_post; ?>">
<br>
<input type="submit" name="submit" value="Искать!">
</form>
</body>
</html>
Если используете кодировку UTF-8, вначале скрипта смените на свою.
Переменную $t_user изменить на свою. Примитивная проверка, чтобы не лез кто попало, и не искал, чего не надо искать. Можно добавить и на проверку своего ip-адреса, подсети, или вообще в админку чата пристроить этот поиск.
_search.png

(пристроил в админке чата, на скрине результат поиска строки "a nety tyt takogo pyti" в моде X Status от PowerUSB
Автор кода неизвестен.
 
Последнее редактирование:

Майор

Администратор
Команда форума
Регистрация
04.09.14
Сообщения
2.776
Реакции
1.845
Баллы
113
...Сегодня озадачился поиском некоего текста в php-файлах чата. В гугле нашел несколько вариантов. Выкладываю проверенный:
PHP:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=win-1251'/>
<title>:)</title>
</head>
<body>
<?php
error_reporting (E_ALL);
$user = $_SERVER['HTTP_USER_AGENT'];
// здесь пишите свой $_SERVER['HTTP_USER_AGENT']
$t_user = "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A456 Safari/602.1";
if($user == $t_user) {
echo "Welcome, admin!<br>";
} else {
echo "This page only for admin!";
exit;
}
function imTimer($name= 'default', $mode= ''){
static $timers= array();
$now=microtime(true);
if(!isset($timers[$name])){
$timers[$name]= $now;
return 0;}
$ret= $now - $timers[$name];
if($mode == 'reset')
$timers[$name]= $now;
return round($ret, 5);}
imTimer();
if(isset($_POST['submit'])){
    if($_POST['line_search']=="" or $_POST['dir']=="") header("Location: ".$_SERVER['PHP_SELF']);
    $line_search=$_POST['line_search'];
    $dir=trim($_POST['dir']);
    $files_in_dir=array();
    function filesdir($dir='.'){
        global $files_in_dir;
        $scandir=scandir($dir);
        foreach ($scandir as $num_file => $name_file)
            {
            if($name_file=='.' or $name_file=='..') continue;
            if($dir=='.') $add_name=""; else $add_name = $dir."/";
            if(is_file($add_name.$name_file)){
                $ext=explode('.',$add_name.$name_file); $ext=$ext[count($ext)-1];
$scriptFileName=explode('/', $_SERVER['PHP_SELF']); $scriptFileName=$scriptFileName[count($scriptFileName)-1];
  //в изображениях текст не ищут. Можно добавить свои расширения.
if($ext=='gif' or $ext=='zip' or $ext=='rar' or $ext=='jpg' or $ext=='jpeg' or $ext=='png' or $name_file==$scriptFileName) continue;
                $files_in_dir[]=$add_name.$name_file;
                }
            elseif(is_dir($add_name.$name_file)) filesdir($add_name.$name_file);
            }
        }
    filesdir($dir);
    foreach ($files_in_dir as $num_file => $name_file)
        {
        $file=file($name_file);
        $found=false;
        foreach ($file as $line_num => $line_text)
            {
            if (strpos($line_text, $line_search) !== false) {$found=true; $num_line[]=$line_num+1; $text_num_line[]=htmlspecialchars(trim($line_text), ENT_QUOTES);}
            }
        if($found==true)
            {
            echo '<b>'.$name_file.'</b>:<br>';
            $count=count($num_line);
            for($i=0;$i<=$count-1;$i++)
            {
            echo 'Found: line <b>'.$num_line[$i].'</b> ('.$text_num_line[$i].')<br>';
            }
            $num_line='';
            }
        }
}

$line_search_post=isset($_POST['line_search'])?$_POST['line_search']:"";
$dir_post=isset($_POST['dir'])?trim($_POST['dir']):".";
?>
<form method="POST">
Текст: <input type="text" name="line_search" value="<? echo $line_search_post; ?>">
<br>
Папка: <input type="text" name="dir" value="<? echo $dir_post; ?>">
<br>
<input type="submit" name="submit" value="Искать!">
</form>
</body>
</html>
Если используете кодировку UTF-8, вначале скрипта смените на свою. В конце имени папки ставить слэш.
Переменную $t_user изменить на свою. Примитивная проверка, чтобы не лез кто попало, и не искал, чего не надо искать. Можно добавить и на проверку своего ip-адреса, подсети, или вообще в админку чата пристроить этот поиск.
Автор кода неизвестен.
куда что вставлять, как пользоваться?
 

stream

Модератор
Команда форума
Регистрация
09.09.14
Сообщения
945
Реакции
582
Баллы
93
куда что вставлять, как пользоваться?
Никуда не вставлять - код сохранить файлом со своем названием с расширением .php. Загрузить в нужный каталог, и обратиться к скрипту через браузер.В верхнее поле пишем текст, который ищем - это может быть код php, html, css, в нижнее - относительный путь к заведомо существующему каталогу . Если в начале пути точка, как на скрине - поиск будет производиться в текущем каталоке, если две точки - на уровень вложенности выше (это если скрипт лежит в папке admin, или на том же уровне относительно корня сайта-чата). Вывод ошибок и предупреждений error_reporting (E_ALL); можно просто закомментировать.
 
Сверху Снизу