![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 29.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Problem dotyczy błędnego pobierania plików za pomocą skryptu php tak więc nie chcesz czytać, irytuje Cię to - nie czytaj. Napisałem skrypt, dzięki któremu pobieram pliki z serwera niejawnie. Czyli uruchamiam funkcję podając jej pewne argumenty, dzięki którym wyszukuję właściwy plik i wysyłam plik użytkownikowi do pobrania bla bla bla. Wałkowane od lat ale jakoś musiałem zacząć Otóż, wszystko pięknie ładnie ale... w przypadku pobierania plików większych występuje błąd pobierania - pobiera mi plik o wielkości 195B mimo, że plik zajmuje 31MB - wydaje mnie się, że jest to jakiś nagłówek przekierowania czy coś takiego. Z plikami o wielkości do 16MB (tylko do 16 sprawdzałem) nie ma żadnego problemu. Klikam, pobieram, otwieram cyk działa. Z grubsza skrypt wygląda tak:
sam proces pobierania sprawdziłem... i za pomocą funkcji FILEREAD() i za pomocą FREAD()
W przypadku rozwiązania A i B plik 31MB nie jest pobierany (tylko 195B otrzymuje użytkownik). Rozwiązanie C i D rozbiłem celowo dla przedstawienia różnicy zastosowania funkcji usleep(x). Rozwiązanie C nie daje efektu pozytywnego. Dopiero rozwiązanie D może satysfakcjonować ale częściowo. Plik pobierany jest w przeglądarkach IE oraz OPERA - w przypadku FIREFOXA nie ma efektu. Skrypt, który przedstawiłem został mocno okrojony w celu przedstawienia problemu i jest on efektem paru dni googlowania i przeglądania forum. Wiem, że problem poruszany już był masę razy, ale cóż... jeszcze nie znalazłem rozwiązania właściwego. Chciałbym usłyszeć wasze solucje, złote myśli, Dawid. wolna myśl... a może to problem po stronie serwera, może to jakieś ograniczenie, które powoduje obcięcie bufora czytanego pliku . Serwer na superhost.pl. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
testujesz na localhoscie?
jeżeli nie to może na twoim servie jest limit wyczerpany albo coś ![]() jak możesz to przetestuj na localu -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 29.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Tak, jasne. Zanim cokolwiek wrzucam na serwer robię na localu. Tutaj używam Krasnala. To jednak nie może być odniesienie do problemu gdyż już nie raz się przekonałem, że to co działa na serwerze na windowsie nie zawsze ma przełożenie na linucha przez chociażby inny interpreter plików lub konfigurację php.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Zobacz co zawiera ten pobrany plik z 100Bajtami, bycmoze komunikat bledu.
-------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
i daj na początek skryptu error_reporting(E_ALL); i zobacz czy pokaże jakieś błędy
-------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 29.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Ściągnięty plik zawiera następującą treść błędu:
Zrobiłem więc taki motyw. Jak już pisałem, zarówno IE jak i Opera ściągały plik prawidłowo (rozwiązanie D) a Firefox robił problem. Więc idąc tym tropem usunąłem wszystkie dane prywatne "Narzędzia -> Wyczyść dane prywatne". Po tej czynności uruchomiłem skrypt ponownie i ku mojemu zdziwieniu plik został ściągnięty prawidłowo. Wróciłem zatem do rozwiązania A i użyłem funkcji readfile(); Uruchomiłem skrypt, który ponownie ściągnął mi błędne dane. Zmieniłem z powrotem w skrypcie odpowiednie linie na rozwiązanie D po czym puściłem skrypt ponownie i znów Firefox błędnie ściągnął plik z powyższym komunikatem. Zatem po raz kolejny użyłem czyszczenia danych prywatnych po czym puściłem skrypt raz jeszcze z rozwiązaniem D i.... ściągnął prawidłowo. EDIT: Dodając jeszcze 2 słowa na zakończenie, jak się okazuje Rozwiązanie D jest prawidłowe i ściąga pliki niezależnie od ich wielkości. Powodem, dla którego download plików za pomocą Firefoxa był błędny jest jego specyfikacja. W przypadku ściągania po raz kolejny tego samego pliku za pomocą tego samego skryptu firefox w pierwszej kolejności szuka pliku i skryptu w katalogu danych tymczasowych. Pzdr. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 11:49 |