Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]Problem z headerem i pobieraniem plików, Problem
MateuszS
post 23.01.2010, 11:51:19
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


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
evolucja
post 23.01.2010, 14:42:09
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.


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
MateuszS
post 23.01.2010, 15:08:56
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


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
b4x
post 23.01.2010, 15:17:46
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 23.01.2010, 16:53:15
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.


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
pedro84
post 23.01.2010, 17:17:06
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 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.


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
MateuszS
post 23.01.2010, 18:09:02
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


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
pedro84
post 23.01.2010, 18:13:31
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"]); ?


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
MateuszS
post 23.01.2010, 18:23:16
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


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
pedro84
post 23.01.2010, 18:25:14
Post #10





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

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


Ale to niemożliwe biggrin.gif

Wrzuć gdzieś na www ten plik jako php i txt. Mam dokładnie ten sam kod u siebie i mi śmiga.


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
MateuszS
post 23.01.2010, 18:35:07
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


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
pedro84
post 23.01.2010, 19:11:49
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ę?


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
MateuszS
post 23.01.2010, 19:21:36
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.


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
pedro84
post 23.01.2010, 19:32:06
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. ?>


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
MateuszS
post 23.01.2010, 19:43:10
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.


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
b4x
post 24.01.2010, 01:36:20
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 24.01.2010, 11:06:31
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


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
pedro84
post 24.01.2010, 13:40:23
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 biggrin.gif


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
MateuszS
post 24.01.2010, 13:49:01
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?


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
pedro84
post 24.01.2010, 15:57:29
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?


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 27.04.2024 - 22:45