Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Alternatywa file_get_contents() ?
Forum PHP.pl > Forum > PHP
SNC
Witajcie drodzy forumowicze php.pl smile.gif
Przychodze do Was z problem jak i nadzieją, że mi pomozecie.

Problem polega na tym, że mam plik *.zip na innym serwerze niż moja strona i chciałem po prostu ukryć ściezkę tak, zeby nikt nie mogl wiedziec z jakiego serwera jest ten plik pobierany. Kobinowalem z naglowki + file_get_contens(), ale wtedy skrypt pobiera pliczek do siebie, a dopiero pozniej wysyla go do przegladarki i to zajmuje bardzo dużo czasu. Nie jest to problemem gdy plik ma pare kilo, ale co zrobic gdy ma 100MB?

Chciałbym to zrobic tak: najpierw naglowki, pozniej jakies przekierowanie do pliku *zip, skrypt wysyla *.zip'a do przegladarki, user sciaga i nie zna prawdziwej sciezki.

Jakies propozycje?

Serdecznie pozdrawiam i licze na pomoc z waszej stony smile.gif

--[ edycja ]--

Moze podam stary kod, abyscie lepiej mogli ocenic sytuację
  1. <?php
  2. header("Content-Type: application/force-download"); 
  3. header("Content-Type: application/octet-stream"); 
  4. header("Content-Type: application/download"); 
  5. header("Content-Disposition: attachment; filename=jakas_tam_nazwa.zip;");
  6. header("Accept-Ranges: bytes"); 
  7. header("Content-Transfer-Encoding: binary"); 
  8.  
  9. print( file_get_contents( 'http://adresserwazplikami.com/plikz.zip' ) );
  10.  
  11. ?> 
nospor
czyzby chodzilo ci oto? :
http://pl.php.net/manual/pl/function.readfile.php
SNC
Hmm.. Dziwne, ale readfile() dziala podobnie jak file_get_contents()... Rowniez najpierw pobiera plik do skryptu, a gdy skonczy, dopiero przekazywany jest przegladarce... Moze uzywam zlych naglowkow..?
dtb
to smieszne! jak przegladarka moze nie wiedziec jaki plik pobiera? musisz albo zrobic tak, jak robisz (file_get_contents/readfile), albo pogodzic sie z tym, ze inaczej sie nie da! mozna wysylac naglowek location do przegladarki, ale mimo to, iz na pasku adresu bedzie adres skryptu, to w ten sposob mozna bez problemu sprawdzic adres url pliku.
SNC
Cytat(dtb @ 2006-04-11 20:09:50)
to smieszne! jak przegladarka moze nie wiedziec jaki plik pobiera?

Chcesz przyklad? Proszę bardzo. I teraz zlokalizuj mi gdzie znajduje się plik tcmd654a.exe. Nie da sie? Wlasnie o to mi chodzi!

Zamiast http://serwer_z_pliami.com/tcmd654a.exe pokazuje mi sie http://total.qneta.com/get_remote.php?file...e13fc07378cfd71

Pozdrawiam
Vogel
  1. <?php
  2. $fp = fopen($name, 'rb');
  3.  
  4. header("Content-Type: image/jpeg");
  5. header("Content-Length: " . filesize($name));
  6.  
  7. fpassthru($fp);
  8.  
  9. ?>
SNC
@Vogel, przykład z manuala ktory przytoczyłeś nijak ma się do mojego problemu...
Liko
Może pokombinuj z funkcją flush" title="Zobacz w manualu php" target="_manual. Tak wymyśliłem, że jeżeli będziesz odczytywał x bajtów pliku w pętli, wyrzucał to zadziała. Nie będzie trzeba czekać na ściągnięcie do końca.
SNC
Cytat(Liko @ 2006-04-12 18:31:14)
Może pokombinuj z funkcją flush" title="Zobacz w manualu php" target="_manual. Tak wymyśliłem, że jeżeli będziesz odczytywał x bajtów pliku w pętli, wyrzucał to zadziała. Nie będzie trzeba czekać na ściągnięcie do końca.

@Liko, mam prosbe, moglbys przyblizyc trochę jak to sobie wyobrazasz?
mariuszn3
Cytat(SNC @ 2006-04-12 08:30:54)
Cytat(dtb @ 2006-04-11 20:09:50)
to smieszne! jak przegladarka moze nie wiedziec jaki plik pobiera?

Chcesz przyklad? Proszę bardzo. I teraz zlokalizuj mi gdzie znajduje się plik tcmd654a.exe. Nie da sie? Wlasnie o to mi chodzi!

Zamiast http://serwer_z_pliami.com/tcmd654a.exe pokazuje mi sie http://total.qneta.com/get_remote.php?file...e13fc07378cfd71

Pozdrawiam

Z tego zo zrozumiałem, chcesz aby ktos przykładowo klikając na link http://www.serwerA.com/plik.zip ściągał tak naprawdę zawartość pliku z innego serwera np. z miejsca http://www.serwerB.com/plik.zip

Jedyny sposób w jaki możesz to osiągnąć to napisanie skryptu, który ściąga plik z serweraB i serwuje go. NIE DA SI INACZEJ. To jest ta sama sprawa jak próba namówienia przegląrki aby pokazywała stronęB kiedyś ktoś wklika w pasek adresy stronaA (tak aby ten adres się zmienił przy przekierowaniu). Takie rzeczy są po prostu nie dozwolone ze zrozumiałych względów.

Vogel Ci podał moim zdaniem najlepsze rozwiązanie do Twojego problemu. Mam wrażenie, że go nie zrozumiałeś
Przykład, który Ty podałeś ze strony Total commandera robi dokładnie to samo
Po kliknięciu na download poprzez formularz (dlatego nie widać linku) zostajesz przekierowany na następujący adres:
http://total.qneta.com/get_remote.php?file...ba457ce13962f82

Jest to skrypt php prawdopodobnie właśnie w taki sam albo bardzo podobny sposób serwuje Ci plik, z tylko sobie wiadomego źródła.
Jabol
Prościutkie
  1. <?php
  2.  
  3. header("Content-Type: image/jpeg");
  4. header("Content-Length: " . filesize($name));
  5.  
  6. $fh=fopen($name, "r");
  7.  
  8. /* do
  9. {
  10. $buf=fread($fh, 2048);
  11. print $buf;
  12. } while($buf!=""); */
  13.  
  14. while(strlen(($buf=fread($fh, 2048))!=0)
  15.  print $buf;
  16.  
  17. fclose($fh);
  18.  
  19. ?>
Teraz teoretycznie nie musisz czekać aż całość ściągnie się na serwer, ponieważ czyta do bufora. Nie znam enginu php więc nie wiem czy to tak działa, ale spróbuj.
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.