Newsgroup: it.comp.www.php
Titolo: Re: Zippare dati "on the fly" ...

 Idee ? grazie ;)
 
Crei il file CSV e poi utilizzi una libreria per comprimerlo: 
http://www.phpconcept.net/pclzip/
 
 
Ciao.
 
-- 
Pubblicita' regresso: 
http://www.ferrero.org
 
** Per scrivermi in mail, sostituire nutella con ferrero...
** To contact me by email, change nutella to ferrero...
 

 contemporaneamente  A) e B) ;)
 
 
usa un ramdisk :)
 


Premesso che B detta così non vuol dire molto, puoi sfruttar la 
compressione gz del contenuto a livello di webserver
Se il client la supporta viene mandato uno stream compresso gz che il 
client si decomprime in modo trasparente
In questo modo non ti appoggi al filesystem del server
http://httpd.apache.org/docs/2.2/mod/mod_deflate.html
 
 
-- 
I fatti mi cosano

 La tabella può essere 10 volte la ram disponibile ;)
 
 
appunto, hai un limite a priori proprio dato dalla dim del ram disk ;)

contemporaneamente  A) e B) ;)
 
Violando la C) che ti sei dimenticato di mettere <evil grin>:
 
	$name = 'output.csv';
 
	if (false === ($fp = fopen('php://output', 'wb'))) {
		trigger_error("Ahi", E_USER_ERROR);
	}
	Header('Content-Type: application/x-gzip');
	Header("Content-Disposition: attachment; filename=\"$name.gz\"");
	fwrite($fp, "\x1F\x8B\x08\x08".pack('V', time())."\0\xFF", 10);
	fwrite($fp, $name."\0", 1+strlen($name));
	$deflate = stream_filter_append($fp, 'zlib.deflate',
		STREAM_FILTER_WRITE, -1);
	$hctx = hash_init('crc32b');
	$len = 0;	
 
	$exec = SQLQuery(...);
	while($tuple = SQLTuple($exec)) {
		$csv = CSVformat($tuple);
        	hash_update($hctx, $csv);
        	$len += strlen($csv);
        	fwrite($fp, $csv);
        }
	stream_filter_remove($deflate);
	$crc = hash_final($hctx, true);
	fwrite($fp, $crc[3].$crc[2].$crc[1].$crc[0], 4);
	fwrite($fp, pack("V", $len), 4);
	fclose($fp);
 
Garantisco solo che, a me, funziona...
 
OpenSuSE 12.3 x86_64 "Dartmouth"
Linux 3.7.10-1.16-default #1 SMP Fri May 31 20:21:23 UTC 2013 (97c14ba) x86_64
Apache/2.2.22 (Linux/SUSE)
PHP 5.3.17/Suhosin v0.9.33
 
Leonardo
 
-- 
 
Then felt I like some watcher of the skies, when a new planet swims into his ken;
Or like stout Cortez when with eagle eyes, he star'd at the Pacific; and all his men
Look'd at each other with a wild surmise - silent, upon a peak in Darien.

 Violando la C) che ti sei dimenticato di mettere <evil grin>:
 
Chapeau!
 
-- 
Jax


Molto interessante, anche se dipende dalle flag di compilazione della 
singola installazione di php
Con gli stream su php in effetti non c'ho mai lavorato
Una domanda però, dove sono documentati gli stream_filters?
Se faccio
 
$streamlist = stream_get_filters();
print_r($streamlist);
 
Mi viene fuori
Array
(
     [0] => zlib.*
     [1] => bzip2.*
     [2] => convert.iconv.*
     [3] => mcrypt.*
     [4] => mdecrypt.*
....
)
 
per sapere che devo richiamare zlib.deflate e non bzip2.ballaLaTaranta 
dove guardo?


Una domanda però, dove sono documentati gli stream_filters?
 
Da poche parti :-(
 
http://php.net/manual/en/filters.compression.php
 
 
In effetti si potrebbe usare pure bzip2.compress...



Thx, avevo cercato un po', ma quella pagina di appendice non l'avevo vista
Rimane da capire altri filtri come convert.iconv come vadano usati
Poi mi guardo il sorgente


mb_strlen($string, '8bit');
 
Giusto. Ma del resto, usare caratteri i18n nei nomi dei file vuol dire,
storicamente, andarsi a cercare le rogne con il lanternino :-)
 
Comunque, osservazione acuta e interessante... mi domando quanto codice
vulnerabile c'e' a giro, anzi ;-)


problemi di encoding sono rognosi e li odio. ;) ;)
 
So, so :-(
