Ja sa pokúsim poradiť trochu komplexnejšie, lebo chalani hore to síce nemysleli zle, ale zdá sa mi, že by si ich nemusel úplne pochopiť.
Pri robení takéhoto systému musíš mať niekoľko častí - uloženie súborov, schému prístupov a potom nejaké to rozhranie na interakciu s užívateľom.
Uloženie súborov - predpokladám, že máš Linuxový server Apache. Tam toto uloženie spravíš veľmi jednoducho - buď budeš súbory ukladať do priečinka, ktorý je mimo webového priečinka (tj. web máš napr. v priečinku /home/scrysurn/public_html a tie súbory budeš ukladať do /home/scrysurn/subory ) alebo môžeš ukladať do webového podpriečinka, ale musíš ho ochrániť súborom .htaccess (tj. napr. súbory budeš ukladať do /home/scrysurn/public_html/subory a v tom priečinku bude súbor .htaccess v ktorom bude napísané
Kód:
deny from all
). Oba prístupy zabezpečia, že aj keby niekto vedel presný názov súboru na servri a napísal do prehliadača cestu k nemu, Apache mu ten súbor na stiahnutie nedá (to ti umožní napr. aj obmedziť počet stiahnutí súboru).
Schéma prístupov a rozhranie - to nechám na tebe; asi najlepšie sa to dá spraviť tak, že keď uploadneš súbor, tak na server sa uloží pod iným názvom (nejakým náhodne vygenerovaným, aby si sa vyhol problému s rovnakými názvami) a napr. do databázy sa zapíše aký bol pôvodný názov súboru a aký je názov uloženého súboru. Keď dostaneš požiadavku na nejaký súbor tak sa nejakou logikou rozhodneš, či ten užívateľ môže dostať želaný súbor (napr. cez
ACL alebo nejakú inú autorizačnú schému) a ak áno, tak skriptom podobným tomuto vytiahneš súbor a pošleš ho užívateľovi:
Kód:
<?php
$user = $_SESSION['user'];
$file = osetri_vstup($_GET['file']);
$filename = zisti_nazov_suboru_na_servri($file);
if (!uzivatel_je_autorizovany($user, $file)) {
die("Nemas pravo na pristup k tomuto suboru.");
}
if (file_exists($filename)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$file);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($filename));
ob_clean();
flush();
readfile($filename);
exit;
}
?>
Ešte sa to dá vylepšiť tak, že podľa typu súboru správne nastavíš hlavičku Content-Type (tá čo tam je teraz možno nebude správne fungovať napr. pri textových súboroch, treba vyskúšať).
_________________
A. S. Tanenbaum píše:
The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice.