Ostatnio potrzebowałem skryptu, dzięki którym mógłbym znaleźć pliki z szukaną frazą w nazwie na moim serwerze, więc go sobie napisałem wraz ze "skanerem"(pokazuje wszystkie pliki w katalogu) plików/folderów w danym miejscu. Pomyślałem, że może się komuś przydać, więc postanowiłem się podzielić!

Mamy tutaj klasę SCAN, oraz w niej dwie funkcje publiczne, oraz jedną prywatną(może być używana tylko przez inne funkcje w tej samej klasie).
Funkcje:
get(SCIEZKA DO KATALOGU)
search(SCIEZKA DO KATALOGU, SZUKANA FRAZA)


Klasa (scan_class.php):
  1. <?PHP
  2. // Search-file class by Ersiu.
  3. // coded at 20 march 2010
  4.  
  5. class SCAN {
  6. private $_FILES = array();
  7. private $_FOUNDS = array();
  8. private $isDir = 0;
  9. private $lang = array(
  10. "noExtension" => "NO-EXTENSION",
  11. "dir" => "DIRECTORY"
  12. );
  13.  
  14. public function get($dir){
  15. $open = scandir($dir);
  16. foreach($open as $file){
  17. if($file!="." && $file!=".."){
  18. $info = $this->getFileInfo($dir,$file);
  19. $this->_FILES[] = $info;
  20. if($info["extension"] == $this->lang["dir"]){
  21. $this->get($dir."/".$file);
  22. }
  23. }
  24. }
  25. return $this->_FILES;
  26. }
  27.  
  28. public function search($dir, $phrase){
  29. foreach($this->get($_GET["dir"]) as $file){
  30. $_file = strtolower($file["fullname"]);
  31. $phrase = strtolower($phrase);
  32. if (strrpos($_file, $phrase) !== false){
  33. $this->_FOUNDS[] = $file;
  34. }
  35. }
  36. return $this->_FOUNDS;
  37. }
  38.  
  39. private function getFileInfo($dir,$file){
  40. $explode = explode(".", $file);
  41. $extension = (count($explode)>1)?end($explode):$this->isDir=1;
  42. if($this->isDir == 1){
  43. if(@scandir($dir."/".$file)) $extension = $this->lang["dir"];
  44. else $extension = $this->lang["noExtension"];
  45. $this->isDir = 0;
  46. }
  47. $name = (count($explode)>0 && strlen($explode[0])<=0)?$explode[1]:$explode[0];
  48. $extension = ($name==$extension)?$this->lang["noExtension"]:$extension;
  49. for($i=1; $i<=count($explode)-2; $i++){
  50. $name .= $explode[$i];
  51. }
  52. $directory = $dir."/".$file;
  53. $size = round((filesize($directory)/1024)/1024,2);
  54. return array(
  55. "name" => $name,
  56. "fullname" => $file,
  57. "extension" => $extension,
  58. "size" => $size,
  59. "dir" => $directory
  60. );
  61. }
  62.  
  63. }
  64. ?>


Przykład użycia:

Szukanie plików z podaną frazą:
  1. <?PHP
  2. require_once("scan_class.php");
  3. echo "<TABLE BORDER=1 style='font-size:12px;'>
  4. <TR>
  5. <TD>#</TD>
  6. <TD>NAZWA</TD>
  7. <TD>FORMAT</TD>
  8. <TD>WAGA</TD>
  9. <TD>SCIEZKA</TD>
  10. </TR>";
  11. $scan = new SCAN;
  12. $i=1;
  13. foreach($scan->search($_GET["dir"], $_GET["search"]) as $file){
  14. echo "<TR>
  15. <TD>{$i}</TD>
  16. <TD>{$file["name"]}</TD>
  17. <TD>{$file["extension"]}</TD>
  18. <TD>{$file["size"]}MB</TD>
  19. <TD>{$file["dir"]}</TD>
  20. </TR>";
  21. $i++;
  22. }
  23. echo "</TABLE>";
  24. ?>

Użycie: http://localhost?dir=ŚCIEZKA_DO_KATALOGU&search=TUTAJ_SZUKANA_FRAZA

A tutaj Wykaz plików/folderów w katalogu
  1. <?PHP
  2. require_once("scan_class.php");
  3. echo "<TABLE BORDER=1 style='font-size:12px;'>
  4. <TR>
  5. <TD>#</TD>
  6. <TD>NAZWA</TD>
  7. <TD>FORMAT</TD>
  8. <TD>WAGA</TD>
  9. <TD>SCIEZKA</TD>
  10. </TR>";
  11. $scan = new SCAN;
  12. $i=1;
  13. foreach($scan->get($_GET["dir"]) as $file){
  14. echo "<TR>
  15. <TD>{$i}</TD>
  16. <TD>{$file["name"]}</TD>
  17. <TD>{$file["extension"]}</TD>
  18. <TD>{$file["size"]}MB</TD>
  19. <TD>{$file["dir"]}</TD>
  20. </TR>";
  21. $i++;
  22. }
  23. echo "</TABLE>";
  24. ?>


Użycie: http://localhost?dir=ŚCIEZKA_DO_KATALOGU