1. PYTANIE DO KOMENTUJĄCYCH
Dlaczego Wy tak bardzo komplikujecie tak prostą sprawę ? Trzeba mieć masochistyczne skłonności by skorzystać z którejkolwiek rady. Oczywiście to moje subiektywne zdanie.
2. PYTANIE DO AUTORA
Czy masz możliwość wprowadzania zmian na serwerze produkcyjnym ? (tam gdzie ma to wszystko działać, bo jasne że z serwerem testowym robisz co chcesz).
3. SUGESTIA
Zapoznajcie się z tematem odrobinę zanim zaczniecie dawać dziwne rady. Przez chwilę myślałem że z autora tematu się po prostu nabijacie (moja subiektywna ocena).
4. MOJA RADA - JEŻELI NIE MASZ MOŻLIWOŚCI WPROWADZANIA ZMIAN NA SERWERZE
Jeżeli chodzi o bardzo małe pliki to można wykorzystać PHP. Za pomocą header wysyłasz odpowiednie nagłówki takie jak:
Kod
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Description: File Transfer");
header("Content-Length: ".filesize($url));
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=\"".basename($url)."\"");
Następnie za pomocą fopen() otwierasz sobie plik który jest pod $url i w pętli linia po linii wypisujesz go. Tu należy pamiętać o drobiazgu. NIC przed lub PO pliku nie powinno zostać wyświetlone. Jeden durny biały znak i plik będzie błędnie zapisany u użytkownika. Z uwagi na to że będziesz korzystał z pętli a sam plik chwilę się będzie wypisywał użytkownikowi, możesz przekroczyć czas działania skryptu PHP co również zniszczy zawartość pliku (przerwany transfer + dodatkowe znaki jak treść błędu itp, kwestia ustawień serwera).
Użytkownik nie dostanie bezpośredniego linku na serwerze. Sam plik może być trzymany w dowolnym miejscu. Dodatkowo możesz w dowolny sposób decydować czy rozpocząć jego wysyłanie użytkownikowi czy nie.
5. MOJA RADA 2 - JEŻELI MOŻESZ WPROWADZAĆ ZMIANY NA SERWERZE
Metoda 1 ma jedną wadę. Nie wyślesz nią dużych plików a im gorszy transfer ma użytkownik tym większa szansa że wystąpi problem. Istnieje sposób na jego ominięcie. Trzeba sobie doinstalować rozszerzenie xSendFile do Apache. O xSendFile poczytasz w Google. Sporo piszą na jego temat. Jak nic się nie zmieniło to obecna wersja pozwala na wysyłanie plików DO 4GB. Wersja beta przekracza ten limit pozwalając na wysyłanie na prawdę dużych plików.
Co do całej reszty to już Twoja wola jak to zabezpieczysz. Obie metody są wygodne i pewne.