Wykaz plików/folderów w katalogu + Szukanie plików z daną frazą
Witam, ostatnio potrzebowałem wyświetlić zawartość katalogów oraz wyszukać w katalogach plików/folderów z podaną frazą, nie mogłem znaleźć "porządnego", więc napisałem własny.
Świadomie nie użyłem wielu funkcji, które by skróciły skrypt, ponieważ nie działają one prawidłowo... np. plik bez rozszerzenia uznają za katalog itd.
Listing
<?PHP
// Search-file class by Ersiu.
// coded at 20 march 2010
class SCAN {
private $_FILES = array();
private $_FOUNDS = array();
private $isDir = 0;
private $lang = array(
"noExtension" => "NO-EXTENSION",
"dir" => "DIRECTORY"
);
public function get($dir){
$open = scandir($dir);
foreach($open as $file){
if($file!="." && $file!=".."){
$info = $this->getFileInfo($dir,$file);
$this->_FILES[] = $info;
if($info["extension"] == $this->lang["dir"]){
$this->get($dir."/".$file);
}
}
}
return $this->_FILES;
}
public function search($dir, $phrase){
foreach($this->get($_GET["dir"]) as $file){
$_file = strtolower($file["fullname"]);
$phrase = strtolower($phrase);
if (strrpos($_file, $phrase) !== false){
$this->_FOUNDS[] = $file;
}
}
return $this->_FOUNDS;
}
private function getFileInfo($dir,$file){
$explode = explode(".", $file);
$extension = (count($explode)>1)?end($explode):$this->isDir=1;
if($this->isDir == 1){
if(@scandir($dir."/".$file)) $extension = $this->lang["dir"];
else $extension = $this->lang["noExtension"];
$this->isDir = 0;
}
$name = (count($explode)>0 && strlen($explode[0])<=0)?$explode[1]:$explode[0];
$extension = ($name==$extension)?$this->lang["noExtension"]:$extension;
for($i=1; $i<=count($explode)-2; $i++){
$name .= $explode[$i];
}
$directory = $dir."/".$file;
$size = round((filesize($directory)/1024)/1024,2);
return array(
"name" => $name,
"fullname" => $file,
"extension" => $extension,
"size" => $size,
"dir" => $directory
);
}
}
?>
Przykład:
<?PHP
require_once("scan_class.php");
$f = "g";
if(@isset($_GET["search"])) $f = "s";
if(!isset($_GET["dir"])) die("Nie podano zmiennej \$dir");
echo "<TABLE BORDER=1 style='font-size:12px;'>
<TR>
<TD>#</TD>
<TD>NAZWA</TD>
<TD>FORMAT</TD>
<TD>WAGA</TD>
<TD>SCIEZKA</TD>
</TR>";
$scan = new SCAN;
$i=1;
$func = ($f == "g")?$scan->get($_GET["dir"]):$scan->search($_GET["dir"], $_GET["search"]);
foreach($func as $file){
echo "<TR>
<TD>{$i}</TD>
<TD>{$file["name"]}</TD>
<TD>{$file["extension"]}</TD>
<TD>{$file["size"]}MB</TD>
<TD>{$file["dir"]}</TD>
</TR>";
$i++;
}
echo "</TABLE>";
?>
// Search-file class by Ersiu.
// coded at 20 march 2010
class SCAN {
private $_FILES = array();
private $_FOUNDS = array();
private $isDir = 0;
private $lang = array(
"noExtension" => "NO-EXTENSION",
"dir" => "DIRECTORY"
);
public function get($dir){
$open = scandir($dir);
foreach($open as $file){
if($file!="." && $file!=".."){
$info = $this->getFileInfo($dir,$file);
$this->_FILES[] = $info;
if($info["extension"] == $this->lang["dir"]){
$this->get($dir."/".$file);
}
}
}
return $this->_FILES;
}
public function search($dir, $phrase){
foreach($this->get($_GET["dir"]) as $file){
$_file = strtolower($file["fullname"]);
$phrase = strtolower($phrase);
if (strrpos($_file, $phrase) !== false){
$this->_FOUNDS[] = $file;
}
}
return $this->_FOUNDS;
}
private function getFileInfo($dir,$file){
$explode = explode(".", $file);
$extension = (count($explode)>1)?end($explode):$this->isDir=1;
if($this->isDir == 1){
if(@scandir($dir."/".$file)) $extension = $this->lang["dir"];
else $extension = $this->lang["noExtension"];
$this->isDir = 0;
}
$name = (count($explode)>0 && strlen($explode[0])<=0)?$explode[1]:$explode[0];
$extension = ($name==$extension)?$this->lang["noExtension"]:$extension;
for($i=1; $i<=count($explode)-2; $i++){
$name .= $explode[$i];
}
$directory = $dir."/".$file;
$size = round((filesize($directory)/1024)/1024,2);
return array(
"name" => $name,
"fullname" => $file,
"extension" => $extension,
"size" => $size,
"dir" => $directory
);
}
}
?>
Przykład:
<?PHP
require_once("scan_class.php");
$f = "g";
if(@isset($_GET["search"])) $f = "s";
if(!isset($_GET["dir"])) die("Nie podano zmiennej \$dir");
echo "<TABLE BORDER=1 style='font-size:12px;'>
<TR>
<TD>#</TD>
<TD>NAZWA</TD>
<TD>FORMAT</TD>
<TD>WAGA</TD>
<TD>SCIEZKA</TD>
</TR>";
$scan = new SCAN;
$i=1;
$func = ($f == "g")?$scan->get($_GET["dir"]):$scan->search($_GET["dir"], $_GET["search"]);
foreach($func as $file){
echo "<TR>
<TD>{$i}</TD>
<TD>{$file["name"]}</TD>
<TD>{$file["extension"]}</TD>
<TD>{$file["size"]}MB</TD>
<TD>{$file["dir"]}</TD>
</TR>";
$i++;
}
echo "</TABLE>";
?>
Dodano przez: ersiacki Ranga: 0 Punktów: 0
Komentarze użytkowników
:: Losowe artykuły
:: Wymiana linków
Modowe inspiracje |
Android Gry i Aplikacje |
ZaplanujTransport.pl: Przeprowadzki, transport, aukcje |
Logo dla firmy |
Change Tires - Car Weather Forecast Reminder |
Laminas: MVC Framework for PHP |
IT Books Reviews and Programming: JS, JAVA, PHP, ANDROID, CSS |
Katalog roślin |
Programming articles: JAVA, PHP, C++, Python, JavaScript |
Kancelaria Adwokacka Łukasz Huszno