Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Alternatywa file_get_contents() ?, Ukrywanie pliku, który ma byc pobierany
SNC
post 8.04.2006, 08:47:17
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 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. ?> 


Ten post edytował SNC 8.04.2006, 08:50:25
Go to the top of the page
+Quote Post
nospor
post 8.04.2006, 21:18:59
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


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
SNC
post 9.04.2006, 21:20:45
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 11.04.2006, 21:09:50
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 12.04.2006, 09:30:54
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 12.04.2006, 11:38:08
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 12.04.2006, 16:23:30
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 12.04.2006, 19:31:14
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 13.04.2006, 18:36:01
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 15.04.2006, 13:18:21
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 15.04.2006, 17:01:24
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 16:07