Développement PHP et implémentation du module fonctionnel de statistiques de nombre de téléchargements (2)
Créez un fichier download.php pour répondre à l'action de téléchargement, mettez à jour le nombre de téléchargements du fichier correspondant et terminez le téléchargement via le navigateur.
Selon le paramètre url, interroger pour obtenir les données correspondantes, vérifier si le fichier à télécharger existe, s'il existe, mettre à jour le numéro de téléchargement des données correspondantes +1, le nombre de téléchargements de fichiers dans le base de données +1, et utiliser l'en-tête () implémente la fonction de téléchargement. Si le fichier n'existe pas, le message "Le fichier n'existe pas !" est affiché.
Il convient de mentionner que la fonction header() est utilisée pour forcer le téléchargement du fichier et que le nom du fichier peut être défini pour être enregistré localement après le téléchargement.
Généralement, nous utilisons le programme de téléchargement en arrière-plan pour renommer le fichier téléchargé et l'enregistrer sur le serveur. Les fichiers couramment utilisés sont nommés d'après la date et l'heure. L'un des avantages de cette méthode est d'éviter la duplication des noms et des noms de fichiers. Le nom chinois est tronqué. Pour les fichiers que nous téléchargeons localement, nous pouvons utiliser header("Content-Disposition: attachment; filename=" .$filename) pour définir le nom du fichier sur un nom de fichier facilement identifiable.
<?php require('conn.php'); $id = (int)$_GET['id']; if(!isset($id) || $id==0) die('參數(shù)錯(cuò)誤!'); $query = mysqli_query($link,"select * from downloads where id='$id'"); $row = mysqli_fetch_array($query); if(!$row) exit; $filename = iconv('UTF-8','GBK',$row['filename']);//中文名稱注意轉(zhuǎn)換編碼 $savename = $row['savename']; //實(shí)際在服務(wù)器上的保存名稱 $myfile = 'files/'.$savename; //文件名稱 if(file_exists($myfile)){ mysqli_query($link,"update downloads set downloads=downloads+1 where id='$id'"); $file = @fopen($myfile, "r"); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=" .$filename ); while (!feof($file)) { echo fread($file, 50000); //打開文件最大字節(jié)數(shù)為50000 } fclose($file); exit; }else{ echo '文件不存在!'; } ?>
Remarque?:
la bibliothèque de fonctions iconv peut effectuer la conversion entre différents jeux de caractères et constitue une bibliothèque de fonctions de base indispensable dans la programmation PHP.
file_exists() La fonction vérifie si un fichier ou un répertoire existe. Renvoie vrai si le fichier ou le répertoire spécifié existe, faux sinon. La fonction
fopen() ouvre un fichier ou une URL. Si l'ouverture échoue, cette fonction renvoie FALSE. "r" s'ouvre en mode lecture seule et pointe le pointeur de fichier vers l'en-tête du fichier.
feof() La fonction détecte si la fin du fichier (eof) a été atteinte. La fonction
fread() lit les fichiers (sans danger pour les fichiers binaires).
fclose()La fonction ferme un fichier ouvert.