Page 1 sur 1

Compression Zip

Posté : 16 juin 2006, 00:06
par qmeuh
Bonjour à tous !

J'ai utilisé le script des tutoriaux concerant la compression zip ... mais cela ne marche pas ... Ai-je fais une erreur ?
<?php 

if (isset ($_GET['id'])) {

require("zip.lib.php");
$zip = new zipfile();

$dbhost = 'localhost';
$dbname = '...';
$dbuser = '...';
$dbpasswd = '...';

mysql_connect($dbhost, $dbuser, $dbpasswd) or die('Erreur de connexion');
mysql_select_db($dbname) or die('Base inexistante');  

$sql = 'SELECT * FROM `site_feuilles` WHERE `fichier` = '.$_GET['id'].' ORDER BY `id` ASC';
$query = mysql_query($sql) or die('Erreur3'); 

while ($list = mysql_fetch_array($query)) {

	$filename = $list['id'].'.jpg';

	$fp = fopen($filename,'r') ;
	$contenu = fread($fp, filesize($filename)) ;
	fclose($fp) ;

	$zip->addfile($contenu, $filename) ;

}

mysql_close();

$archive = $zip->file();

header('Content-Type: application/x-zip'); 
header('Content-Disposition: inline; filename=makezip.zip');

echo $archive;

} else { header("Location: index.php"); exit(); }

?>
zip.lib.php
makezip.php
et les fichiers à compresser sont tous dans le même dossier !

Merci d'avance
QMeuh

Posté : 16 juin 2006, 00:38
par Mouet
Quels sont les erreurs?

:roll:

Posté : 16 juin 2006, 11:18
par qmeuh
Aucune ... C'est bien ça le problème ... :(
J'obtiens une page blanche

J'ai par contre remarqué que si je change

$filename = $list['id'].'.jpg';

en

$filename = '1.jpg';

J'obtiens autant de fois le fichier 1.jpg dans mon archive que la boucle tourne pour ma requete ...

Posté : 16 juin 2006, 11:26
par Mouet
Donc, la boucle tourne, ca te fais l'archive mais c'est simplement les fichiers qui ne sont pas "déterminés" correctement?

fais un peu un echo $contenu; pour voir ce que ca va te retourner.

Posté : 16 juin 2006, 11:35
par qmeuh
Si je le met dans la boucle il ne me retourne que le premier fichier JPEG de la requete ...
Si je le met après ... rien :P

Posté : 16 juin 2006, 11:40
par guilt92
Peut etre que comme id est un nombre il ne le prend pas comme chaine de caractère. Je suis pas sur mais tu peux tester :
$filename = "".$list["id"].".jpg"; 
Aussi si tu n'utilises que list["id"] fait un SELECT id plutôt que * tu gagneras en performances...

Posté : 16 juin 2006, 11:45
par qmeuh
Ooooo ça marche :D
Quand même bizarre comme truc ... Pourquoi les chiffres ne pourraient pas fonctionner ?

Autre chose : Y a-t-il une limite de mémoire ?

Posté : 16 juin 2006, 11:58
par guilt92
Pourquoi les chiffres ne pourraient pas fonctionner ?
Le problème ici est qu'il te faut une chaine de caractère pour la fonction fopen. En php comme tu ne déclares pas le type de variable si tu écris $filename = $list['id'] il va considérer que $filename est un entier sur lequel tu peux faire des opérations infaisables sur les chaines de caractère (exemple utiliser dans un for ou autre...). Apparemment meme en mettant un . après pour concaténer il ne considère pas cela comme une chaine, alors qu'en mettant $filename = "" il sait tout de suite que c est une chaine, donc après en concaténant on arrive au résultat souhaité ;)