Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyszukiwarka plików.
Forum PHP.pl > Forum > Przedszkole
zuku
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?
michaJlS
Jeśli chcesz to odpalać tylko na swoim kompie, to pisanie takiej wyszukiwarki nie ma sensu (lepszą masz dostarczoną z OS).

Jeśli chcesz, żeby ten skrypt wchodził głębiej w drzewo katalogów, to powinieneś usunąć rekurencję ( na szybko: tu coś o tym jest: http://www.zyxist.com/pokaz.php/pozbadz_sie_rekurencji ).

Albo zwiększyć limit zagłębień w ustawieniach PHP.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.