Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Force-Download, Dziwnę błędy w różnych przeglądarkach
Black-Berry
post
Post #1





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


Ostatnio zająłem się skryptem do ściągania plików. Testowałem tonę skryptów i za kazdym razem natrafiałem na problemy. Najbardyiej pryzjaynz okazał się ten:
  1. <?php
  2. $file = fopen('download/' . $_GET['content'], 'r');
  3. $fsize = filesize('download/' . $_GET['content']);
  4. header('Pragma: no-cache');
  5. header('Content-type: application/x-zip-compressed; name="' . $_GET['content'] . '"');
  6. header('Content-Disposition: attachment; filename="' . $_GET['content'] . '"');
  7. $fsize = filesize('download/' . $_GET['content']);
  8. header('Content-Length: ' . ($fsize));
  9. while (!feof($file)) {
  10. echo fread($file, 1024);
  11. }
  12. fclose($file);
  13. ?>

Niestety nie do końca... Na przykładzie tego pliku lista dziwnych błędów:
1. Firefox 3.0 zatrzymuje download na dłuższą chwilę przy 95%
2. IE7 nie pokazuje progress-bara
3. Opera 9.50 zatrzymuje się na chwilę przy 99% i p mimo tego, że plik się poprawnie sciąga na pasku postępu pokazuje "Błąd"

Może jest jakiś kod kończący wysyłanie pliku o którym nie wiem? Bardzo prosze o pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
loganek
post
Post #2





Grupa: Zarejestrowani
Postów: 81
Pomógł: 20
Dołączył: 14.06.2007

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


zawsze robiłem w ten sposób:
Kod
   Header("Content-disposition: attachment; filename=\"".$_GET["download"]."\"");
   Header("Content-type: application/force-download");
   readfile($_GET["download"]);

i działało
Go to the top of the page
+Quote Post
Black-Berry
post
Post #3





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


Odkryłem, że bez tej linijki określającej wielkość pliku:

  1. <?php
  2. header('Content-Length: ' . ($fsize));
  3. ?>


działa poprawnie tzn. nie zatrzymuje się przy końcu. Dobrze by jednak było znać rozmiar pliku i przewidywany czas ściągnięcia :/
Go to the top of the page
+Quote Post
php programmer
post
Post #4





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


wywal
  1. <?php
  2. header('Pragma: no-cache');
  3. ?>
Go to the top of the page
+Quote Post
Black-Berry
post
Post #5





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


Nic to nie daje.

Coś chyba jednak mam źle w założeniach bo znalazłem następny problem:
-> Jeśli coś się sciąga to dana przeglądarka nie pozwala na przejście do innej strony z tego samego serwera.

Czemu takie coś zapycha całą sesję i już nic nie można zobić do końca ściągania ? Można coś z tym zrobić ?
Go to the top of the page
+Quote Post
batman
post
Post #6





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Wywal to: application/x-zip-compressed i dodaj odpowiedni nagłówek w zależności od rodzaju pliku. Jeśli nie wiadomo jaki rodzaj pliku to dajesz application/octet-stream. Powinno zadziałać.
Go to the top of the page
+Quote Post
Black-Berry
post
Post #7





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


Udało mi się zrobić to tak żeby nie zwalniało przy 95%. W tym artykule jest opis.

Nie zmienia to jednak faktu, że force-download pżera całą sesję i w przypadku dużych plików musisz czekać aż się ściągnie żeby móc przejść na inną podstronę.
Go to the top of the page
+Quote Post
batman
post
Post #8





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Tego właśnie linka chciałem Ci wkleić, ale niestety nie działa u mnie.
Zerknij jeszcze na obsługę połączeń. Znajdziesz tam kilka ciekawych informacji na temat ściągania plików.
Go to the top of the page
+Quote Post
Black-Berry
post
Post #9





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


Dzięk, ale jakoś nie mam pomysłu co mógłbym z tym zrobić... :/ Podczas ściągania pliku serwer nie obsługuje z danej sesji nic oprócz wysyłania go więc jeśli przerwę wysyłanie to całe ściąganie szlak trafi.

Edit:
Niezłe ostatnie zdanie mi wyszło ale mam nadzieję, że wiesz o co mi chodzi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Black-Berry 8.07.2008, 19:26:12
Go to the top of the page
+Quote Post
batman
post
Post #10





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




No właśnie nie. W tym linku, o ile się nie mylę, opisana była metoda ściągania plików częściowych, np przy pomocy download managerów. Testowałem i działało bez zarzutu, a ściąganie uruchamiałem w osobnym oknie.
edit
Twoim linku
Go to the top of the page
+Quote Post
Black-Berry
post
Post #11





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


Okazało się, że wszystko jest dobrze. Mam gdzieś błąd przy inkludowaniu zewnętrznej biblioteki. Po usunięciu jej wszystko zaczeł działać poprawnie.


Edit:
Okazuje się, że musi być osobna sesja utworzona specjalknie dla ściągania, żeby nie zablokowac obecnej... Jak w takim razie pobrać zmienne sesyjne (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Nie mam pojęcia.

Edit2:
No i nie uwierzycie w czym był problem.... Nie wiem czy to moze błąd PHP czy luka w moim rozumowaniu ale żeby nie zakleszczyć sesji użytkownika to przed rozpoczęciem wysyłania należy wstawić :

  1. <?php
  2. ?>


Ten post edytował Black-Berry 8.07.2008, 20:50:06
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: 21.12.2025 - 23:38