[php] ukrycie adresu pliku

0

Witam! Mam wielki problem, bardzo prosze o pomoc. Musze zrobic cos takiego ze skrypt php w pewnym momencie swojego dzialania "wyrzuca" plik zip, ale chce to zrobic tak by odwiedzajacy nie mial mozliwosci sprawdzenia z jakiego dokladnie adresu (katalogu na serwerze) ten plik zostal wyrzucony. Robie to w ten sposob

header("Location: jakiskatalog/plik.zip");

Ale nawet glupi Internet Exploer w momencie kiedy wyskakuje okienko z pytaniem czy pobrac plik, podaje jego lokalizacje.

Bardzo prosze o pomoc
MSvI

0

Napisz skrypt, który otworzy plik jako text i będzie wysyłał porcjami... możesz nawet zrobić taki bajer jak w artykule Piechnata: http://4programmers.net/article.php/id=534

A odczytywanie pliku zrob tak:

header('Content-Type: application/x-unknown');
if ($fp = fopen('pliczek.zip', 'rb'))
    {
        flock($fp, 1);
        echo(fread($fp, filesize('plikczek.zip')));
        flock($fp, 3);
        fclose($fp);
    }
0
<?
header('Pragma: no-cache');
header('Content-type: application/exe');
header('Content-Disposition: attachment; filename="program.exe"');
?>

zrobilem tak jak mowisz :

header('Content-Disposition: attachment; filename="jakiskatalog/plik.zip"');

ale pobiera mi pusty plik!

poza tym ja mam plik zip tak jak mowilem a nie exe.!

0

Ale nawet glupi Internet Exploer

W tym przypadku to chyba mądry :).

Możesz na czas download'u skopiować plik do innego katalogu i później go usunąc.

0

Ale nawet glupi Internet Exploer

W tym przypadku to chyba mądry :).

Możesz na czas download'u skopiować plik do innego katalogu i później go usunąc.

To raczej odpada :) plik jest dosc duzy (ok 1 mb). Prosil bym o zwykla metode bez takich kombinacji ;)

0

http://4programmers.net/faq.php/id=422 - to musi rozwiazać twój problem!

0

wątpię żeby ukrycie adresu było możliwe, to jest indywidualna sprawa klienta, nawet jeśli wymyślisz coś na IE to ktoś może użyć innej przeglądarki albo download akceleratora i mimo wszystko znajdzie ten adres...

ja bym się skupił na tym do czego Ci to potrzebne, bo jeśli chcesz aby ludzie nie ściągali plików samopas z twojego serwera tylko konkretnie klikając na odnośnik na twojej stronie, to możesz np. puszczać pliki przez skrypt PHP i w którym będziesz sprawdzał poprawność HTTP_REFERER...

0

w tej chwili mam taki kod :

<? 
header('Content-Disposition: attachment; filename="plik.zip"');
if ($fp = fopen('jakiskatalog/plik.zip', 'rb'))
    {
        flock($fp, 1);
        echo(fread($fp, filesize('jakiskatalog/plik.zip')));
        flock($fp, 3);
        fclose($fp);
    }
?>

i umnie smiga - wszystko jest OK tak jak chcialem. ale u mojego znajomego na IE 5.0, sciaga plik pobierz.php (nazwa funkcji) a nie plik.zip, a w dodatku ten plik ma 0 bajtow! Czyli tak naprawde nic nie sciaga. co jest przyczyna?

0

Czyli tak naprawde nic nie sciaga. co jest przyczyna?

Wydaje mi się, że to dla tego że nie wysyłasz kompletnego, poprawnego nagłówka. Przeczytaj artykuł do którego Ci dałem linka...

0

no to nie zgadniesz co sie dzieje jak wysylam pelny naglowek zgodnie z Twoim artykulem [diabel]

      header('Pragma: no-cache');
      header('Content-type: application/x-zip-compressed; name="plik.zip"');
      header('Content-Disposition: attachment; filename="plik.zip"');
      header('Content-Length: 217377');

wtedy nazwa pliku ktora proponuje dla pobranego pliku to "pobierz.zip" a nie "plik.zip" i dzieje sie to przez to -header('Content-Length: 217377');
Bez tego dziala ok (ale nie wiem jak u kumpla - pewnie nie za ciekawie).

0

puszczać pliki przez skrypt PHP i w którym będziesz sprawdzał poprawność HTTP_REFERER...
Gwoli ścisłości: HTTP_REFERER mogę wpisać dowolne we FlashGecie więc metoda nadal cienka.

0

Gwoli ścisłości: HTTP_REFERER mogę wpisać dowolne we FlashGecie więc metoda nadal cienka.

Masz racje, lepszy będzie formularz i obrazek z kodem do przepisania, po którym poda się adres e-mail, na który zostanie wysłany link z jednorazowym kodem aktywującym ściąganie... [browar] :)

0

buhaha, nie no z tym obrazkiem to dowaliles, co to ma wspolnego z moim problemem? Na koncu i tak stwierdziles z kod aktywujacy, no i co? wpiszesz kod i musi sie rozpoczac pobieranie pliku tak? No i doszlismy to samego poczatku, a raczej sedna problemu, jak to zrobic tak by bylo dorze :) Przeczytaj moj poprzednij post a sie dowiesz na czym ugrzezlismy....

// eeee... tzn np. moj skrypt do pobierania plikow:
// http://4programmers.net/article.php/id=534
// tez Ci nie działa ?
// ---------
// m.piechnat

0

jak by na IE5 nie działało to pokombinuj z takimi nagłówkami:

----------------------------------

header('Content-Type: application/force-download');

----------------------------------

$attachment = strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE') ? '' : ' attachment;';
header('Content-Disposition:' . $attachment . ' filename="' . $fname . '"');

----------------------------------

popróbuj też wywalić średnik po attachment lub/i cudzysłowy po filename

moze w koncu cos zadziala na tym nieszczęsnym IE5, a jak nie to go olej,
i tak wiekszosc ludzi po usunieciu 300 wirusow z dysku zrobila update do IE6 :D

0

Sorry, ze moj poprzedni post byl w takim agresywnym tonie, myslalem ze jestes jakims gosciem co g.. wie a zawsze super rady daje, ale teraz spojzalem ze to Ty jestes autorem tego skryptu, i widac ze znasz sie na rzeczy. sorry.
A co do Twojego skryptu wlasnie.. to dziala ... tyle ze wyrzuca plik pobierz.php (jako nazwe funkcji) zamiast wlasciwej nazwy. ale moze tylko mi zle dziala? sam nie wiem, nie testowalem na innych maszynach.

// he he, to jeszcze byś zerknał kto jest moderatorem tego działu ;-) - Ł

1 użytkowników online, w tym zalogowanych: 0, gości: 1