Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Decomprimere stringa

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    8

    Decomprimere stringa

    Salve a tutti,

    Sto lavorando un po' con i socket in PHP e dopo che ho fatto il mio bel GET ricevo dal server una pagina con un po' di header e del testo che compresso con gzip.

    il codice che ho realizzato io questo:

    Codice PHP:
    <?php
     
    $socket 
    fsockopen (""80);
    fwrite ($socket"GET HTTP/1.1\r\n");
    fwrite ($socket"Host: \r\n");
    fwrite ($socket"User-Agent:\r\n");
    fwrite ($socket"X-Apple-Store-Front: 143441-1\r\n");
    [
    altri header]
    fwrite ($socket"Connection: Keep-Alive\r\n\r\n"); // da notare il doppio a capo
     
     
    while (!feof ($socket)) {
    $part fgets ($socket255);
    print 
    $part ;
    }
     
    fclose ($socket);
    ?>
    e il testo che ottengo io questo:

    HTTP/1.1 200 OK Content-Type: text/xml x-apple-application-site: CUP X-Apple-Partner: origin.0 Vary: X-Apple-Store-Front Vary: Accept-Encoding x-webobjects-loadaverage: 0 x-apple-application-instance: 1101 x-apple-date-generated: Sun, 14 Mar 2010 21:45:22 GMT x-apple-request-store-front: 143441-1 x-apple-max-age: 3600 x-apple-asset-version: 70761 Content-Encoding: gzip Cache-Control: max-age=310 Date: Sun, 14 Mar 2010 21:51:55 GMT Content-Length: 8336 Connection: keep-alive

    =w>‡ٝM0[HO&i3_z '4W_-#I;6/4}ceK,יu՞ҕ c,f/N])cuW>s׈V %Ԇ̺0< w%[*C-Ʋjw>0Br7RiO+ ]õgm!ۛia~5XJ:JOx*?QO ^ w |zh6OG>˘Q|[M F (L@# ˿߄{.:>|e G'~UlkP `n@w2o -~6ZnTmh|x7 k]3.z2&+Ԫ1\0oWM₏,[4 TLONAiQwl%xнYZC? yC},}d,HDTnA%M& OB+h>co>]su,[5NK"=@s{7 [3N"I\O^;q .ӂҍ熶XЁ"_ϟ Q2~D~~aKE'#s$%"] ZqvkX[~@'3 _G$v> v-bY:f胖Щۖ; r lNN[&m\qs}RJr2}m<}}d"^P5t` [|,]]|tK!?3a"%Ӧ)B#[ E^a<Qp$ p)3`ZPHC<'WLCw`e /E_2MF`ưNYՑ]Di,]?Y5ќ7=ETҷl Yj*!xlfrOb7 o1:QDŰYX/Dn u]W ]>^7adZ{ vk7ޒ̎tt}4WDR :#!nөEn1 P.u,MO§}ڊ"Bgs"#!Af͙IE-88 g=w9baxSTOW4]WGԅІv 9 7d8ÝrMmҷ%)[ܹk׽o!u  S HeHߚgBh+P!>Bhp :MwQt1 auڮ$unm@~{j[qCK6`ѰnOT"2Zm ZcE/pƆ ہv+#{ [[V5,`KIi Lp [<&s+%l+leu+ p% 5j [ s!+ c XD\zAkІ أ`2S#m8ʧFwHP,>c⦓e6RlY+V +B ԾP羇) fBLx"D>y+~ "6߻'8Ov'Z!R \WEqZ"㕋=}Ne`Qd@ $lS+ D? pD~'S:J$O[3[BzX:.W,oZѩ6eἝ̡?: `lis1 bQ- Ֆ.,Ćc}軻I[eȕF*HK^f!DDG,mT^UFQ"XPIfW$wu( @ MRlNB"8 WE#2 7sa[+hHHơk~lkxp&͍tf"?-i'B+gE[eԑ~ 3fʷ=]EǶs - e%-Tj:?۬u<Ir-'"v;>@Zt'b2Ͻ-kiR6k=P|s-tN2!&VnЧ@Z Wʦl@0&Ek} `F: Ed @@B-8GPP HXK fQ0 9$"l2lk0bK<ƁI[@ x:̑ ]yzqjgk8'w붅QJ$St[U@1Ŷ`o!0K.p@UvM4aŰOf1= os= ڬ;LV+fe/Iq{o aS!|<2Jxי+.5,Ehܫu0x qxq~ͼҰ&mwF7+\W7]l;qc!ѡAwr.LȃvU }O?9t3 j34m|)7d!T@>Pw.fG#"x k1G|#::|ĿGh£9"<tĬѕk}d 'o'q['_ng[o Ɏ !CJiӉ rNLDp;F[T f ?ą)ca΍ J?ûT˱8I'N!w ІE=/[/Me#V|8_+Rq$ <<vcIH&0JVx إB 6&G^b4BD;9rqO? U107K>GAu8=?acQ";_0f]7d qGL&Mo ߵ]ϸY5x| & ǰ#J B}JtembÎb|? ? >wsG+w.]p-tE+S4/61^]}7A({Q";B{JOJ">ͺI.T{aşi 1ъtL0HLxl*ca[ QoJ<29t@˼{y'ZunCf }B ;v60o4D ܈Q")G GQ X EB0uf3ޓR\י4 6,%ň+n)HYiz|[.g= )B ҝA{DYs`([+lw=ɰ9 H rᣃaeGHc)4K6qn- 7D  $CT;PtJ.0%j:PBAD ZL+ڃc)>:ؕ%l|Kɽb_t-#lP ?FL]XXR?{r XST˹wEV4]|t^CeŐW?BFOY !͍'MXQlg4?O17KjpApº8]\3j0&3G0T13)j@(KQ D r=@ͨHrCyHe] THu6#Ӗ6cMyp:?77ݐh0"*n٤n )yĵ}$Nķ\L|-8)0pgՔa3iĴ0)3;fT Ѱ:tϣ'tw0(߯ >eٿK I&ks3aܗ;´h6 mg߄~<'8s`+ێ̼"ܺW&mƢaA r Zed_ej|tj;pȨ&hHK;#XP_*pf&P! 0X[祒4> tq<T)^?dPP(y(<J %B|wbI`_fxŗ_!s]GL#m)_={}зӾ) XT#D"(39oYwTCaA½?>r@;Ryز| m8t(<r 9ǡsMީBC!硐Py(<r 9BC!硐Py(<r>!F[#B\T}:3 X:HO <dnYgm q_,Iɖ Zz!j8Ki9peeSGATG|dՉ e>k UNh4E3x04UXO4E)6cѤOreC1 ucCq'Ε߽b>#?Łқ%B 8"&>|jD N -Cei kO{O!KxA&N)' %Ru<@;n^Xʳ&dm;$=P{ #4P2:V 6%oL.`@2m?niU57ώ! `G RYA;&ͤ ք^#. {/.[/oE} Tg >|-mYUM V#"rXXߎ d@]s d'w/)UHI|]O%7y{:NtmKȷEY*A ;rOZ]p1]'~-27KW nHZ "2[ "r{%=ksM!ݓԯՏ8G^aS` |LcC_eu 'fѲp hg_PdzWе W3Jϸ|L8.dr/,%FEqgmN]K4 c_AQ(bg/'~W@$f$;•= "~E$p >􃝬Sj"aEÊ<1y^Ċ
    Come vedete la prima parte non compressa mentre la seconda parte si.. come faccio a far si che la seconda parte venga decompressa?
    Io ho provato a fare come segue, senza successo

    Codice PHP:
    while (!feof ($socket)) {
    $part fgets ($socket);
    $decompr gzuncompress($part);
    print 
    $decompr;


    grazie mille a tutti per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    gzuncompress ti decomprime una stringa formato zlib. Tu invece hai una stringa nel formato:
    Content-Encoding: gzip


    ti serve la funzione gzdecode, che pero' php implementa solo dalla versione 6. Ma trovi diverse funzioni in giro, anche nei commenti nel manuale sulla apgina di questa funzione, o della gzencode.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    8
    Ho provato una cosa del genere ma non va... uff ci sto perdendo la testa con sta compressione XD

    Codice PHP:
    if (!function_exists('el_zip_gzDecode')) {
        function 
    el_zip_gzDecode ($data, &$filename null, &$comment null) {
            
    $gzMagic sprintf("%X%X",ord(substr($data11)),ord(substr($data01)));
            if(
    $gzMagic != "8B1F"){
                
    $unpacked = @gzinflate($data);
                return 
    $unpacked;
            }
            
    $flags ord(substr($data31));
            
    $headerlen 10;
            if (
    $flags 4) {
                
    $extralen unpack('v' ,substr($data102));
                
    $extralen $extralen[1];
                
    $headerlen += $extralen;
            }
            if (
    $flags 8){ // Filename
                
    $new_headerlen strpos($datachr(0), $headerlen) + 1;
                
    $gzfname substr($data$headerlen$new_headerlen $headerlen 1);
                
    $headerlen $new_headerlen;
                if(isset(
    $filename)) $filename $gzfname;
            }
            if (
    $flags 16){ // Comment
                
    $new_headerlen strpos($datachr(0), $headerlen) + 1;
                
    $gzcomment substr($data$headerlen$new_headerlen $headerlen 1);
                
    $headerlen $new_headerlen;
                if(isset(
    $comment)) $comment $gzcomment;
            }
            if (
    $flags 2// CRC at end of header
                
    $headerlen += 2;
            
    $old_size strlen($data);
            
    $new_size $old_size $headerlen 8;
            
    $packed substr($data$headerlen$new_size);
            
    $unpacked gzinflate($packed);
            return 
    $unpacked;
        }
    }

    while (!
    feof ($socket)) {
    $part .= fgets ($socket);

    }
    $a el_zip_gzDecode($part);
    echo 
    $a

  4. #4
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    per forza, devi decomprimere non tutta la risposta, ma solo il corpo. Quindi separa i header dal corpo della risposta, e decomprimi solo quest'ultimo.

    Hint: i header sono divisi dal corpo con due crlf, quindi ti basta fare un explode su tutta la risposta, con il separatore \r\n\r\n e con il limite 2, e leggere il secondo elemento dell'array: che e' il corpo da decomprimere

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    8
    Mi sembra di risolvere un problema ed ecco che se ne crea un altro...

    Mi sono appena reso conto che sembra che la pagina vada in loop!! infatti dopo aver scritto a video quel codice incomprensibile che dovrebbe essere XML compresso la pagina non esegue nessun altro comando!!
    E inoltre il browser continua a caricare la pagina senza fermarsi...

    A cosa potrebbe essere dovuto?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.