Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Wyszukiwarka plików.
zuku
post 27.07.2009, 16:15:33
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 17.04.2002
Skąd: Jastrzębie Zdrój

Ostrzeżenie: (0%)
-----


Witam.

Próbuję zrobić prostą wyszukiwarkę plików na moim komputerze w php.
Pod spodem prezentuję to co już zrobiłem, a następnie zadam kilka pytań.

  1. <?php
  2. // funkcja wywołuje plik
  3. function _exec ($dest) {
  4.    $arr=explode('/',$dest);
  5.    $arr=array_reverse($arr);
  6.    $cache="cache/{$arr[0]}";
  7.    if (!file_exists($cache)) copy($dest,$cache);
  8.    header("Location:$cache");
  9.    }
  10.  
  11. // funkcja zwraca wagę pliku (w skrócie)
  12. function _fileSize ($bytes, $precision = 2) {
  13.    $units=array('B', 'KB', 'MB', 'GB', 'TB');
  14.    $bytes=max($bytes, 0);
  15.    $pow=floor(($bytes?log($bytes):0)/log(1024));
  16.    $pow=min($pow, count($units)-1);
  17.    $bytes/=pow(1024, $pow);
  18.    return round($bytes, $precision).' '.$units[$pow];
  19.    }
  20.  
  21. // funkcja zwraca rozszerzenie pliku
  22. function _fileType ($file) {
  23.    $ext=explode('.',$file);
  24.    $ext=array_reverse($ext);
  25.    return $ext[0];
  26.    }
  27.  
  28. // funkcja zwraca szczegółowe informacje znalezionego pliku
  29. function _file ($count, $dest, $fname) {
  30.    global $arrType, $string;
  31.    
  32.    $fdate=date("d F Y H:i:s", filemtime($dest.'/'.$fname));
  33.    $fsize=_fileSize(filesize($dest.'/'.$fname));
  34.    $ftype=_fileType($fname);
  35.    $fgroup=null;
  36.    foreach ($arrType as $l=>$v)
  37.        if (in_array($ftype,$v)) {
  38.            $fgroup=$l;
  39.            if ($fgroup=='Graphics' && !file_exists("cache/mini_{$fname}")) {
  40.                require_once("lib/image.php");
  41.                @img_resize("$dest/$fname", 100, "cache", "mini_{$fname}");
  42.                }
  43.            break;
  44.            }
  45.    
  46.    $txt='';
  47.    $txt.='<div class="f">'.$count;
  48.    $txt.=($fgroup=='Graphics')?"<img class=\"mini\" src=\"cache/mini_{$fname}\">":'';
  49.    $txt.="<p class=\"fname\"><a href=\"java script:;\" onclick=\"window.open('?string=$string&open=$dest/$fname')\">".str_replace(".{$ftype}",'',$fname)."</a> ($fsize)</p>";
  50.    $txt.="<p class=\"fdest\">$dest</p>";
  51.    $txt.="<p class=\"fdate\">$fdate | $ftype | $fgroup</p>";
  52.    $txt.='</div>';
  53.    return $txt;
  54.    }
  55.  
  56. // funkcja z mechanizmem przeszukiwania katalogów
  57. function _browse ($dir, $level, $string=null) {
  58.    global $count;
  59.    if ($level<=0) return false;
  60.    if ($dh=opendir($dir)) {
  61.        $txt='';
  62.        while (($fname=readdir($dh))!==false)
  63.            if ($fname!='.' && $fname!='..') {
  64.                if (!is_dir($dir.'/'.$fname)) {
  65.                    if ($string && preg_match('/(.*)'.strtolower($string).'(.*)/',strtolower($fname))) $txt.=_file($count++, $dir, $fname);
  66.                    if (!$string) $txt.=_file($count++, $dir, $fname);
  67.                    }
  68.                else $txt.=_browse($dir.'/'.$fname,$level-1,$string);
  69.                }
  70.  
  71.            closedir($dh);
  72.        }
  73.    return $txt;
  74.    }
  75.  
  76.  
  77. $string=($_GET['string'])?$_GET['string']:null; // wyszukiwana fraza
  78.  
  79. // typy plików
  80. $arrType['Graphics']=array('jpg','Jpg','JPG','jepg','Jepg','JEPG','gif','Gif','GIF','png','Png','PNG');
  81. $arrType['Music']=array('mp3','Mp3','MP3');
  82. $arrType['Video']=array('avi','Avi','AVI');
  83.  
  84. $root="d:/"; // ścieżka od której skrypt ma zacząć wyszukiwać
  85. $maxLevel=3; // głębokość do jakiej ma zajżeć skrypt (ilość subfolderów)
  86. $count=1; // licznik znalezionych elementów
  87.  
  88. echo ($string) ? _browse($root,$maxLevel,$string) : ''; // wywołanie wyszukiwarki
  89. ?>

Wyżej pokazany skrypt działa, ale za płytko. To znaczy że wyświetli mi pliku do 4 podkatalogów, a jak już jest głębiej (5, 6 i więcej katalogów) to skrypt jest przerywany.

Pytania:
Czy jest sens zagłębiania się w kodzie php, żeby wykonać takią wyszukiwarkę?
Jeśli tak, to jak poprawić ten skrypt żebym osiągnął głębokość np. 10 podkatalogów lub więcej?


--------------------
GG: 1331870 | Morecambe Bay
Go to the top of the page
+Quote Post

Posty w temacie
- zuku   [PHP]Wyszukiwarka plików.   27.07.2009, 16:15:33
- - michaJlS   Jeśli chcesz to odpalać tylko na swoim k...   27.07.2009, 16:29:20


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 12:26