![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 15.06.2005 Ostrzeżenie: (0%) ![]() ![]() |
W skrypcie w pewnym momencie muszę pobrać wiekszą ilość danych z serwera http. Aby usprawnić prace skryptu chcę pobierać z serwera skompresowane dane, wysyłam więc w nagłówku :
Kod Accept-Encoding: gzip W odpowiedzi otrzymuje: Kod Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 25150 Content-Type: text/html Następnie pobieram podaną ilość danych do stringa. Problem zaczyna się, gdy chce dekodowac otrzymane dane, nie radzi z tym sobie funkcja gzuncompress() generując nastepujący błąd: Kod Warning: gzuncompress(): data error in [...]update.php on line 113 Efektów także nie widać gdy czytam za pomoca gzread() bezpośrednio z gniazda (zamiast kodu html pojawiają się losowe znaki). Ktoś zna może jakieś inne rozwiazanie? A może ja gdzieś robię błąd? ;-) |
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Co masz w lini 113?
Wyslij kawalek kodu jak to robisz bedzie latwiej zidentyfikowac blad. -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 15.06.2005 Ostrzeżenie: (0%) ![]() ![]() |
W małym uproszczeniu:
Dodam, ze bez kompresji jest wszystko ok. EDIT: Problem rozwiązany po przejrzeniu RFC ;-) 1: Dane należy pobierac za pomocą stream_get_contents() zamiast fread(), ponieważ ta druga jest "binarnie bezpieczna" 2: Należy "obciąć" nagłówek, w wielkości 10 bajtów * 3: Należy użyć funkcji gzinflate() do zdekodowania danych *może być dluższy, ale to już odsyłam do rfc: http://www.gzip.org/zlib/rfc-gzip.html#file-format Przykładowy poprawny kod:
Ten post edytował pi_r 15.06.2005, 20:50:37 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 80 Pomógł: 0 Dołączył: 25.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
Aktualnie pracuje nad rozpracowaniem tego problemu i niestety zastosowalem sie do rad powyzej, ale i tak coś jest nie tak.
Jak tobie następująco: - pobieram z socketa poprzez fgets (serwer nie ma php5, wiec czym by pobierac w php4?) do zmiennej - dziele zmienna poprzez explode, odliczam sobie dlugosc naglowkow - ucinam naglowki ze zmiennej - przekazuje zmienna do dekompresji I to co mi zwraca troche mnie zadziwia - nie mam bledu o zlych danych przekazanych do skryptu, nie ma tez innych komunikatow, jedn zwraca mi... Cytat XP W którym momencie popełniem błąd ? Pozdrawiam. ------------edit: Cytat When retrieving mod_gzip'ed content and using gzinflate() to decode the data, be sure to strip the first 10 chars from the retrieved content. $dec = gzinflate(substr($enc,10)); tak mowi manual, jednak jak ucinam to 10 znakow, to otrzymuje blad o blednych danych... Ten post edytował dopy 7.07.2006, 10:35:07 -------------------- Błyśnij, nim zgaśniesz...
![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
@pi_r - zmien naglowek Content-Type - to co wysylasz to nie jest HTML
![]() ![]() -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 80 Pomógł: 0 Dołączył: 25.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
Egh męcze się z tym juz 3 dzień - czuje że robie jakiś głupi błąd... Może ktoś jednak wie co robie źle ?
+ edit: No nie wierze ze jest to problem nie do rozwiązania :/ Napisałem nawet na 3 zagranicznych forach i wszędzie w moim temacie cisza... + rozwiązanie Po naprawde ciężkich poszukiwaniach, przypadkiem trafiłem na grupy dyskusyjne google, czytając natrafiłem na rozwiązanie:
W zasadzie pewnie chodzi tutaj głównie o sposób rozdzielenia od nagłówków, ale ważne że działa. To tak dla przyszłych pokoleń. Pozdrawiam. Ten post edytował dopy 8.07.2006, 23:59:24 -------------------- Błyśnij, nim zgaśniesz...
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.06.2025 - 21:13 |