par
EnigmaT!K » 04 févr. 2012, 14:56
Bonjour à tous,
j'aurai besoin de votre aide car je suis dans l'impasse.
j'ai developpé une petite application pour gérer son livre de cave en ligne et j'aimerai offrir la possibilité aux utilisateurs de sauvegarder/restorer leurs données.
l'idée est de sauvegarder les données de chaque table dans un fichier séparé, de les zipper et d'en proposer le téléchargement.
la restore : on envoit le fichier, on le dézippe, on charge les fichiers via LOAD DATA FILE .
Mon problème est le suivant, j'arrive à faire la sauvegarde.
Je la renvoie au serveur, il la réceptionne bien, la copie ou je veux mais n'arrive pas à la dézipper.
si j'utilise ExtractTo de la classe ZIP il ne fait rien et je n'ai pas de message d'erreur.
avec la librairie pclzip j'obtiends un message Badformat. J'ai testé avec le fichier téléchargé ou en récupérant celui créer sur le serveur j'ai le meme problème. cela exclu je pense un probleme lors du téléchargement.
Maintenant si je dézippe le fichier téléchargé, que je le rezipe moi meme et que je le renvoi ma procédure fonctionne.
c'est donc à la création du zip que j'ai un soucis.
le site qui me sert
http://cavea20.free.fr/index.php (util-util pour ce connecter)
mon code
$tables=array("tbl_vinappellation","tbl_vinconso","tbl_vincru","tbl_vinentree","tbl_vinmillesime","tbl_vinpays","tbl_vinreg");
//----------------- ON A DEMANDE UNE SAUVEGARDE DES DONNEES ---------------------------
if (isset($_POST['save']) && !empty($_POST['save'])){
$zipfile='restore/save.zip';
// SECURITE EFFACE LE FICHIER EXISTANT
if (file_exists($zipfile)) unlink($zipfile);
$zip = new PclZip($zipfile);
$i=0;
$connexion=connexion(HOTE,USER,PWD,DB);
foreach ($tables as $nomtable){ // Pour chaque table
$file=$nomtable.".sql";
//efface le fichier sql existant (on sait jamais)
if (file_exists($file)) unlink($file);
// on crée le nouveau fichier
$fp = fopen($file, 'w');
$req_table = ExecRequete("SELECT * FROM $nomtable",$connexion) ;
$nbr_champs = mysql_num_fields($req_table);
// récupère le contenu ss forme de tableau
while ($ligne = mysql_fetch_array($req_table)) {
$insertions="";
for ($i=0; $i<$nbr_champs; $i++)
{
$insertions .= '\'' . mysql_real_escape_string($ligne[$i]) . '\'$';
}
$insertions = substr($insertions, 0, -1)."\r\n";
fwrite($fp, $insertions); // on enregistre le fichier sql
}
fclose($fp);
// La 1ère fois je crée l'archive ensuite j'ajoute les fichiers
if ($i==0){
if ($zip->create($file) == 0) {
die('Error : '.$zip->errorInfo(true));
}
}else{
$v_list = $zip->add($file);
if ($v_list == 0) {
die("Error : ".$archive->errorInfo(true));
}
}
$i++;
}
// on efface les fichiers sql
foreach ($tables as $nomtable){
$file=$nomtable.".sql";
if (file_exists($file)) unlink($file);
}
mysql_free_result($req_table);
mysql_close($connexion);
header('Content-Transfer-Encoding: binary');
header('Content-Disposition: attachment; filename="save.zip"');
header("Pragma: no-cache");
header("Expires: 0");
readfile($zipfile);