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

stream

Support
Команда форума
Регистрация
09.09.14
Сообщения
1.014
Реакции
674
Баллы
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-адреса, подсети, или вообще в админку чата пристроить этот поиск.
_search.png

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

Майор

Premium
Premium
Регистрация
04.09.14
Сообщения
2.954
Реакции
2.025
Баллы
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

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