ciao a tutti,
mettiamo che ho una scheda prodotto con tutti i dati, una descrizione e le relative foto.
Io vorrei far in modo di dare all'utente la possibilità con un'unico link di fargliele scaricare tutte sul suo desktop, come posso fare?
ciao a tutti,
mettiamo che ho una scheda prodotto con tutti i dati, una descrizione e le relative foto.
Io vorrei far in modo di dare all'utente la possibilità con un'unico link di fargliele scaricare tutte sul suo desktop, come posso fare?
Niente di troppo complesso.
Presupponendo che tu conosci l'indirizzo fisico delle imamgini sul server... in php usi la classe Zip per creare un archivio vuoto (quello che segue è un esempio preso da php.net)
Dove vedi i richiami ad addFile ci aggiungi il percorso delle immagini su disco sul server.Codice PHP:
$percorso_file="scrivi_qui_il_percorso_del_file";
$zip = new ZipArchive();
$filename = $percorso_file;
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
exit("cannot open <$filename>\n");
}
$zip->addFile($thisdir . "/too.php","/testfromfile.php");
$zip->close();
Un volta creato e chiuso il file zip, ti basta mandare gli header per farlo scaricare (attenzione non devi aver fatto nessuna echo prima o mandato a video parti di html), con un codice simil e a questo
Codice PHP:
header("Content-type: Application/octet-stream");
header("Content-Disposition: attachment; filename=immagini_zippate);
header("Content-Description: Download PHP");
readfile($percorso_file);
Gabriele
Fantastico, grazie!
Quindi me le zippa anche![]()
domani ci provo ad implementare il tuo codice nel mio sito.
L'unico dubbio nella riga dove mi dici di mettere il percorso delle immagini:
così potrebbe andar bene?Codice PHP:
$zip->addFile($thisdir . "/too.php","/testfromfile.php");
Codice PHP:
$percorso_file="../image_auto"; $zip = new ZipArchive();
$filename = $percorso_file;
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
exit("cannot open <$filename>\n"); }
$zip->addFile($thisdir . "../image_auto","QUI CHE CI VA??????");
$zip->close();
Allora, qui
il secondo parametro "qui che ci va" è il nome che deve avere il file dentro al file zip. E' facoltativo, puoi anche non specificarlo.Codice PHP:
$zip->addFile($thisdir . "../image_auto","QUI CHE CI VA??????");
PEr quanto riguarda il tuo codice...se quel $percorso_file="../image_auto" è una cartella non sono sicuro che te li zippi tutti insieme, dovresti provare. So che c'è anche il metodo $zip->addEmptyDir con cui creare una cartella vuota nello zip per poi inserirci i files.
Aggiungo un appunto: se non ti funziona ziparchive fai attenzione perche si tratta di una estensione che va abilitata (spesso lo è gia di default). Trovi una interessante e breve guida qui.
Gabriele
Allora mi sa che non ho capito bene.
Il tuo codice serve per zippare una immagine e non più di una come dicevo ad inizio topic?
Altra cosa
Codice PHP:
$zip->addFile($thisdir . "../image_auto","QUI ALLORA CI VA IL NOME DEL FILE, ES: AUTO.JPG");
Nono stai facendo un po di confsione
Dunque il codice che ti ho proposto lo puoi usare per zippare 1 o 1000 files.
Il metodo
lo usi per aggiungere 1 file allo zip. Quindi una immagine. Ovviamente lo puoi usare anche 100 volte di fila, oppure scorrere una cartella con un ciclo e inserirci tutti i files imamgine che ci trovi dentro.Codice PHP:
$zip->addFile($thisdir . "../image_auto","QUI CHE CI VA??????");
Da questo codice qui che tu hai riportato:
mi viene da pensare che questo "image_auto" vada sostituito con il reale nome del file. Se ne vuoi inserire piu di uno dovrai ripetere addFile piu volte, per esempio:Codice PHP:
$percorso_file="../image_auto"; $zip = new ZipArchive();
$filename = $percorso_file;
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
exit("cannot open <$filename>\n"); }
$zip->addFile($thisdir . "../image_auto","QUI CHE CI VA??????");
$zip->close();
il "qui che ci va" lascialo perdere, è un parametro facoltativo che a te non serve.Codice PHP:
$zip = new ZipArchive();
$filename = $percorso_file;
if ($zip->open("file.zip", ZIPARCHIVE::CREATE)!==TRUE) {
exit("cannot open <$filename>\n"); }
$zip->addFile("cartella_immagini/immagine1.jpg");
$zip->addFile("cartella_immagini/immagine2.jpg");
$zip->addFile("cartella_immagini/immagine3.jpg");
$zip->addFile("cartella_immagini/immagine4.jpg");
//e via dicendo...
$zip->close();
Gabriele
Ok, domani ci provo, grazie ancora della tua disponibilità.![]()
Ho potuto riprendere solo oggi a lavorare sul tuo script, queste sono le modifiche apportate.
Che ne dici va bene? Prima di pubblicarlo e fare casini mi piacerebbe avere un parere.
Codice PHP:
$sql = "SELECT b_photousato.*
FROM b_photousato
WHERE b_photousato.id_usato = '".$id."'";
$result = mysql_query($sql,$conn) or die (mysql_error());
$row_record = mysql_num_rows($result);
if ($row_record>0){
$zip = new ZipArchive();
$name = "test.zip";
if ($zip->open($name, ZIPARCHIVE::CREATE) !== true) {
print("Impossibile creare l'archivio!");
}
while($row=mysql_fetch_array($result)){
$foto = $row['foto'];
$directory = "../images_photousato/";
$zip->addFile($directory.$foto);
}
$zip->close();
header("Content-type: Application/octet-stream");
header("Content-Disposition: attachment; filename=immagini_zippate");
header("Content-Description: Download PHP");
}
else{
}
Ero troppo curioso di vedere cosa succedeva e l'ho pubblicato lo stesso.
Mi da questo errore:
Fatal error: Class 'ZipArchive' not found in /web/htdocs/www.sito.com/home/pann_contr_comune/include_admin_query_ins_usato.php on line 952
alla riga 952 ho questo codice:
$zip = new ZipArchive();
quale problema potrebbe essere?
up