[Cascavel-pm] Compactar string

Eden Cardim edencardim em gmail.com
Quarta Fevereiro 18 20:30:31 PST 2009


2009/2/2 Agnaldo Macedo <agnaldo em starweb-software.com.br>:
>
> Tenho um script que gera uma string XML (string, não arquivo).
> Tal string é enviada a um servidor web.
> Porém, algumas dessas strings possuem um tamanho maior, gerando trafego.
>
> Existe algum módulo que permite compactar uma string e dar print da nova
> string (compactada) gerada?

Compactação geralmente produz dados em binário, assim os resultados
não são "legíveis" como uma string.

> Alguém já usou o pacote IO::Compress::Gzip.
> Nos exemplos temos:
>
> $string = ...........
> $output = 'saida.gz';
> $z = new IO::Compress::Gzip $output ;
> $z->print($string);
>
> O arquivo saida.gz é gerado. Usando um winzip ele mostra que realmente o
> conteúdo original esta lá.
>
> Será que é possivel fazer esse processo SEM precisar do arquivo de saida? No
> caso, usando apenas a memória?

A documentação do módulo fala que $output pode ser um filehandle.

> Na instrução $z->print($string); não consegui "ver" saida dos dados, no
> caso, no browser, embora tenha o header Accept-Encoding: gzip/deflate no meu
> servidor.
> Tentei gerar o header via script, usando:
> print "Content-type: gzip \n\n"; e print "Content-type: text/xml \n\n";
> Nenhum surtiu efeito, a saida NÃO é mostrada.

Você não está direcionando a saída pro lugar certo, no caso, o socket
de comunicação com o servidor. Passa o filehandle do socket no lugar
do nome de arquivo:

$z = new IO::Compress::Gzip $server_output_socket;
print {$z} $string;

-- 
   Eden Cardim       Need help with your Catalyst or DBIx::Class project?
  Code Monkey                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://edenc.vox.com/            http://www.shadowcat.co.uk/servers/


Mais detalhes sobre a lista de discussão Cascavel-pm