Page 1 sur 1
Multi download
Posté : 11 août 2011, 11:51
par clems31
Bonjour,
J'explique mon problème :
Sur une premiere page, je selectionne un produit puis plusieurs langues que je veux voir apparaitre dans un fichier .text par langue
Dans une base de données, je recupere la liste de texte classé par langue puis je fais telecharger un fichier de cette facon :
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$data2['nom_langue'].'.text";');
Le problème est que peu importe si je met une condition pour que le DL se lance à chaque fois que le code rencontre un nouveau 'nom_langue', il telecharge toujours un unique fichier, avec, à l'interieur tous les textes des langues préalablement choisi...
Mon but est de télécharger dans chaque fichier les textes du produit dans une seule langue, et, idéalement de faire un .zip qui regroupe les multiples fichiers .text...
Merci d'avance de votre collaboration.
Re: Multi download
Posté : 11 août 2011, 14:52
par Mazarini
Re: Multi download
Posté : 11 août 2011, 15:15
par clems29
Merci mais j'avoue que ce n'est pas particulierement la partie qui m'interesse le plus

Re: Multi download
Posté : 11 août 2011, 15:20
par Mazarini
Merci mais j'avoue que ce n'est pas particulierement la partie qui m'interesse le plus

Je partage ton avis
Re: Multi download
Posté : 11 août 2011, 16:16
par clems29
Je vais rajouter des infos..
J'ai fais une boucle while, tant que une variable lambda < sizeof($id_langue) (qui est un array avec les id des langues sélectionnées)
Dans cette même boucle, je fais ma création de fichier (et son implémentation)
je ferme ma boucle en implémentant d.
Le fichier que je récupère a pris l'id de la dernière langue uniquement, comme si la création du fichier attendait la toute fin...
Pourtant à l'interieur, je récupere bien les données de chaque langue..
Re: Multi download
Posté : 16 août 2011, 10:23
par clems29
Personne n'a d'idée ?

Re: Multi download
Posté : 16 août 2011, 11:24
par popy
Soit tu utilise le transfer-enconding chunked pour faire de l'html multipart (mais pas sûr que tous les navigateurs se comportent pareil), soit tu peux faire une page de download intermédiaire, qui affiche les différents liens vers les downloads (fonctionnement sans javascript) avec un peu de javascript qui fait un window.open ou un document.location pour chacun de ces liens.
Re: Multi download
Posté : 16 août 2011, 11:56
par Yosh
Tu devrais t'orienter vers les archives zip.
L'utilisateur sélectionne les langues, clic sur un bouton télécharger et toi tu t'occupe de générer une archive zip que tu envoie au navigateur.
Cela ne te paraitrait-il pas plus propre?
Re: Multi download
Posté : 16 août 2011, 12:12
par clems29
Un fichier zip comprenant les différents .text serait parfait, mais je n'arrive pas à trouver comment je peux créer un .zip avec mes fichiers dedans sans les créer un par un (ce qui, justement, pose probleme...)
En attendant une réponse, je vais essayer de me renseigner sur le Chunked transfer encoding.
Re: Multi download
Posté : 16 août 2011, 14:30
par moogli
Re: Multi download
Posté : 16 août 2011, 18:07
par clems29
Merci
Cependant, je dois rater quelque chose :
$zip = new ZipArchive;
$d=0;
while ($d<sizeof($id_langue))
{
$filename = "test.zip";
$res = $zip->open($filename, ZipArchive::CREATE);
DATA SQL
$zip->addFromString('"'.$id_lange[$d].'".text',"'.$output_text.'");
$d++;
}
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header("Content-length: " . filesize($filename));
$zip->close();
Je telecharge une archive test.zip corrompue...
Une idée ?
Re: Multi download
Posté : 16 août 2011, 23:15
par moogli
- tu ne ferme pas le fichier avant d'essayer de l'envoyer
- tu ne fournit pas le fichier donc je suppose que la taille de ton archive est proche de zéro ?
- compare
ceci avec ton code
@+
Re: Multi download
Posté : 17 août 2011, 12:49
par clems29
Tout d'abord, merci de ton aide
$zip = new ZipArchive;
$filename = "Langues.zip";
$res = $zip->open($filename, ZipArchive::CREATE);
foreach($id_langue as $value)
{
$sql ="SELECT...
$file2 = "$value.text";
$zip->addFromString($file2, $output_text);
header('Content-type: application/zip');
header("Content-Transfer-Encoding: binary");
header("Content-length: ".filesize($filename));
header('Content-Disposition: attachment; filename="'.$filename.'"');
}
$zip->close();
readfile($filename);
Le 2eme code me donne le meme resultat...
$file2 = "$value.text";
$zip->addFromString($file2, $output_text);
}
$zip->close();
header('Content-type: application/zip');
header("Content-Transfer-Encoding: binary");
header("Content-length: ".filesize($filename));
header('Content-Disposition: attachment; filename="'.$filename.'"');
readfile($filename);
Mon fichier se télécharge bien dans Téléchargement, donc je ne pense pas devoir définir un emplacement si?
Le problème est que mon .zip garde en mémoire tout ce qu'il a intégré comme fichier...
Si je change le $filename, le resultat est bon.. mais si je refais en changeant les langues, les nouvelles langues s'ajoutent à ma nouvelle archive $filename(1).zip
Un flush(); après le readfile n'y fait rien...
Edit : Un unlink($filename); me résoud ce dernier problème.
Merci pour votre aide !
Re: Multi download
Posté : 17 août 2011, 17:01
par moogli
A la limite avant la création de l'archive
<?php
If( file_exists($filename)) unlink($filename)
?>
comme ça pas de pb, j'ai pas vue comment écraser une archive existante je pensais que le fait d'indiquer la création suffisait :/
Si tu a tout ce que tu veux, peux tu marquer le sujet résolu ?

merci
Édit : en fait j'suis mirro, a tu essayé ZIPARCHIVE::OVERWRITE En second paramètre de open ? (pas testé j'ai ce qu' faut sous la main).
@+