Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > поиск в файле php


Автор: ArNic 11.2.2009, 10:34
Сделал маленкий инструмент: 
Код

<form method="POST"><input id="search" name="search" type="text"><input type="submit"></form>
<?php
error_reporting(0);
$find = new Find();
$show = $find->FReaddir($_SERVER['DOCUMENT_ROOT'],$_POST['search']);
Class Find {
    function FReaddir($path,$search){
        $dir = opendir($path);
        while ($file = readdir($dir)) {
            if ($file != '..' && $file != '.'){
                $arrfiletype = explode('.',$file);
                if (is_dir($path.'/'.$file)){
                    print '<ul><li><b>'.$itogtab.$file.'</b></li>';
                    $this->FReaddir($path.'/'.$file,$search);
                } elseif (is_file($path.'/'.$file) && $arrfiletype[1] == 'php'){
                    print '<ul><li><i><font color=#666666><b>'.$itogtab.$file.'</b></font></i></li>';
                    $this->FReadfile($path,$file,$search);
                }
            }
        }
        
        closedir($dir);
        print '</ul';
    }
    function FReadfile($folder,$file,$search){
        $fo = fopen($folder.'/'.$file,'r');
        if ($fo){
            for ($i=0; $na = fgets($fo);$i++){
                if ($search!=''){
                    if (stripos($na,$search)){
                        print '<input type="checkbox"/><font color=blue>'.$na.'</font><br/>';
                    }
                } else {
                    if (stripos($na,"location")){
                        print '<input type="checkbox"/><font color=red>'.$na.'</font><br/>';
                    } elseif (stripos($na,"include")){
                        print '<input type="checkbox"/><font color=blue>'.$na.'</font><br/>';
                    } elseif(stripos($na,"reqire")){
                        print '<input type="checkbox"/><font color=green>'.$na.'</font><br/>';
                    }
                }
            }
        fclose($fo);
        }
        print '</ul>';
    }
}
class Utils(){
}
?>

Он ищет значение и выводит список файлов и всю строку где это значение находится. Проблема заключается в том, что я делал это специально чтобы находить переменные и значения по php  и html - чужого мне мало известного кода (бывают задачи на изучение и анализ кода) ... Так чот - тулза не ищет.. а может не выдает результатов в классах и методах искомых файлов... видимо пытается исполнить... что неприемлемо... не знаю как поступить... пытался придумать решение - но пока не додумался.... может у кого будут идеи или конкретные предложения?

P.S. просьба не задавать вопросов о резонности или необходимости такого инструмента.

Автор: ksnk 11.2.2009, 11:02
Может файлы названы с несколькоми точками? 
Common.class.php, например...

Скачать все локально и искать Тотал командиром. Или портнуть в новый проект и продвинутое IDE все само покажет что надо...

Автор: ArNic 11.2.2009, 11:18
Дело не в начзании из 3-х точек - а в том, что в файлах с классами (независимо сколько точек в названии) значения в классах не ищет :(

Добавлено через 2 минуты и 44 секунды
По поводу того чтобы пользоваться ide - можно конечно - но у меня виды на эту тулзу

Автор: ksnk 11.2.2009, 11:27
Ну, видимо, полезно прочитать в мануале про stripos. Для случай stripos('include',...), когда incude находится в начале строки, возможно будет чему поудивляться ;-) Хотя, делу это не поможет...

Что за данные ищутся? В каких файлах? К примеру в приведенном файле (Это классы? ) переменнтая $search благополучно нашлась smile

Автор: ArNic 11.2.2009, 14:18
Да здесь классы содержатся - но как убеждался не раз - все значения он не нахоит - я обязательно чуть позже выложу пример когда, в котором не нашлась переменная, чтобы было с чем оперировать

Автор: Sentox 11.2.2009, 16:06
Используйте pathinfo(); или basename();

Автор: Sentox 11.2.2009, 16:38
Я так понял скрипт в любых раскладах должен прогонять рекурсивно все каталоги с подкаталогами и выводить их в список?
Если так он этого не делает.
Он "гаснет" на полпути.
А на счёт точки дополнительной в имени файла это верно он его в упор не видит.Используйте pathinfo()

Автор: Sentox 11.2.2009, 17:59
Код

   while($na = fgets($fo, 1024)){
                if ($search!=''){
                    if (stripos($na,$search) !== false){
                        print '<input type="checkbox"/><font color=blue>'.$na.'</font><br/>';
                    }
                } else {
                    if (stripos($na,"location") !== false){
                        print '<input type="checkbox"/><font color=red>'.$na.'</font><br/>';
                    } elseif (stripos($na,"include") !== false){
                        print '<input type="checkbox"/><font color=blue>'.$na.'</font><br/>';
                    } elseif(stripos($na,"require") !== false){
                        print '<input type="checkbox"/><font color=green>'.$na.'</font><br/>';
                    }
                }
                     


Автор: ksnk 11.2.2009, 18:33
Sentox, А если строка поиска попадет как раз на границу этого 1024 буфера? Будет конфуз... smile

Хотя, это дурацкая придирка... я fgets слишком поздно увидел :-(


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)