Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Problem z headerem i pobieraniem plików, Problem
MateuszS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Chciałem aby na moim prywatnym hostingu po naciśnięciu odpowiedniego inputa pobierało pliki na komputer a nie wyświetlało je (grafika i tekstowe), więc zastosowałem rzekomo dobre rozwiązanie:
Z tąd

Niestety, mimo licznych kombinacji to nie działa, po kliknięciu na button następuje próba pobrania pliku o tej nazwie jednak zajmuje on po kilka kb i nie można go otworzyć. Ścieżka do pliku jest dobra bo po zwykłym header("Location: $sciezka"); dziala, jednak jak już pisałem, chodzi mi o rozwiązanie wykluczające otwieranie niektórych rozszerzeń plików w oknie przeglądarki

Oto kod:
  1. if(!empty($wynik["haslo"])) {
  2. $wpisane = strip_tags(str_replace(' ','', $_POST["haslo"]));
  3. if(!empty($wpisane)) {
  4. if($haslo == $wpisane) {
  5. echo "Pobieranie pliku rozpoczęte... ";
  6. header('Content-Type: application/x-unknown');
  7. header('Content-Description: File Transfer');
  8. header('Content-Disposition: attachment; filename='.$wynik["sciezka"]);
  9. header('Content-Transfer-Encoding: binary');
  10. // header("Location: ".$wynik["sciezka"]);
  11. } else {
  12. echo "Błąd: Hasło niepoprawne";
  13. }
  14. } else {
  15. echo "Błąd: Wpisz hasło do pliku.";
  16. }
  17. } else {
  18. echo "Pobieranie pliku rozpoczęte... ";
  19.  
  20. header('Content-Type: application/x-unknown');
  21. header('Content-Description: File Transfer');
  22. header('Content-Disposition: attachment; filename='.$wynik["sciezka"]);
  23. header('Content-Transfer-Encoding: binary');
  24. // header("Location: ".$wynik["sciezka"]);
  25. }


Kolejność headerów chyba jest dobra

Ten post edytował MateuszScirka 22.01.2010, 17:22:19
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 30)
evolucja
post
Post #2





Grupa: Zarejestrowani
Postów: 362
Pomógł: 27
Dołączył: 14.09.2009

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


Cytat
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP.

To taki błąd na pierwszy rzut oka... popraw to.
Go to the top of the page
+Quote Post
MateuszS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


niekoniecznie, wystarczy na poczatku dac ob_start(); a na koncu ob_end_flush(); i wszystko działa. Jak już pisałem zwykły header location: (przekierowanie) działa OK ale ja chcę zrobić trochę inaczej, jak pisałem wcześniej, (żeby plik np. .txt pobierał się na dysk a nie otwierał w przeglądarce
Go to the top of the page
+Quote Post
b4x
post
Post #4





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


  1. $filename = '/home/bleble/a.rar';
  2. $file = fopen($filename, 'rb');
  3.  
  4. // Wrzuć Nagłowki tutaj
  5.  
  6. while (ob_get_level())
  7. {
  8. }
  9.  
  10.  
  11. // Bloki po 16kb
  12. $block = 1024 * 16;
  13.  
  14. while ( ! feof($file))
  15. {
  16. break;
  17. echo fread($file, $block);
  18.  
  19. flush();
  20. }
  21.  
  22. fclose($file);
  23.  
Go to the top of the page
+Quote Post
MateuszS
post
Post #5





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Niestety, treść np. pliku .txt wyświetla mi na stronie zamiast rozp. pobieranie.
Go to the top of the page
+Quote Post
pedro84
post
Post #6





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Mateusz, spróbuj tego, mi działa, dla pewności wszystkie porzeglądarki sprawdziłem. Oczywiście, file.txt to ścieżka (względnia nazwa pliku) do Twojego pliku (IMG:style_emoticons/default/smile.gif)

Kod
ob_start();
echo "Pobieranie pliku rozpoczęte... ";
header('Content-Type: application/x-unknown');
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename=file.txt');
header('Content-Transfer-Encoding: binary');
ob_end_flush();


Daj znać, czy Ci działa.
Go to the top of the page
+Quote Post
MateuszS
post
Post #7





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Niestety, pedro84 - nie działa. Próbowałem tak:

  1. echo "Pobieranie pliku rozpoczęte... ";
  2. header('Content-Type: application/x-unknown');
  3. header('Content-Description: File Transfer');
  4. header('Content-Disposition: attachment; filename='.$wynik["nazwa"]);
  5. header('Content-Transfer-Encoding: binary');


jak i tak

  1. $otworz = opendir("pliki/".$wynik["folder"]);
  2. echo "Pobieranie pliku rozpoczęte... ";
  3. header('Content-Type: application/x-unknown');
  4. header('Content-Description: File Transfer');
  5. header('Content-Disposition: attachment; filename=tomnet.txt');
  6. header('Content-Transfer-Encoding: binary');


Pobiera mi źródło strony do pliku txt ;/

Ten post edytował MateuszScirka 23.01.2010, 18:16:12
Go to the top of the page
+Quote Post
pedro84
post
Post #8





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Co Ci zwraca var_dump($wynik["nazwa"]); ?
Go to the top of the page
+Quote Post
MateuszS
post
Post #9





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


nazwę z rozszerzeniem np. tomnet.txt ;P zmienne są wporządku bo jak daje header("Location:".$wynik["sciezka"]); to ladnie smiga ;P

Ten post edytował MateuszScirka 23.01.2010, 18:23:53
Go to the top of the page
+Quote Post
pedro84
post
Post #10





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Ale to niemożliwe (IMG:style_emoticons/default/biggrin.gif)

Wrzuć gdzieś na www ten plik jako php i txt. Mam dokładnie ten sam kod u siebie i mi śmiga.
Go to the top of the page
+Quote Post
MateuszS
post
Post #11





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Oto strona na której możesz zobaczyć co jest nie tak. Spróbuj upnąć i pobrać jakiś plik np. txt
http://mateuszs.pl/uploader2/

http://wklejto.pl/55202 - plik odpowiedzialny za pobieranie
http://wklejto.pl/55203 - index.php
Go to the top of the page
+Quote Post
pedro84
post
Post #12





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Eeeee, Mateusz.... nie chcę Cię załamywać, ale....sam zobacz... (pozwoliłem sobie skorzystać do wrzucenia tego pliku).

Jaką masz przeglądarkę?
Go to the top of the page
+Quote Post
MateuszS
post
Post #13





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Firefox. Pobrało mi 2 kb, nie można otworzyć obrazka, taki czerwony x się pojawia, tak jakbym otwierał pusty obrazek.
Go to the top of the page
+Quote Post
pedro84
post
Post #14





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Sprawdź teraz, powinno działac.

  1. <?php
  2.  
  3. $wynik["nazwa"] = 'test.rar';
  4.  
  5. echo "Pobieranie pliku rozpoczęte... ";
  6. header('Content-Type: application/x-unknown');
  7. header('Content-Description: File Transfer');
  8. header('Content-Disposition: attachment; filename='.$wynik["nazwa"]);
  9. header('Content-Transfer-Encoding: binary');
  10. header('Content-length: ' . @filesize($wynik["nazwa"]));
  11. @readfile($wynik["nazwa"]);
  12. ?>
Go to the top of the page
+Quote Post
MateuszS
post
Post #15





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


juz cieplej. Niestety przy np pobieraniu archiwum, pobiera całe ale przy wypakowaniu nieoczekiwany koniec archiwum. Przy .exe pobiera cały ale jest inna ikonka i nie da się otworzyć pliku.
Go to the top of the page
+Quote Post
b4x
post
Post #16





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


  1. <?php
  2.  
  3. $wynik["nazwa"] = 'test.rar';
  4. $filesize = filesize($wynik["nazwa"]);
  5.  
  6.  
  7. header('Content-Type: application/octet-stream');
  8. header('Content-Disposition: attachment; filename="'.basename($wynik["nazwa"]).'"');
  9. header('Content-Transfer-Encoding: binary');
  10. header('Content-Length: '.sprintf('%d', $filesize));
  11. header('Expires: 0');
  12. header('Pragma: no-cache');
  13.  
  14.  
  15. @readfile($wynik["nazwa"]);
  16. ?>
Go to the top of the page
+Quote Post
MateuszS
post
Post #17





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


b4x, niestety to samo, możecie sprawdzić jak to wygląda tu
Go to the top of the page
+Quote Post
pedro84
post
Post #18





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Dalej to samo, możesz sprawdzić tutaj. Najlepsze, że wrzuciłem PSD 2.27 MB a pobiera się 2.28 MB (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
MateuszS
post
Post #19





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


No właśnie wiem że to samo ;D Nie wiem czemu, podmieniłem jak napisał b4x, reszte kodu macie w poprzednich postach i dalej lipa.. może to być wina serwera?
Go to the top of the page
+Quote Post
pedro84
post
Post #20





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Kod, który napisał Ci b4x musi działać, przynajmniej mi działa, cholera wie, może faktycznie coś z konfiguracja systemu, nie mam pomysłu niestety żadnego, może spróbuj na innym serwerze/localu?
Go to the top of the page
+Quote Post
MateuszS
post
Post #21





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


A no właśnie... przecież na localu też nie działa ;/ Może coś jest nie tak z resztą kodu...

PS ale wam też to nie działa na mojej stronie nie?

Ten post edytował MateuszScirka 24.01.2010, 17:01:59
Go to the top of the page
+Quote Post
pedro84
post
Post #22





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Cytat(MateuszScirka @ 24.01.2010, 17:01:42 ) *
A no właśnie... przecież na localu też nie działa ;/ Może coś jest nie tak z resztą kodu...

PS ale wam też to nie działa na mojej stronie nie?


Na Twojej stronie nie działa, ale na localu mi działa. Hmm... Faktycznie musisz mieć coś nie tak z innym kodem.
Go to the top of the page
+Quote Post
MateuszS
post
Post #23





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Ten plik includuje do index.php gdzie mam na pocz. ob_start() i na koncu ob_end_flush();

  1. <?php
  2.  
  3. $zapytanie = mysql_query("SELECT * FROM `fu2_pliki` WHERE `hash_link`='".$_GET["l"]."'") or die(mysql_error());
  4.  
  5. if(mysql_num_rows($zapytanie) == 0) {
  6. exit("Błąd: Nie ma pliku o podanym linku");
  7. }
  8.  
  9. $wynik = mysql_fetch_assoc($zapytanie);
  10. $zapytanie2 = mysql_query("SELECT * FROM `fu2_rozszerzenia` WHERE `id`='".$wynik["rozszerzenie"]."'") or die(mysql_error());
  11. $rozszerzenie = mysql_fetch_assoc($zapytanie2);
  12. $haslo = $wynik["haslo"];
  13. if($wynik["rozmiar"] == 0) $wynik["rozmiar"]=0.01;
  14. if(!isset($_POST["send"])) {
  15. echo "<form name='lol' action='' method='POST'>";
  16. echo "Pobieranie pliku <span style='font-family: verdana; font-size: 10pt;'>".$wynik["nazwa"]."</span>";
  17. echo "<br /><br />";
  18. echo "<span style='font-size: 13pt;'>Nazwa pliku: </span><span style='font-family: verdana; font-size: 12pt; opacity: 0.85'>".$wynik["nazwa"]."</span><br />";
  19. echo "<span style='font-size: 13pt;'>Format: </span><span style='font-family: verdana; font-size: 12pt; opacity: 0.85'>".$rozszerzenie["rozszerzenie"]."</span><br />";
  20. echo "<span style='font-size: 13pt;'>Rozmiar: </span><span style='font-family: verdana; font-size: 12pt; opacity: 0.85'>".$wynik["rozmiar"]." Mb</span><br /><br >";
  21.  
  22. if(!empty($wynik["email"]) or !empty($wynik["opis"])) {
  23. echo "<img src='images/szczegoly.png' id='29' /><br /><br />";
  24. }
  25. echo "<div class='box_5' style='display: none'>";
  26. if(!empty($wynik["email"])) {
  27. echo "Email autora <span style='font-family: verdana; font-size: 10pt; opacity: 0.85'>".$wynik["email"]."</span><br />";
  28. }
  29. if(!empty($wynik["opis"])) {
  30. echo "Opis: <span style='font-family: verdana; font-size: 10pt; opacity: 0.85'>".$wynik["opis"]."</span><br />";
  31. }
  32. echo "</div>";
  33. echo "<input type='hidden' value='1' name='send' />";
  34. echo "<br />";
  35. if(!empty($wynik["haslo"])) {
  36. echo "Podaj hasło do pliku: <br /><input type='password' name='haslo' style='opacity: 0.85; width: 155px; background-color: silver' /><br /><br />";
  37. }
  38. echo "<img src='images/pobierz.png' id='30' onClick='document.lol.submit();' style='opacity: 0.7' onMouseOver='opacity_in(30)' onMouseOut='opacity_dis(30)' />";
  39. echo "</form>";
  40. } else {
  41. //$otworz = opendir("pliki/".$wynik["folder"]);
  42. if(!empty($wynik["haslo"])) {
  43. $wpisane = strip_tags(str_replace(' ','', $_POST["haslo"]));
  44. if(!empty($wpisane)) {
  45. if($haslo == $wpisane) {
  46.  
  47. $filesize = filesize($wynik["sciezka"]);
  48.  
  49.  
  50. header('Content-Type: application/octet-stream');
  51. header('Content-Disposition: attachment; filename="'.basename($wynik["sciezka"]).'"');
  52. header('Content-Transfer-Encoding: binary');
  53. header('Content-Length: '.sprintf('%d', $filesize));
  54. header('Expires: 0');
  55. header('Pragma: no-cache');
  56.  
  57.  
  58. @readfile($wynik["sciezka"]);
  59.  
  60.  
  61. } else {
  62. echo "Błąd: Hasło niepoprawne";
  63. }
  64. } else {
  65. echo "Błąd: Wpisz hasło do pliku.";
  66. }
  67. } else {
  68.  
  69. $filesize = filesize($wynik["sciezka"]);
  70.  
  71. header('Content-Type: application/octet-stream');
  72. header('Content-Disposition: attachment; filename="'.basename($wynik["sciezka"]).'"');
  73. header('Content-Transfer-Encoding: binary');
  74. header('Content-Length: '.sprintf('%d', $filesize));
  75. header('Expires: 0');
  76. header('Pragma: no-cache');
  77.  
  78.  
  79. @readfile($wynik["sciezka"]);
  80.  
  81.  
  82. }
  83. }
  84. ?>
  85.  


Nie wydaje mi sie zeby cos tu przeszkadzalo w pobraniu pliku. Goły, sam skrypt na localu tez mi dziala ale w polaczeniu ze strona cos jest nie tak ;/ ;/
Go to the top of the page
+Quote Post
pedro84
post
Post #24





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Ale może w pliku index.php coś jest nie tak? Nie wiem. Trudno powiedzieć. Może wrzuć gdzieś jakąś paczkę do zobaczenia, tam gdzie będzie index.php.
Go to the top of the page
+Quote Post
MateuszS
post
Post #25





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Plik z indexem jest w moim poscie wczesniej. (gdzies na poprzedniej stronie)

Ten post edytował MateuszScirka 24.01.2010, 19:37:29
Go to the top of the page
+Quote Post
b4x
post
Post #26





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


  1. <?php
  2.  
  3. $wynik["nazwa"] = 'test.rar';
  4. $filesize = filesize($wynik["nazwa"]);
  5.  
  6.  
  7. header('Content-Type: application/octet-stream');
  8. header('Content-Disposition: attachment; filename="'.basename($wynik["nazwa"]).'"');
  9. header('Content-Transfer-Encoding: binary');
  10. header('Content-Length: '.sprintf('%d', $filesize));
  11. header('Expires: 0');
  12. header('Pragma: no-cache');
  13.  
  14. while (ob_get_level() > 0) {
  15. }
  16.  
  17. @readfile($wynik["nazwa"]);
  18.  
  19. exit(); // Zakończ działanie skryptu
  20. ?>


Ten post edytował b4x 24.01.2010, 19:40:43
Go to the top of the page
+Quote Post
MateuszS
post
Post #27





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


b4x, niestety dalej to samo, problem gdzieś jest pewnie w indexie... w sumie nie widze tam nic nadzwyczajnego co moglo by psuć mi skrypt. Może jest jakieś alternatywne rozw. np. Ajaxowe

Ten post edytował MateuszScirka 24.01.2010, 20:10:18
Go to the top of the page
+Quote Post
b4x
post
Post #28





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Ja na Twoim miejscu pobieranie zrobiłbym w osobnym plik - bez żadnego HTML'a itd.

Po prostu - np. plik download.php - pobierasz ID pliku GET'em, sprawdzasz czy plik istnieje (tak jak masz to teraz) i wysyłasz.
Go to the top of the page
+Quote Post
MateuszS
post
Post #29





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Mysle ze wystarczy, dzięki wam obu

Tylko jest jeden problem. Na localhoscie dziala a na serwerze chce mi pobierac plik download.php zamiast pliku docelowego oO
Go to the top of the page
+Quote Post
b4x
post
Post #30





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Nie koniecznie download.php chce pobrać, pewno chce pobrać plik ale pod nazwą download.php, bym sprawdził na Twoim miejscu poprawność:

  1. header('Content-Disposition: attachment; filename="'.$wynik["sciezka"].'"');
Go to the top of the page
+Quote Post
MateuszS
post
Post #31





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Ok już działa wszystko. Dzięki jeszcze raz.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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.12.2025 - 00:20