1-comment je peux déclarer un fichier dans une BDD
exp de déclaration:
nom de type varchar
id de type int
fichier de type ?????
je veux que ce soit visible sur une page web (exp: ll.php) pour être téléchargé en cliquant sue ce lien.
merci
Pour stocker un fichier dans une base de données, tu peux utiliser le type BLOB qui est prévu pour cela.
Mais je ne peux que te conseiller de ne pas faire ça. Il est bien plus facile de récupérer uniquement l'adresse du fichier sur le serveur et de l'inscrire dans un VARCHAR.
Par exemple, le fichier zipzip-pouetpouet.doc est dans le dossier goulougoulou :
VARCHAR(200) [ nom ] = "Mon fichier doc"
INT(11) [ id ] = AUTO_INCREMENT
VARCHAR(200) [ fichier ] = "goulougoulou/zipzip-pouetpouet.doc"
Il faut lire les octets du fichier et les renvoyer au navigateur en ayant pris soin de spécifier le type mime du fichier envoyé.
Step 0) Récupérer les infos du fichier
$infoFichier = mysql_fetch_array($res);
( $res est le résultat de ta requête SQL, je te laisse cette partie à tes aises )
$fileName = basename($infoFichier['name']); // Le nom du fichier
$fileDir = dirname($infoFichier['name']); // le nom du répertoire
Step 1) Nettoyer l'envoi du fichier au niveau de PHP :
# Purge de PHP
@ob_end_clean();
@ini_set('zlib.output_compression', 'Off');
Step 2) Nettoyer l'envoi du fichier au niveau du navigateur :
# Purge du navigateur
header('Pragma: public');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
Step 3) Spécifier l'encodage
# Spécification de l'encodage
header('Content-Transfer-Encoding: none');
Step 4) Indiquer le nom du fichier à télécharger et son type :
# Forcer le téléchargement
header("Content-type: application/zip; name=\"$fileName\"");
header("Content-Disposition: attachment; filename=". $fileName); ( On peut également indiquer un autre nom par convenance )
( application/zip => pour les fichiers zip. Il te faut renseigner le type mime correspondant à ton fichier )
Step 5) Indiquer la taille du fichier
# Taille du fichier
header("Content-length: ".(string)(filesize($fileDir . $fileName)));
Step 6) Récupérer le flot d'octets pour le renvoyer au navigateur par tranche de 4096 :
# On envoi la sauce
$hand = fopen ($fileDir . $fileName,'rb');
while ( !feof($hand) ) {
print( fread($hand, 4096));
flush();
}
fclose ($hand);