Zdroj: http://prochazka.clanweb.eu/index.php?a=php/hcm-modul-download  •  Vydáno: 2.2.2013 18:55  •  Autor: hacesoft

HCM modul Download

icons pic Modul pro RS (redakční systém) SunLight CMS 7.5.x. na počítání staženích souborů.

Instalace je velice jednoduchá. Stažený soubor uložíte na Váš web do adresáře: \plugins\hcm. Tam vytvoříte adresář hacesoft a do něho uložíte soubor download.php a function.php.
Nakopírovat na web adresář Install_download a v prohlížeči spustit v tomto adresáři skript. Nesledně postupovat dle instrukcí. Upozornění heslo je stejné, jaké používá RS pro přihlášení do databáze. Po instalaci databáze, důrazně upozorňuji, smažte tento adresář z ostrého webu!

Počítací HCM modul se použije v RS následovně:

PHP code
[ hcm ]hacesoft/download,"code.php.zip","code.php"[ /hcm ]

První parametr určuje co stáhnout, popřípadě i část cesty k souboru.
Druhy parametr je proste zobrazované jméno, které uvidíte na webu.

Skript obsahuje konstanty, které lze měnit:

PHP code
define("cesta_k_souborum", "web/download"); <- toto je důležitý parametr, který ukazuje, kde se nacházejí požadované soubory.

PHP code
define("download", "download");  <- název tabulky v databázi, pro přehlednost nedoporučuji měnit. Pokud změníte její hodnotu, musíte provést změnu v samotné databázi na serveru a nebo při instalaci databázi ve skriptu index.php v adresáři install_download u konstanty define("nazev_tabulky", "download");

Tento skript je pouze jen počitadlo stažených souborů, neobsahuje administraci a souhrny výpis souboru. Tyto funkce budou dostupné časem v dalším samostatným HCM modulu. Když je žádost o stažení souboru poprvé, automaticky se vytvoří v databázi odpovídající záznam z dostupných informaci.

Upozornění: pokud na webu nastane chyba, která je hlášena na začátku stránky, typicky E_NOTICE, tak skript nadále počítá stažené soubory ale soubor nejde stáhnout. Soubor je poslán formou HEADER.

Stáhnout HCM modul: download.php.

HCM kód download modulu:

PHP code
<?php
// Autor www.prochazka.zde.cz
// verze souboru  v2.0.0.
// dne 31.12.2012 - vytvoreni modulu
if(!defined('_core')) exit;

define("cesta_k_souborum", "web/download");
define("download", "download");
require _indexroot."plugins/hcm/hacesoft/function.php";  
function _HCM_hacesoft_download($SPatchFile='', $SshowFile='')
{
    $mresult ="";  
    if (isset($_GET['d7'])){//   stazeni souboru
        $k = 0;
        $pBuffer = explode("߀", Dekodovani_Dat($_GET['d7']));
        if (isset($pBuffer[0])) {
            $k = $k + 1;
        }
        if (isset($pBuffer[1])) {
               $sCrc = $pBuffer[1];
               $k = $k + 1;
        }
        if ($k == 2) {
            if ($sCrc == CrcOrign()) {
                DownloadFile ($pBuffer[0]);
            }
        }
    }
    $sBuffer ="";
    $CestakPrevHacFunkci =GetAdr()."&d7=";
    if ($SPatchFile != ''){  //vytvor odkaz na pocitadlo
        $sBuffer = Kodovani_Dat($SPatchFile. '߀' . CrcOrign());
        $mresult .= "<a href='".$CestakPrevHacFunkci.$sBuffer."' >".$SshowFile."</a>";  
    }
    return $mresult;
}

function DownloadFile ($sNazevSouboru){
    $sFullPatchFile = _indexroot.cesta_k_souborum."/".$sNazevSouboru;
    if (file_exists("$sFullPatchFile")) {
        $sDatumNew = date ("j.n.Y H:i:s");  
        $nazev_tabulky = _mysql_prefix."-".download."-hac";
        $query = DB::query_row('SELECT * FROM `'.$nazev_tabulky.'` WHERE `soubor`="'.$sNazevSouboru.'"');    
        if (is_bool($query) === false){
                $pocet_stazeni =  $query[stazeni] + 1;
                $query = DB::query('UPDATE `'.$nazev_tabulky.'` SET `stazeni` ="'.$pocet_stazeni.'", `naposledy_stazen` ="'.$sDatumNew.'" WHERE `soubor` ="'.$sNazevSouboru.'"');  
        }
        else{ //Soubor existuje ale doposud neni veden v databazi, tak ho do databaze zapisem                       }
           $sDatumfile = date ("j.n.Y H:i:s", filemtime("$sFullPatchFile"));
           $sSize = formatfilesize(FileSize("$sFullPatchFile"));  
           $cat_title_seo = $GLOBALS['query']['cat_title_seo'];
           $title = $GLOBALS['query']['title'];    
           $query = DB::query("INSERT INTO `".$nazev_tabulky."` (soubor,rubrika,velikost,datum,verze,popis,stazeni,naposledy_stazen,hodnoceni,pocet_hodnotitelu) VALUES ('$sNazevSouboru', '$cat_title_seo', '$sSize', '$sDatumfile', '', '$title', 1, '$sDatumNew','0','0')");    
        }
        $_GET['d7'] = "";
        header("location: $sFullPatchFile"); //Posly soubor
    }
}
?>

Soubor function.php obsahuje různé funkce, které volají HCM moduly uveřejněné na tomto webu.
HCM kód function modulu:

PHP code
<?php
define("crc", "hac59fh5986v57xf8er451amhac");  
function Kodovani_Dat ($sVstup) {
   $sBuffer= md5($sVstup);
   unset ($_SESSION[$sBuffer]);
   $_SESSION[$sBuffer] = $sVstup;
   return base64_encode($sBuffer);
}
function Dekodovani_Dat ($sVstup) {
    $sBuffer= base64_decode($sVstup);
    if(isset($_SESSION[$sBuffer])){
        $sVystup = $_SESSION[$sBuffer];
        return $sVystup;
    }
    else return 0;
}
function CrcOrign($Crc = crc){
return $Crc;
}
function formatfilesize($a) {
    $unim = array("B", "KB", "MB", "GB", "TB", "PB");
    $c = 0;
    while ($a >= 1024) {
        $c++;
        $a = $a / 1024;
    }
    return number_format($a, ($c ? 2 : 0), ",", ".") . " " . $unim[$c];
}
function GetAdr ($funkce="all",$sUpdate="no"){
    switch ($funkce){
        case "all";
            return  $_SERVER['PHP_SELF'] . (!empty($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : '');
        break;
       
        case "1";
            if (isset($_SERVER['QUERY_STRING'])){
                $urlBuffer = $pBuffer = explode("&", $_SERVER['QUERY_STRING']);
                if (isset($_REQUEST[Nazev_strankovani])){
                    $urlBuffer[0] = $urlBuffer[0]."&".Nazev_strankovani."=".$_REQUEST[Nazev_strankovani];
                }  
                if($sUpdate=="update") {
                    $_SERVER['QUERY_STRING'] = $urlBuffer[0];
                    $_SERVER['REDIRECT_QUERY_STRING'] = $urlBuffer[0];
                    $_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'] .'?'. $urlBuffer[0];
                    return $_SERVER['REQUEST_URI'];      
                }
                else {
                    return  $_SERVER['PHP_SELF'] .'?'. $urlBuffer[0];
                }    
            }
        break;    
    }
}
?>