Diskuse

Téma: Stažení souboru

Jak docílit toho aby byl soubor možný stáhnout jen po přihlášení do systému a to i když bude cesta k soboru známa to nebylo možné stáhnout a pouze jen přihlášeným uživatelům...?
postZaslat odpověď
zkus
http://motov.net/php/php-hiding-a-files-real-path-when-downloading-prevent-hotlinking
http://stackoverflow.com/questions/11278715/how-to-download-zip-file-without-downloading-entire-directory-path-too-php
Dávat adresy ve stylu download?id=x a ve scriptu:

if(_loginidicator){

// sem dát header ke stažení souboru

}else {

return "nemáš oprávnění";

}
Moc tomu nerozumím trochu polopaticky děkuji.
Vic polopaticky to ani snad nejde. Mas proste adresu /download?file=soubor.zip a mas slozku se soubory ke stazeni a v te podmince je rozhodnuti o tom zda je uzivatel prihlasen ci nikoliv. A pokud je tak overis zda ten soubor existuje v te slozce a das tam hlavicky (header) pro vynucene stahovani. pokud by nekdo stahoval soubor bez prihlaseni tak ho nestahne. tot vse a to by jsi vycetl z tech odkazu co jsem poslal
Vytvoříš so v rootu webu soubor download.php s bosahem:<?php

/*---- inicializace jadra ----*/
define('_indexroot', './');
require(_indexroot."core.php");

if(_loginidicator){
$name = $_GET['file'];
$file = 'uploads/' . $name;
if (file_exists($file)) {
header("Content-Description: File Transfer");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$name\"");
readfile($file);
}
else{
_systemMessage("Chyba", 'Soubor neexistuje');
}
}
else{
_systemMessage("Chyba", $_lang['notpublic.title']);
}

?>
a odkazy budeš dávat tak jak psal jirka /download?file=soubor.zip
Já osobně tedy ještě používám base64_encode a decode, ale tím tě nebudu zatěžovat.
je to nastrel, necekej ze to jen zkopcis a vlozis
- core.php neni v rootu
- vypis zprav je pres _formMessage tusim
Ano jirka má prvdu, takhle to bylo pro starší verzi. v nové je třeba použít inicializaci takto:require './require/load.php';
require './require/functions-template.php';
SL::init('./');
Zprávu může použít buď _formMessage() jak píšeš a nebo přes _systemMessage() s tím že systém message se volá ještě před jakýmkoliv výstupem. a nedá se přehlédnout. Je fakt, že kvůli neexistujícímu souboru není potřeba zastavit celou aplikaci, takže možná opravdu použít _formMessage()
Jen takový postřeh - přes ten skript si může kdokoliv stáhnout cokoliv z daného webového prostoru, včetné PHP skriptů, protože $file není absolutně nijak ošetřené.

/download.php?file=../config.php a dík za přístupové údaje 🙂
Proto jsem psal to ID, kdy jsou záznamy uložené v db.
Také si před stažením můžeš logovat počty stažení. Napiš mi, něco takového jsem už psal, poslal bych ti to.
Ano Shiro, vím o tom. Tohle byl jen nástřel jak by to mohlo fungovat a i proto jsem psal, že je možné to alesoň trochu komplikovat přes base64.
Cpát soubory do DB mi přijde zbytečné, protože jestli mám v tom skriptu psát kontrolu na adresář a nebo na to jestli ID je v DB vyjde nastejno.
A ať teda nežeru, tak tento řádek:$name = $_GET['file'];stačí upravit:$name = pathinfo($_GET['file'],PATHINFO_BASENAME);