Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Download z ukryciem orginalnej lokalizacji pliku.
Forum PHP.pl > Forum > Przedszkole
marek44
Witam.
Mam pytanie jak zrobić download żeby orginalny adres pliku pozostał ukryty, a pobieranie odbywało się za pomocą jednorazowego linku, np. użytkownik zrobił co trzeba i dostaje adres do pliku download.php z odpowiednimi parametrami w tablicy get: download.php?id=05&linkid=WJDMATJ856984 gdzie id=05 to id pliku do pobrania którego orginalny adres jest zapisany w bazie, a linkid to jednorazowy identyfikator.

Jak komuś się nie chce pisać kodu to niech chociaż napisze jak to się robi i czego mam szukać.
Dzięki z góry.
nospor
http://pl2.php.net/manual/pl/function.header.php
Przykład #1
Maveral
Zaciekawileś mnie tym, więc sam sobie szybko sprawdziłem pierwsze co mi przyszło do głowy, a więc pokombinowanie z header(Location). Wyciągam z bazy ścieżkę pliku o id=ileś_tam, a następnie wrzucam tę ścieżkę do zmiennej i pakuję zmienną do header(Location). Użytkownik nie widzi adresu pliku i wszystko gra winksmiley.jpg
erix
Zobaczy. Może w Twojej przeglądarce nie widać, ale zobaczy: Nie o to chodziło - attachment.
cojack
Najlepiej jest ładować pliki do bazy. wtedy nie masz takiego problemu.
erix
To najgorsze z możliwych wyjść...

W bazie trzyma się adresy do plików, a nie je same...
cojack
Jak kto lubi, ja sobie trzymam pliki w bazie winksmiley.jpg
Magan
Też miałem problem taki problem z downloadem. Ale napisałem skrypt, podzielę się z nim. smile.gif

No więc działa na dwóch plikach i folderze z plikami - ot, żeby nie było bałaganu na serwerze. winksmiley.jpg Pliki te są małe, oczywiście można je rozbudować, dodać jakieś zabezpieczenia, opcję pobierania id z bazy itd.. Ja potrzebowałem zwykły download.

Pierwszy plik znajduje się w głównym folderze serwera:
(http://www.example.com/download.php)
  1. <?
  2. if(isset($_GET['downit'])) {
  3. $downit=$_GET['downit'];
  4. Header ('Location: download/downit.php?downit='.$downit);
  5. } else {
  6. echo ('Nie znaleziono pliku!');
  7. }
  8. ?>


Drugi plik znajduje się w folderze z plikami, na przykład w folderze download którego nazwę użyłem w pierwszym pliku.
(http://www.example.com/download/downit.php)
  1. <?
  2. $downit=$_GET['downit'];
  3. Header ('Content-Disposition: attachment; filename="'.$downit.'.zip"');
  4. ?>


Jak to działa i o co wogóle chodzi? Już tłumaczę. Na jakiejś podstronie serwisu która znajduje się w głównym folderze (to ważne gdzie!) dajemy link do pliku o nazwie muzyka.zip: http://www.example.com/download.php?downit=muzyka . Gdy kliknie się na ten link serwer przechodzi do strony http://www.example.com/download/downit.php?downit=muzyka - przenosi za pomocą GET id pliku (nazwę) do pliku downit.php, który wysyła info do przeglądarki że coś trzeba pobrać.

Czemu tak to skomplikowałem? Nie wiedzieć czemu serwer na którym znajduje się moja strona gdy wpisywałem zamiast ('Content-Disposition: attachment; filename="'.$downit.'.zip"') w downit.php w folderze download, od razu ścieżkę w download.php w głównym folderze, czyli ('Content-Disposition: attachment; filename="download/'.$downit.'.zip"') zamiast pliku pobierała sie strona o tej nazwie z rozszerzeniem *.zip.html sad.gif

Poza tym ten skrypt mam usterkę chyba nie do naprawienia. Sprawdzałem go na 3 przeglądarkach (opera, firefox i IE). W IE gdy ściągałem wbudowanym menadżerem ściągało się bez problemów, gdy ściągałem wbudowanym w firefoxie ściągało się też bez problemów. Problemy się zaczęły gdy pobierałem dodatkiem do firefoxa - akceleratorem pobierania. Ściągało tak jak przy skrypcie który próbowałem na początku, ściągał się plik html, z operą było to samo.

Mam nadzieję że chodź trochę pomogłem. Może ktoś mógłby coś tu zmienić, ciekaw jestem czy da się to naprawić lub uprościć. winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.