Ukrywanie oryginalnej ścieżki pliku do ściągnięcia

Witam!

szukam (najlepiej w PHP) skryptu który “ukryje” ścieżkę bezpośrednią do pliku w dziale download, po prostu nie chcę by ktoś mi “podkradł” link i “cieszył się moim transferem”. Najlepiej aby link był generowany iż wejście na tą stronę jeszcze raz wygeneruje nowy "wirtualny link"do pliku.

Za jakieś propozycje serdecznie dziękuję!

Możesz zorganizować to w ten sposób. Sam go używam. Sczytujesz żądany plik do zmiennej, wysyłasz nagłówki do przeglądarki:

  1. typ;

  2. długość (rozmiar pliku);

  3. żadanie wyświetlenia okienka zapisu + nazwa pliku;

    header(‘Content-Type: application/octet-stream’);

    header(‘Content-Length: rozmiar_w_bajtach’);

    header(‘Content-Disposition: attachment; filename=nazwa_pliku’);

i na koniec echo() z zawartością zmiennej

sęk w tym że heaer musi zostać zapisany na początku strony…, a co za tym idzie dalszy jej fragment nie jest ładowany…, co prawda działa to świetnie ale mam tam także kod odpowiadający za zliczanie pobrań pliku etc.

Złączono Posta : 14.07.2007 (Sob) 22:27

pozostaje coś takiego…, no ale tutaj w kodzie strony będzie link do pliku

print("\n");

chyba że użyć jakiegoś kodowania

Złączono Posta : 14.07.2007 (Sob) 22:30

a dało by się jakoś by po header była generowana strona dalej?

Bzdury opowiadasz. Po header jak najbardziej kod jest dalej wykonywany. Popatrz: gdyby nie był, to po pierwszym headerze wykonywanie by się zatrzymało, czyli drugi, trzeci header i echo by nie wykonały się, w wykonują. Także dalszy kod, nie ważne czy to licznik czy cokolwiek innego jak najbardziej się wykona. Nawet header(‘Location’) nie powoduje zatrzymania wykonywania się kodu.

kutar

hmm, czyli coś źle zrobiłem, dzięki

Złączono Posta : 15.07.2007 (Nie) 18:31

hmm, kod nie jest dalej wykonywany, jeżeli np. odwołuje się do takiego pliku:

<?php

header('Content-type: application/zip');

header('Content-Disposition: attachment; filename="downloaded.zip"');


readfile('http://serwer.com/archiwa/arj.zip'); 


echo 'ble ble';


?>

w takim wypadku zostanie wyświetlone okienko do ściągania pliku lecz napis echo nie zostanie wyświetlony…, dalsza akcja po readfile nie działa…,

co robię źle?

Złączono Posta : 15.07.2007 (Nie) 22:23

jednak po kilku próbach udało mi się, w każdym bądź razie dzięki za podpowiedź 8)

header nie musi być na początku Przed i po header mogą być wykonywane operacje, z wyjątkiem wysyłaniem danych przed headerem do przeglądarki np. w postaci echo().

Przepraszam, nie zauważyłem że odpowiedziałeś, w każdym bądź razie nawet jak rozwiązałeś problem postaram się odpowiedzieć dlaczego nie chodziło:

Otóż readfile() od razu wypisuje zawartośc pliku, nie można jej przypisać do zmiennej (nie daje return tylko echo). Jeśli chodzi o download to tu powinieneś zakończyć wysyłanie do przeglądarki czegokolwiek. Dlaczego? A no dlatego, że wysłałeś plik, potem żadnej treści już nie możesz wysłać bo poinformowałeś przeglądarkę, że będziesz wysyłał plik, więc nawet jak zrobisz echo (tak jak zrobiłeś) przeglądarka uzna to za dalszą część pliku, a nie stronę do wyświetlenia. De facto napis “ble ble” znajdzie się na końcu ściągniętego pliku.

Kod jak najbardziej potem się wykona, nie może jedynie nic iść do przeglądarki.

I kilka uwag na koniec. filename= nie musisz w cudzysłów ujmować.

Jeśli nie dołączysz nagłówka długości, przeglądarka nie będzie wiedziała jaki rozmiar ma plik i nie pokaże paska postępu (tzn ile % pozostało do końca ściągania) i przewidywanego czasu, tylko po prostu informację że pobiera. Rozmiar pliku możesz pobrać za pomocą funkcji filesize() http://pl.php.net/manual/pl/function.filesize.php

yyy… tylko że kilka dni wcześniej już to napisałem … po co powtarzać :?:

@EDIT DOWN:

autor tematu zrozumiał, jeśli Ty nie, to bardzo mi przykro i… współczuję.

Jeśli masz na myśli to - ciężko odczytać prawidłowo. Chciałem uprościć, aby nie doszło do nieporozumień.

wielkie dzięki, sorki że pisze z opóźnieniem ale byłem na wczasach :slight_smile:

oryginalne nazwy plików najlepiej ukryć za pomocą aialasów. Poszukaj informacji o aliasach plików… bo to pewnie to, czego szukasz…

COD-sido chodziło mi właśnie o coś takiego jak header 8)