1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| <?php
$filesdir = 'feuilles classeur/';
// Connexion MySQL
require_once('../connex_mysqli/connex_base_gene.php');
// Récupération du fichier passé en paramètre
//sécurisation de la valeur $_get
$query = "SELECT * FROM telechargement";
$result = mysqli_query($base_gene, $query);
$nb_ligne = mysqli_num_rows($result)+1;
if (!isset($_GET['f'])) $_GET['f'] = 1;
if(is_numeric($_GET['f'])===false || $_GET['f']>$nb_ligne || $_GET['f']<0)$_GET['f'] = 1;
$id_fichier = (isset($_GET['f'])) ? trim(intval(sprintf("%d", $_GET['f']))) : 0;
// est-ce que ce fichier existe ?
$req_testFichierExiste = $base_pdo->prepare("SELECT id, filename, downloaded FROM telechargement WHERE id= :idFichier LIMIT 1");
$req_testFichierExiste->execute(array('idFichier' => $id_fichier));
$fichier_existe = false; $fichier = array();
while ($test = $req_testFichierExiste->fetch())
{
if ((isset($test['filename'])) && ($test['filename'] != ''))
{
$fichier_existe = true;
$fichier = $test;
break;
}
}
$req_testFichierExiste->closeCursor();
if ($fichier_existe == false)
die('Fichier non trouvé.');
// ici nous sommes sûrs que le fichier n°XXX existe bien en base de données
// IMPORTANT : avant quoi que ce soit, on vérifie que le fichier existe aussi sur le serveur
// (et pas seulement en base de données)
if ((file_exists($filesdir . $fichier['filename'])) && (is_file($filesdir . $fichier['filename'])))
{
// Le fichier existe bien : on va incrémenter son compteur de téléchargements
$req_augmenterTelechargements = $base_pdo->prepare("UPDATE telechargement SET downloaded = (downloaded+1) WHERE id= :idFichier");
$req_augmenterTelechargements->execute(array(':idFichier' => $id_fichier));
// requête effectuée : on envoie le fichier
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$fichier['filename'].'"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($filesdir . $fichier['filename'])); //Absolute URL
ob_clean();
flush();
readfile($filesdir . $fichier['filename']); //Absolute URL
exit();
}
?> |
Partager