Zdroj: http://prochazka.clanweb.eu/index.php?a=php/hcm-modul-download-objekt-verze-3.0.1 • Vydáno: 30.3.2013 15:54 • Autor: hacesoft
HCM modul Download OBJEKT - verze 3.0.1.
Modul pro RS (redakční systém) SunLight CMS 7.5.x. na počítání staženích souborů.
HCM modulu Download ve verzi 3.0.1.
Nová verze je doplněna o dva řádky. Řádek 50 zabezpečuje, že se po každém stažení aktualizuje v databázi velikost souboru.
Dále na řádku 62 je mazání neaktuálních záznamů v databázi. Pokud se stane, že soubor z webu odstraníte, tak v databázi nadále zůstane informace o bývalém souboru.
Vše ostatní je jako u předchozí verze. Nebudu zde popisovat použiti HCM modulu, jeho instalaci a podobně.
Nedoporučuji v adresáři na webu kde jsou umístěné soubory na stáhnutí vytvářet další adresáře a tak rozdělovat jednotlivé soubory do skupin. Tento skript Download verze 3.0.1. nemá žádný problém. Ale skript který dělá výpis všech stažitelných souboru, si už neporadí s takovýmto uspořádání.
Stáhnout HCM modul: download_object301.php.
HCM kód download modulu 3.0.1.:
PHP code
<?php
// Autor www.prochazka.zde.cz
// verze souboru v3.0.1. -objekt
// dne 31.12.2012 - vytvoreni modulu
// dne 25.2.2013 - verze 3.0.0 - predelani na objekt
// dne 26.3.2013 - verze 3.0.1. - opraven skript, aktualizace velikosti souboru a mazani neaktualnich zaznamu.
if(!defined('_core')) exit;
function _HCM_hacesoft_download
($SPatchFile='', $SshowFile=''){
$download = new HCM_download
($SPatchFile,$SshowFile, _indexroot
."web/download");
$download->DataBind();
$sBuffer = $download->GetUrl();
return $sBuffer;}
class HCM_download
{
Private $nazev_tabulky="";
Private $sNazevSouboru;
Private $sFullPatchFile;
private $first = 0;
public $SPatchFile="";
public $SshowFile="";
public $sAdrScript;
public $UrlParameterName="download";
public $cesta_k_souborum;
public $sNameTable ="download";
public $cat_title_seo="list";
public $title="";
public function __construct
($SPatchFile="",$SshowFile="",$cesta_k_souborum=""){
$this->SPatchFile = $SPatchFile;
$this->SshowFile = $SshowFile;
$this->sAdrScript = $this->GetAdrScript();
$this->cesta_k_souborum = $cesta_k_souborum;
if (isset($GLOBALS['query']['cat_title_seo'])){$this->cat_title_seo = $GLOBALS['query']['cat_title_seo'];}
$this->title = $GLOBALS['query']['title'];
$this->nazev_tabulky = _mysql_prefix
."-".$this->sNameTable."-hac";}
public function GetUrl
(){
if (!isset($_GET[$this->UrlParameterName])){
return "<a href='".$this->sAdrScript.'&'.$this->UrlParameterName.'='.$this->SPatchFile."' >".$this->SshowFile."</a>";}}
public function DataBind
(){
if (isset($_GET[$this->UrlParameterName])){
$this->sNazevSouboru = $_GET[$this->UrlParameterName];
$this->sFullPatchFile = $this->cesta_k_souborum."/".$this->sNazevSouboru;
unset ($_GET[$this->UrlParameterName]);
if (file_exists($this->sFullPatchFile)){
$sDatumNew = date ("j.n.Y H:i:s");
$query = DB
::query_row('SELECT * FROM `'.$this->nazev_tabulky.'` WHERE `soubor`="'.$this->sNazevSouboru.'"');
$sSize = $this->nFormatFileSize(FileSize($this->sFullPatchFile));
if (is_bool($query) === false){
$pocet_stazeni = $query['stazeni'] + 1;
$query = DB
::query('UPDATE `'.$this->nazev_tabulky.'` SET `stazeni` ="'.$pocet_stazeni.'",
`velikost` ="'.$sSize.'",`naposledy_stazen` ="'.$sDatumNew.'" WHERE `soubor` ="'.$this->sNazevSouboru.'"');}
else{ //Soubor existuje ale doposud neni veden v databazi, tak ho do databaze zapisem
$sDatumfile = date ("j.n.Y H:i:s", filemtime($this->sFullPatchFile));
$query = DB
::query("INSERT INTO `".$this->nazev_tabulky."` (soubor,rubrika,velikost,datum,verze,popis,stazeni,naposledy_stazen,hodnoceni,pocet_hodnotitelu)
VALUES ('$this->sNazevSouboru', '$this->cat_title_seo', '$sSize', '$sDatumfile', '', '$this->title', 1, '$sDatumNew','0','0')");
}
$sBuffer= substr ($this->sFullPatchFile,-4);//(délka není zadána, pozice prvního znaku je záporná, proto se počítá od konce)
if ($sBuffer != ".php"){header("location: $this->sFullPatchFile");} //Posly soubor -posly jakykoliv jen ne s priponou php, ochrana aby utocnik si neposlal nejaky script
}else{$query = DB
::query('DELETE FROM `'.$this->nazev_tabulky.'` WHERE `soubor` ="'.$this->sNazevSouboru.'"');}//soubor uz neexistuje, smazat v databazi zaznam
}}
private function nFormatFileSize
($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];}
private function GetAdrScript
(){
$hrefprefix = $_SERVER['SCRIPT_NAME'];
$this->first=1;
foreach ( $_GET as $key=>$value){
if ($key == $this->UrlParameterName)
continue;
if ($this->first){
$hrefprefix .= "?".$key."=".$value;
$this->first = 0;}
else
$hrefprefix .= "&".$key."=".$value;}
return $hrefprefix;}}
?>