Witam. Mam taki problem. Chciałbym żeby np plik archiwum.zip mógł być pobrany tylko raz przez jedną, osobę. Żeby po pobraniu tego pliku, zmieniła się nazwa katalogu w którym jest, np. z 1234567 na 1342567. Chodzi mi o to, żeby nikt nie mógł podać na jakimś forum linku do pliku. Chce, zrobić coś podobnego jak jest na rapidshare.com.
Załóżmy, podaję pewnej osobie plik do pliku archiwum.zip, np. 1234567/archiwym.zip. Osoba wchodzi, i pobiera. Aby ta osoba nie mogła podać komuś poprawnego linku, skrypt zminia nazwę katalogu, np. na 13243546. Lecz, chciałbym też, aby ta osoba która pobiera, mogła dalej pobierać, gdyby się rozłączyła przed skończeniem pbierania, zeby bez kłopotu mogła dokończyć pobieranie. Czy ktoś wie, jak to można zrobic? Mam dostęp do shella, więc z komendami linuksowymi i skryptami nie będzie problemu.
tsharek
27.09.2007, 14:36:34
a po co chcesz zmieniać katalog? wystarczy że autoryzację zrobisz w tym samym pliku którym wysyłasz plik. Więcej o tym znajdziesz m.in. w
tym wątku. Tam masz opis do obrazków, ale tutaj będziesz mieć prościej, bo zawsze content-type będzie force-download.
Hmmm. Czyli robię tak:
1. tworzę jakiś katalog download/ w którym będzie index.php
2. Pliki trzymam w pliki123456hrhrt/
3. Jeżeli chcę, poda komuś link to daję www.adres/download/index.php?nazwa_pliku.zip
4. Co tu się dzieje? Czy wyświetla się strona, prosząca o hasło? Jeżeli hasło będzie poprawne, to co wtedy?
tsharek
28.09.2007, 19:33:59
Tak, wtedy strona się wyświetla o podanie hasła -> jak autoryzacja jest OK to wtedy ustawiana jest jakaś sesja -> jeżeli jest ustawiona sesja to dalszej części pliku robisz mechanizm wysyłający plik, np korzystając ot z takiej funkcji:
<?php
function download_file($file)
{
if(isset($_SERVER['HTTP_RANGE']) && preg_match('/bytes=([0-9]+)-([0-9]*)/', $_SERVER['HTTP_RANGE'], $bytes)) {
$start=(float)$bytes[1];
$stop=(float)$bytes[2];
if($stop<$start || $stop>=$rozmiar) $stop=$rozmiar-1;
$dlg=$stop-$start+1;
}
{
header('Accept-Ranges: bytes'); header('Content-Length: '.$rozmiar); }
else
{
header('HTTP/1.1 206 Partial Content'); header('Accept-Ranges: bytes'); header('Content-Length: '.$dlg); header('Content-Range: bytes '.$start.'-'.$stop.'/'.$rozmiar); }
header('Content-Type: application/force-download'); else header('Content-Disposition: attachment; filename="'.$filename.'"'); header('Content-Transfer-Encoding: binary');
{
}
}
?>
aha, myślę, że sobie poradzę, dzięki
Tylko jedna sprawa, nie wyobrażam sobie kod z sesjami...