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('参数错误!'); $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']);//中文名称注意转换编码 $savename = $row['savename']; //实际在服务器上的保存名称 $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); //打开文件最大字节数为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.