Webmaster общности: Predpriemach.com | SearchEngines.bg

    Търсачка на файлове

    Ето урок как можете да си направите търсачка на файлове.
    Почти всеки ред съм го обяснил, но ако все още имате въпроси – питайте 😉
    А ето и кода Veryhappy :

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Search script by S_Soul</title>
    <style type="text/css">
    body{
    
    }
    a:link {
    color: #0078cc;
    text-decoration: none;
    }
    a:visited {
    text-decoration: none;
    color: #0078cc;
    }
    a:hover {
    text-decoration: none;
    color: #eb7c02;
    }
    
    a:active {
    text-decoration: none;
    color: #0072cc;
    }
    .button {
    border-color:#DBDBDB;
    background: #F2F2F2;
    color:#666699;
    font:11px Verdana,Arial,Helvetica,sans-serif;
    border-width: 1px 1px 1px 1px;
    border-style:solid;
    padding:2px;
    margin:0px;
    height:20px
    }
    .field {
    border-color:#DBDBDB;
    background: #F2F2F2;
    color:#666699;
    font:11px Verdana,Arial,Helvetica,sans-serif;
    border-width: 1px 1px 1px 1px;
    border-style:solid;
    height:20px;
    padding:3px;
    font-weight: bold;
    margin:0px;
    }
    img{
    border:0px;
    }
    .pages {
    padding:1px;
    background-color: #F2F2F2;
    }
    </style>
    </head>
    
    <body>
    <table>
    <tr><td>
    <form action="./search.php" method="get">
    <b>Търсене:</b> <input type="text" name="s" class="field" size="65" value="<?php
    $s = htmlspecialchars($_GET['s'], ENT_QUOTES); ///// http://bg2.php.net/manual/en/function.htmlspecialchars.php
    echo $s; ?>">
    <input type="submit" value="Търси" class="button">
    </form>
    <?php
    if ($s !=null ){
    echo "</td></tr>";
    }
    ?>
    
    
    
    
    <?php
    $sort = htmlspecialchars($_GET['sort'], ENT_QUOTES); ///// http://bg2.php.net/manual/en/function.htmlspecialchars.php
    
    
    function size($path){ /////функция, за превръщане на байтове в по-големи единици
    $size = filesize($path);
    if($size >= 1073741824)
    {
    $size = round($size / 1073741824 * 100) / 100;
    $size=substr($size,0 , 4);
    $size = $size . " GB";
    }
    elseif($size >= 1048576)
    {
    $size = round($size / 1048576 * 100) / 100;
    $size=substr($size,0 , 4);
    $size = $size . " MB";
    }
    elseif($size >= 1024)
    {
    $size = round($size / 1024 * 100) / 100;
    $size=substr($size,0 , 4);
    $size = $size . " KB";
    }
    else
    {
    $size=substr($size,0 , 4);
    $size = $size . " B";
    }
    echo $size;
    }
    
    
    function show($dir){ /////с тази функция обхождаме директорията и директориите в нея
    global $i; ///// правим $i глобална, за да важи нейната стойност и извън фукцията
    global $file; ///// правим $file глобална, за да важи нейната стойност и извън фукцията
    $s = htmlspecialchars($_GET['s'], ENT_QUOTES); ///// http://bg2.php.net/manual/en/function.htmlspecialchars.php
    $directory = opendir($dir); ///// отваряме зададената папка
    while ($files = readdir($directory)) ///// изкарваме файловете от директорията
    {
    if (($files != "..") AND ($files != ".")){ ///// ако файла е .. или . (т.е. предишната директория) го пропускаме
    $path = $dir.'/'.$files; ///// определяме пълния път до файла
    if (!is_dir($path)){ ///// ако файла не е директоктория продължаваме нататък
    if (eregi($s, $files)) { ///// ако във файла се съдържа ключовата дума която търсим продължаваме нататък
    $i++; ///// покачваме стойността на $i с 1
    $file[]=array ( ////// http://bg2.php.net/manual/en/function.array.php
    "name" => $files, ///// придаваме стойност на name => $files -> името на файла
    "dir" => $dir, ///// придаваме стойност на dir => $dir -> директорията на файла
    "path" => $path ///// придаваме стойност на path => $path -> линка към файла
    );
    
    }
    }
    if(is_dir($path)) { ////// ако файла е директория продължаваме нанатък и отново следва функцията която преглежда папката
    show($path); ///// функцията за преглеждане на папката. Докато има папки, те ще се отварят и преглеждат за файлове съдържащи търсените от нас ключови думи
    }
    }
    }
    }
    
    
    if ($s != null){ ///// ако заявката за търсене не е празна
    show ("."); ///// задаваме от коя папка да започне търсенето на файлове
    $num = count($file); ///// брой $file
    if ($num != null){ ////// ако $num няма стойност, показва че няма намерени файлове
    $found="Намерени файлове: ".$i;
    } else { ///// ако $num има стойност, показва колко са намерените файлове
    $found="Няма намерени файлове";
    }
    echo "
    <tr>
    <td>
    
    <table width=\"100%\" align=\"left\" style=\"font-size:12px;font-family: Tahoma;\">
    <tr>
    <td style=\"border:1px solid #DBDBDB;\" colspan=\"3\">
    <div style=\"padding:1px; background-color: #F2F2F2; white-space:nowrap\">Резултати за: ".$s."</div>
    </td>
    </tr>
    <tr>
    <td style=\"border:1px solid #DBDBDB;\" colspan=\"3\">
    <div style=\"padding:1px; background-color: #F2F2F2; white-space:nowrap\">".$found."</div>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    <tr>
    <td>
    <table width=\"580px\" align=\"left\" style=\"font-size:12px;font-family: Tahoma;\">
    <tr>
    <td style=\"border:1px solid #DBDBDB;\" width=\"20px\" align=\"center\">
    <div style=\"padding:1px; background-color: #F2F2F2; white-space:nowrap;height:15px;\">
    </div>
    </td>
    <td style=\"border:1px solid #DBDBDB;\" width=\"510px\" align=\"left\" colspan=\"2\">
    <div style=\"padding:1px; background-color: #F2F2F2; white-space:nowrap;height:15px;\">
    <a href=\"?s=".$s."";
    if ($page != null){ ///// ако $page има стойност, т.е. избрана е страница
    echo "&page=".$page."";
    }
    echo "&sort=name\">Сортирай по име</a>";
    if ($sort == "name"){ ///// ако вече е избрано да се сортират файловете по име се показва опция за премахване на сортирането
    echo " <a href=\"?s=".$s;
    if ($page != null){ ///// ако $page има стойност, т.е. избрана е страница
    echo "&page=".$page;
    }
    echo "\"><b>[X]</b></a>";
    }
    echo "</div>
    
    </td></tr>";
    if ($num > "30"){ ///// ако намерените файлове са повече от 30
    $page_num=ceil($num/30); ///// определяне броя на страниците. ceil() - закръгля към по-голямото число
    if ($page != null){ ///// ако $page има стойност, т.е. избрана е страница
    $num_for=30*$page; ////// определя се до кой файл да се изреждат останалите
    $i_value=$num_for-30; ///// определя се от кой файл да започнат се изреждат останалите. т.е. от $i_value до $num_for
    $rows = $num_for - $num; ///// редовете за изреждане (<tr>). Попринцип те са 30, но на последната страница се получават празни редове. За това е нужна тази променлива
    if ($page == $page_num){ ///// ако избраната страница е равна на броя на страници, т.е. ако е последна
    $num_for=$num_for-$rows; ///// броя на редовете, които ще се изреждат на последната страница, за да не останат празни редове
    }
    } else { ///// ако не е избрана страница се показват първите 30 файла
    $i_value="0";
    $num_for="30";
    }
    } else { ///// ако файловете са по-малко от 30 се показват всичките
    $i_value="0";
    $num_for=$num;
    }
    
    
    
    
    for ($i=$i_value;$i<$num_for;$i++){ ///// for loop
    if (strlen($file[name])>"75"){ ///// ако дължината на името е по-дълга от 75 символа
    $totchki='...';
    } else { ///// ако е по-малка от 75 символа
    $totchki='';
    }
    $file[$i][name]=substr($file[$i][name],0 , "75"); ///// махат се всички символи след 75тия
    if ($sort == "name"){ ///// ако е избрано да се сортират файловете по име
    sort($file); ///// http://bg2.php.net/manual/en/function.sort.php
    }
    //////////////// ИЗРЕЖДАНЕ НА ФАЙЛОВЕТЕ В ОТДЕЛНИ РЕДОВЕ - START ////////////////
    echo "<tr>
    <td style=\"border:1px solid #DBDBDB;\" width=\"20px\" align=\"center\">
    <div style=\"padding:1px; background-color: #F2F2F2; white-space:nowrap;height:15px;\">
    <a href=\"".$file[$i][dir]."\" onClick=\"this.target='_blank'\">
    <img src=\"folder.png\" height=\"15px\" width=\"15px\"></a>
    </div>
    </td>
    <td style=\"border:1px solid #DBDBDB;\" width=\"510px\" align=\"left\">
    <div style=\"padding:1px; background-color: #F2F2F2; white-space:nowrap;height:15px;\" onmouseover=\"this.style.backgroundColor='#F9F9F9'\" onmouseout=\"this.style.backgroundColor='#F2F2F2'\">
    <a href=\"".$file[$i][path]."\">".$file[$i][name].$totchki."</a>
    </div>
    </td>
    <td style=\"border:1px solid #DBDBDB;\" width=\"50px\" align=\"center\">
    <div style=\"padding:1px; background-color: #F2F2F2; white-space:nowrap; color: #0078cc;height:15px;\">";
    size($file[$i][path]);
    echo "</div></td></tr>"."\n";
    //////////////// ИЗРЕЖДАНЕ НА ФАЙЛОВЕТЕ В ОТДЕЛНИ РЕДОВЕ - END ////////////////
    }
    if ($num > "30"){ ///// ако броя на файловете е почю-голям от 30
    $page_num=ceil($num/30); ///// определя се броя на страниците
    //////////////// ИЗРЕЖДАНЕ НА ЛИНКОВЕ КЪМ РАЗЛИЧНИТЕ СТРАНИЦИ - START ////////////////
    echo "<tr><td colspan=\"3\" style=\"border:1px solid #DBDBDB;white-space:nowrap;font-size:13px;font-family: Tahoma;\">";
    
    for($a=1;$a<=$page_num;$a++){ ///// for loop
    if ($a==$page){ ///// ако в момента разглеждате дадената страница, тя не излиза като линк
    echo " <b>".$a."</b> |";
    } else { ///// изреждат се линковете към различните страници
    echo " <a href=\"?s=".$s."&page=".$a;
    if ($sort == "name"){
    echo "&sort=name";
    }
    echo "\">".$a."</a> |";
    }
    }
    echo "</td></tr>";
    }
    //////////////// ИЗРЕЖДАНЕ НА ЛИНКОВЕ КЪМ РАЗЛИЧНИТЕ СТРАНИЦИ - END ////////////////
    echo "</table>";
    
    }
    
    ?>
    </td></tr></table>
    
    </body>
    
    </html>

    Оставете коментар