Newsgroup: it.comp.www.php
Titolo: zippato al volo?

o meglio GZIPPATO al volo?
esiste un modo per creare un file ZIP ed inviarlo senza doverlo scrivere sul
server? oppure scritto in un file temporaneo, poi rileggerlo e mandarlo?
non e' finito:
mi spiego:
devo leggere da 0 a 6 immagini da un DB, zipparle assieme ad un file PDF
residente su disco..
che faccio?
mi salvo il tutto in file temporanei e poi comprimo (e come comprimere il
contenuto di tutta una cartella ?) ?
mi sparo e faccio a mano i file ZIP e upload degli stessi (ogni volta che
cambia un immagine rifaccio lo ZIP?)?
il serve e' UNIX il DB e' MySQL
grazie a chi mi aiuta
--
dnfnva
Debra & Fabrizio
in Virginia



cambia un immagine rifaccio lo ZIP?)?
Calcola il costo. Nel caso, esiste l'opzione "-u" :-)
Leonardo man zip
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.

:: <?
:: // FILELIST not defined :-)
:: Header('Content-Type: application/zip');
:: $LEVEL=9; // Maximum
:: $fp = popen("zip - -$LEVEL $FILELIST", 'r');
:: fpassthru($fp);
:: Nel caso, esiste l'opzione "-u" :-)
Dove posso trovare ulteriori info al riguardo? Un qualcosina di spiegato per
benino...

:



Uhmmm. Sul manuale di PHP per quanto riguarda popen e fpassthru; zip e' un
programma Linux, quindi "man zip" oppure "info zip".
Se no provo a commentare il programma:
<?
	// Informiamo il browser che sta per ricevere un file Zip
	// (non sono sicuro del MIME type, tra l'altro)
	Header('Content-Type: application/zip');
	// Il programma "zip" dispone di una compressione, che va
	// da 1 (rapido) a 9 (lento, massima compressione)
	$LEVEL=9;
	// Apro una pipe, per vedere l'output di un programma che
	// gira in locale come se fosse un file. Chiaramente, non
	// ci posso scrivere, posso solo leggere.
	// "-" dice a zip che il file zip va stampato in output e
	// cioe' dove popen se lo puo' prendere; $FILELIST e' una
	// lista di file da zippare, es "foo.txt bar.txt baz.pdf"
	$fp = popen("zip - -$LEVEL $FILELIST", 'r');
	// Poi passo questo "file virtuale" a fpassthru che serve
	// a svuotare un file sul browser client. In questo caso,
	// quindi, gli invia tutto l'output, cioe' un file ZIP.
	fpassthru($fp);
	// Non serve dare fclose($fp):
	// "zip" termina
	// -> allora popen segnala "EOF", end of file
	// -> allora fpassthru ritorna al chiamante (PHP)
	// -> PHP finisce perche' qui lo script e' finito
	// -> Apache chiude il modulo PHP su questo script
	// -> la handle transitoria assegnata da Apache a PHP, su
	//    richiesta di popen, per conto di zip, e' chiusa dal
	//    garbage collector di Apache.
?>
Leonardo


 Leonardo man zip
ho trovato un ssitema piu' veloce.. utilizzando la libreria di phpMyAdmin,
mi creo il file ZIP senza dover salvare sul disco il file zip o le immagini
che sono dentro il DB (perche' se non erro, con il tuo sistema devo salvare
su disco le immagini in file temporaneo, e poi zippare i files!?!?!)
grazie cmq
Fabry

su disco le immagini in file temporaneo, e poi zippare i files!?!?!)
Erri :-)
Del resto m'avevi detto "senza salvare su disco lo Zip", e questo fa lo
script. Rizippa ogni volta tutto daccapo.
Solo nel caso che tu NON voglia rifare sempre tutto daccapo, puoi usare
sempre l'utility "zip", pero' con l'opzione "-u" - allora si' che salvi
lo Zip sul disco, e ti limiti a tenerlo aggiornato.
Se le richieste sono molte, c'e' da pensare alla seconda possibilita'.
Se sono poche e il carico e' accettabile, va bene la prima.
Leonardo



mi sa che mi son spiegato male..
i file da zippare sono immagini contenute nel DB, so che il comando che hai
dato te non salva (oltretutto mi hai anche dato il comando header, anche se
il content-type deve essere x-zip e non zip ;-) )
ma quello che NON voglio fare, e' salvare le immagini dal DB al server, ma
mantenerle in "memoria" e zipparle...
credo che la funzione ZIP non accetti variabili di PHP come files :-) o
erro?
grazie
Fabry

erro?
La funzione ZIP ne accetta uno solo per volta e cosi' anche la gzip. Ma
per fortuna il formato tar e' abbastanza lineare.
Uhm, e scusami: t'eri spiegato benissimo, a rileggere. E' che io dovevo
essere un po' fuso :-(
Leonardo