Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Alternatywa file_get_contents() ?, Ukrywanie pliku, który ma byc pobierany
SNC
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 10.04.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Witajcie drodzy forumowicze php.pl (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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. ?> 


Ten post edytował SNC 8.04.2006, 08:50:25
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




czyzby chodzilo ci oto? :
http://pl.php.net/manual/pl/function.readfile.php
Go to the top of the page
+Quote Post
SNC
post
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 10.04.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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..?
Go to the top of the page
+Quote Post
dtb
post
Post #4





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
SNC
post
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 10.04.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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

Ten post edytował SNC 12.04.2006, 09:33:40
Go to the top of the page
+Quote Post
Vogel
post
Post #6





Grupa: Zarejestrowani
Postów: 402
Pomógł: 0
Dołączył: 20.01.2003

Ostrzeżenie: (0%)
-----


  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. ?>
Go to the top of the page
+Quote Post
SNC
post
Post #7





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 10.04.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


@Vogel, przykład z manuala ktory przytoczyłeś nijak ma się do mojego problemu...

Ten post edytował SNC 12.04.2006, 16:24:06
Go to the top of the page
+Quote Post
Liko
post
Post #8





Grupa: Zarejestrowani
Postów: 436
Pomógł: 6
Dołączył: 8.11.2003
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
SNC
post
Post #9





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 10.04.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
mariuszn3
post
Post #10





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował mariuszn3 15.04.2006, 13:19:16
Go to the top of the page
+Quote Post
Jabol
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Jabol 15.04.2006, 17:08:08
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 06:30