Newsgroup: it.comp.www.php
Titolo: scaricare zip via php

Ciao a tutti,
ho protetto una directory inserendovi un file .htaccess
il cui contenuto è questo:
<Files ~ ".+">
Order allow,deny
Deny from all
Satisfy All
</Files>
fin qui tutto bene, i file.zip non si raggiungono con
l'url diretto: l'accesso viene negato. 
Ora sto rimuginando su come far agire il php affinché 
quei file, in un modo o in un altro, si possano scaricare.
Mi rivolgo a voi perché non ho grandi idee; stavo pensando 
di creare al volo una directory temporanea, copiarci il/i
file.zip, lasciare che l'utente effettui il download, infine
cancellare file e directory. 
Le perplessità sono due: 
1) temo sia una contorsione inutile (magari c'è un sistema
semplice che adesso mi sfugge)
2) non saprei come rilevare il "download terminato" per 
poter cancellare la directory.
Avete una dritta da darmi? Grazie
Mario
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

quei file, in un modo o in un altro, si possano scaricare.
<?php
	// Questo file si chiama download.php
	$file = basename($_REQUEST['zip']);
	// Tutti controlli, per es.
	if (!is_readable("./$file"))
	{
		Header("HTTP/1.0 404 Not Found");
		die("ZIP file $file was, like, not found.");
	}
	// User, password, ora del giorno...
	$ok = true;
	if (!$ok)
	{
		Header("HTTP/1.0 403 Forbidden");
		die("You can not, like, download $file.");
	}
	// Questo non è il mimetype giusto, ochei?
	Header('Content-Type: application/x-octet-stream');
	Header("Content-Disposition: attachment; filename=\"$file\"");
	Header('Content-Length: ' . filesize($file));
	readfile($file);
?>
Leonardo
-- 
Enough, enough!  But, stranger, ere we part,
Glancing farewell to each nefarious bier,
This warning would I beg you take to heart:
There is an end to e'en the worst career!

 	Header('Content-Type: application/x-octet-stream');
Premesso che la sezione Header del php devo metterla meglio
a fuoco, non ho capito la tua domanda "Questo non � il mimetype
giusto, ochei?".
Per il resto... che dire, di nuovo grazie,


giusto, ochei?".
Eh... casino da raccontà.
Il mimetype giusto sarebbe "application/zip". Questo ti fa vedere - se hai
il browser giusto - l'iconcina dello zip durante il download. E, su alcuni
OS (tipo, Mac OS X), e' anche l'unico sistema sicuro per avere un file che
poi ti si apra come zip cliccandoci, anziché far partire il CD burner o un
lettore multimediale.
Pero' molti browser ricevendo application/zip capiscono troppe cose, e c'è
il caso che decidano di *VISUALIZZARE* lo zip anziché downloadarlo. Se uno
si trova in questa situazione, è vittima: lo zip non lo scaricherà mai, se
non si ricorda l'esoterica hotkey che dice al browser "Ma i razzi tuoi, te
li fai mai, eh?" (di solito è shift ctrl click, ma non ci giurerei).
La soluzione da sciùri è aggiungere un parametro all'URL:
	zip=pippo.zip&mime=open  oppure ...&mime=download
e poi nello script
	$mime = 'x-octet-stream';
	if (isset($_REQUEST['mime']))
		if ('open' == $_REQUEST['mime'])
			$mime = 'zip';
	Header("Content-Type: application/$mime");
e poi mettere DUE link, "Apri Zip" e "Scarica Zip" (anche se in moltissimi
browser e con gli utenti più scafati non farà alcuna differenza).
Ma siccome io prediligo le soluzioni sporchevoli e l'idea di aprire lo zip
in automatico mi fa venire le bolle, allora uso SEMPRE x-octet-stream.
Pero' ti avvertivo, nel caso ti domandassi "O perché x-octet-stream se zip
ha mime appunto 'zip'?".


 li fai mai, eh?" (di solito è shift ctrl click, ma non ci giurerei).
Se metti
header("Content-Disposition: attachment; filename=\"$file_name\"");
comandi il browser a proporre all'utente la dialog box di salvataggio.
Altrimenti il browser per default implementa "inline" e tenta di visualizzare
il documento, ma se non ci riesce propone di salvarlo come al punto di prima.
Dovrebbe funzionare così con tutti i browser. Almeno, con quelli seri.
Ciao,
 ___ 
/_|_\  Umberto Salsi
\/_\/  
www.icosaedro.it

Dovrebbe funzionare così con tutti i browser. Almeno, con quelli seri.
<sospiro>
Leonardo che ha visto cose che voi umani...


 Eh... casino da raccontà.
Ma l'hai raccontato bene, grazie :)
