Download Counter Language Table of Contents
 Japanese [日本語]  
 English [英語]  
 Korean [韓国語]  
 Simplified Chinese [简体中文]  
 Traditional Chinese [繁體中文]  
 Español [スペイン語]  
 Français [フランス語]  
 Português [ポルトガル語]  
  Arabic العربية [アラビア語]  
 Deutsch [ドイツ語]  
 Italiano [イタリア語]  
 Russian [ロシア語]  
 Turkish [トルコ語]  
 Hindi [ヒンディー語]  
 Vietnamese [ベトナム語]  
 Thai [タイ語]  
 Dutch [オランダ語]  
 Indonesian [インドネシア語]  
 Malay [マレー語]  
 Filipino [フィリピン語]  
 Swedish [スウェーデン語]  
 Norwegian [ノルウェー語]  
 Danish [デンマーク語]  
 Finnish [フィンランド語]  
 Polish [ポーランド語]  
 Czech [チェコ語]  
 Hungarian [ハンガリー語]  
 Greek [ギリシャ語]  
 Romanian [ルーマニア語]  

Compteur de Téléchargement
Programme d'Historique des Téléchargements
= Télécharger et Installer le Code PHP =
Sample Download Counter

Introduction :

Il s'agit d'une introduction à un programme qui vous permet de connaître le nombre de téléchargements lorsqu'un utilisateur d'une page Web télécharge et utilise un programme. Il est possible de mettre en place un compteur de téléchargement sur la page, et les administrateurs du site peuvent également vérifier facilement l'historique des téléchargements sur le navigateur.

[Exemple Installé sur la Page]
Gesamtzahl der Downloads: 1865 [Aujourd'hui : 23 Hier : 76]
[Exemple Ouvert dans le Navigateur]

Note : Si une page avec un lien de téléchargement affiche un message suggérant de sauvegarder le fichier et est fermée sans lancer le téléchargement, cela sera tout de même comptabilisé comme un téléchargement. Cela est dû au fait qu'il compte le nombre de clics sur le lien.

Instructions de Téléchargement :

À partir de cette page, téléchargez le fichier compressé "zip" du programme et installez-le sur votre propre site. Le fichier est nommé "count.php", mais vous pouvez le renommer.

Vous êtes libre d'utiliser et de modifier le code, y compris en changeant la conception de la page.

Modifiez le code pour ajouter de nouvelles fonctions ou changer la conception afin de créer une page facile à comprendre et à utiliser.

 Téléchargement du Programme PHP :
Instructions d'Installation :

Décompressez le fichier "count.php.zip" téléchargé, et un fichier nommé "count.php" sera créé. Veuillez créer un répertoire tel que "download_history" et enregistrez-le dedans.

Le fichier "zip" ne contient qu'un seul fichier, "count.php", et l'écran de connexion pour l'administrateur est généré automatiquement.

Réglages :

Ceci est la méthode principale de configuration. Ces parties principales sont également répertoriées dans le fichier PHP.

  1. Réglages du Mot de Passe :
    1. Un mot de passe doit être défini pour la page d'administration.
    2. Le mot de passe par défaut est "admin", mais changez-le par une chaîne de votre choix.
    3. Pour renforcer la sécurité, définissez un mot de passe fort.
  2. Réglage des Fichiers à Télécharger :
    1. Complétez les réglages pour "$targetFiles = array()".
    2. Cela concerne la partie comme "'1' => 'Votre URL/nom du fichier.zip',".
  3. Répertoire pour Enregistrer les Fichiers Journal :
    1. Un répertoire nommé "log" est requis sur le serveur distant pour stocker les fichiers journaux qui enregistrent l'historique.
    2. Ce programme crée automatiquement un répertoire appelé "log" lors de la première mise en ligne. Cependant, si vous obtenez un message tel que "Aucun répertoire", veuillez le créer et le télécharger séparément.
  4. Affichage de l'Histoire lors de la Première Mise en Ligne :
    1. Lors de la première mise en ligne, la "date" et le chiffre "0" peuvent être affichés dans l'historique.
    2. Cela est dû au fait que des fichiers journaux tels que "count_1.log" contenant la date de la mise en ligne sont également générés dans le répertoire "log" généré automatiquement.
    3. Si cela vous dérange, téléchargez un fichier tel que "count_1.log" depuis le serveur distant, supprimez les données et téléchargez-le à nouveau.
    4. Cependant, l'état "date" et "0" peut aussi être une histoire de quand le compteur a été démarré. S'il y a un téléchargement ce jour-là, il sera comptabilisé.
  5. Affichage de la Page d'Administration :
    1. Lorsque les administrateurs consultent la page, vous pouvez choisir d'afficher l'URL ou seulement le nom du fichier.
    2. Si plusieurs tables d'historique sont placées sur une page, vous pouvez choisir de les maintenir dans l'ordre défini par "$targetFiles = array()" ou de les trier selon la date où de nouveaux journaux ont eu lieu.
  6. Conception de la Page, CSS, etc. :
    1. Ajustez la conception de la page, le CSS, etc. selon vos besoins pour rendre la page facile à lire.
    2. Autrefois, le CSS était écrit comme un fichier externe, mais maintenant il est écrit sur la même page afin que vous puissiez vous référer aux balises lors du changement du CSS.
  7. Configuration du Lien de Téléchargement sur la Page :
    1. Généralement, la balise de téléchargement <a> est écrite comme suit :
      <a href="/download_history/sample.zip" download="File name when downloading.zip">[Chaîne arbitraire]]</a>
    2. Dans ce programme, écrivez la balise de téléchargement <a> comme suit :
    3. [Exemple]Copier
      <a href="/download_history/count.php?download=1" download="File name when downloading.zip" target="_blank">[Chaîne arbitraire]</a>
    4. Faites correspondre le nombre dans "download=1" au nombre défini dans "$targetFiles = array()". Ce réglage concerne les fichiers à télécharger.
    5. Faites correspondre le chemin vers votre page.
    6. Veuillez télécharger la page avec le lien de téléchargement après avoir téléchargé le fichier avec "$targetFiles = array()" (dans cet exemple, "count.php").
  8. Code pour Afficher l'Histoire en Une Ligne :
    1. Créez le JavaScript suivant et placez-le sur la page où vous souhaitez l'afficher :
    2. [Exemple]Copier
      <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
    3. Faites correspondre le nombre dans "dsp_count=1" au nombre défini dans "$targetFiles = array()".
    4. Si vous supprimez "&day_dsp=on,", seul le "nombre total" sera affiché sans l'affichage "aujourd'hui/hier".
    5. Téléchargements totaux: 1865 [Aujourd'hui : 23 Hier : 76]
      Téléchargements totaux: 1865
    6. Faites correspondre le chemin vers votre page.
À propos des paramètres d'extension

Lors de l'affichage de plusieurs tableaux, la configuration par défaut de ce programme consiste à trier par l'heure de la dernière mise à jour. Si vous souhaitez trier par le nombre total de téléchargements, créez un nouveau fichier comme "total_downloads.php" et remplacez la partie suivante.

  1. Changements dans les commentaires
    Remplacez les commentaires dans la section suivante :
    // Choisissez de remplacer ou non le tableau d'origine par un nouveau trié dans l'ordre des nouveaux journaux lors de l'affichage de plusieurs tables sur une page
  2. Copier le commentaire à remplacer
    // Si plusieurs tableaux sont affichés sur la page, sélectionnez/définissez s'il faut remplacer le tableau d'origine et trier par ordre décroissant du nombre total de téléchargements.
  3. Changements dans le code et les commentaires
    Remplacez le code et les commentaires dans la section suivante. Considérez-le comme un seul bloc.
    // Obtenir les chemins des fichiers et leurs dates de dernière mise à jour (triés par ordre décroissant de date)
    $filePathsAndDates = array();
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $filePathsAndDates[$key] = filemtime($path);
        } else {
            // Afficher cette erreur dans le journal et décider de continuer ou d'abandonner le traitement
            echo "Erreur : le fichier n'existe pas - $path<br>";
        }
    }
    
    // Trier par date de dernière mise à jour (la date la plus récente vient en premier)
    arsort($filePathsAndDates);
    
    // Reconstruire le tableau des chemins de fichiers triés
    $sortedFilePaths = array();
    foreach ($filePathsAndDates as $key => $date) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  4. Copiez le code de remplacement et les commentaires
    // Tableau qui stocke le nombre total de téléchargements
    $totalDownloads = array();
    
    // Récupère le chemin du fichier et son nombre total de téléchargements
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $line = file($path);
            $total = 0;
    
            // Additionnez le nombre de téléchargements pour chaque ligne
            foreach ($line as $val) {
                $valArray = explode(',', $val);
                $total += trim($valArray[1]);
            }
    
            // Stocke le nombre total de téléchargements dans un tableau
            $totalDownloads[$key] = $total;
        } else {
            // Affiche cette erreur dans le journal et décide de continuer ou d'abandonner le processus
            echo "Erreur : le fichier n'existe pas - $path<br>";
        }
    }
    
    // Trier par nombre total de téléchargements par ordre décroissant
    arsort($totalDownloads);
    
    // Reconstruit le tableau trié des chemins de fichiers
    $sortedFilePaths = array();
    foreach ($totalDownloads as $key => $total) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  5. Création de fichiers et configuration
    1. Lors de la création de plusieurs pages, pour éviter les erreurs de configuration tout en ajoutant du contenu de manière uniforme, créez la partie suivante du code en tant que fichier externe et chargez-la dans la partie actuellement implémentée avec un autre code. Créez un fichier externe avec un nom comme "config.php".
    // Configuration des fichiers à télécharger. S'il y a plusieurs fichiers, ajoutez-les comme '2', '3', '4', etc. De plus, '0' est valide.
    // Utilisez "http:" ou "https:" pour le protocole.
    $targetFiles = array(
        '1' => 'VotreURL/NomFichier.zip',
        '2' => 'VotreURL/NomFichier.pdf',
        '3' => 'VotreURL/NomFichier.pdf',
        '4' => 'VotreURL/NomFichier.pdf',
    );
  6. Copiez l'exemple de la partie à nommer "config.php"
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>DownloadHistory</title>
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    </head>
    <body>
    <?php
    // Transformez uniquement cette partie en fichier externe et chargez-la dans la page que vous utilisez avec "include __DIR__ . '/config.php';"
    // Configuration des fichiers à télécharger. S'il y a plusieurs fichiers, ajoutez-les comme '2', '3', '4', etc. De plus, '0' est valide.
    // Utilisez "http:" ou "https:" pour le protocole.
    $targetFiles = array(
        '1' => 'VotreURL/NomFichier.zip',
        '2' => 'VotreURL/NomFichier.pdf',
        '3' => 'VotreURL/NomFichier.pdf',
        '4' => 'VotreURL/NomFichier.pdf',
    );
    ?>
    </body>
    </html>
    
  7. Code pour lire les fichiers externes et où les placer
    1. Incluez le fichier créé avec un nom comme "config.php" à l'emplacement suivant avec le code "include __DIR__ . '/config.php';".
    2. Commentez ou supprimez la section suivante et remplacez-la par le code "include __DIR__ . '/config.php';".
    //$targetFiles = array(
    //    '1' => 'VotreURL/NomFichier.zip',
    //    '2' => 'VotreURL/NomFichier.pdf',
    //    '3' => 'VotreURL/NomFichier.pdf',
    //    '4' => 'VotreURL/NomFichier.pdf',
    //);
  8. Copiez le code à remplacer
    include __DIR__ . '/config.php';
* La "font-family" dans le programme doit être ajustée pour correspondre à votre propre site si nécessaire.
《 Code PHP pour Créer le Compteur de Téléchargement 》
Enregistrez le fichier avec l'extension ".php".

<?php
//***************************************************************************************************
// Programme PHP de compteur de téléchargements et de visualisation de l'historique des téléchargements
// [Livre un peu utile de connaissances pour tout le monde]
// [みんなの知識 ちょっと便利帳]
// https://www.benricho.org/Tips/download_history/
// Date de publication : 28 janvier 2024
//
// Aperçu :
// Ce programme est un système permettant de suivre l'historique des téléchargements de fichiers, équipé d'une fonctionnalité d'authentification utilisateur.
// Il inclut des fonctionnalités telles que la désinfection des données d'entrée, la création de fichiers journaux et l'affichage des statistiques de téléchargement.
// Vous êtes libre de l'utiliser, y compris de modifier le code et de changer la conception de la page.
//
// Note :
// Avant de téléverser la page contenant les liens de téléchargement, assurez-vous de configurer la section "$targetFiles = array()" de ce fichier,
// et téléversez cette page avant la page avec les liens de téléchargement.
// Le non-respect de cette étape peut entraîner l'impossibilité pour les utilisateurs de télécharger lorsqu'ils essaient, car cette page définit et référence les fichiers à télécharger.
//
// Configuration et Notes :
// ① Le mot de passe est défini sur "admin", mais veuillez le changer par une chaîne de caractères souhaitée.
// ② Le répertoire "log" pour stocker les fichiers journaux est automatiquement généré lors du premier téléversement.
// Cependant, si vous rencontrez des messages tels que "répertoire non trouvé", veuillez le téléverser séparément.
// ③ Lors du téléversement initial, l'affichage de l'historique montre "date" et le nombre "0".
// Cela est dû à la génération simultanée de fichiers journaux tels que "count_1.log" avec la date de téléversement dans le répertoire "log" créé automatiquement.
// Si cela pose problème, accédez au serveur distant, téléchargez des fichiers tels que "count_1.log", supprimez les données, puis téléversez à nouveau.
// ④ Lors de l'affichage de plusieurs tables sur une page dans l'historique, vous pouvez choisir de conserver le tableau défini dans [$targetFiles = array] ou de les afficher dans l'ordre chronologique.
// ⑤ Dans l'affichage de l'historique, vous pouvez choisir d'inclure ou non le domaine dans 1) l'affichage du fichier ou 2) la présentation uniquement du nom du fichier.
//
// [Format du lien sur la page avec les liens de téléchargement]
// [Exemple] <a href="/download_history/count.php?download=NuméroEnregistré" download="NomFichierTéléchargé.zip">[N'importe quelle chaîne]</a>
// ① Ajustez le numéro dans "download=1" au numéro défini dans "$targetFiles = array()".
// ② Ajustez le chemin pour correspondre à votre page.
//
// [Code (JavaScript) pour afficher l'historique en une seule ligne sur la page où se trouve le lien de téléchargement]
// [Exemple] <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
// ① Ajustez le numéro dans "dsp_count=1" au numéro défini dans "$targetFiles = array()".
// ② Si vous supprimez "&day_dsp=on", il affichera uniquement le "total" sans "aujourd'hui" et "hier".
// ③ Ajustez le chemin pour correspondre à votre page.
//***************************************************************************************************

// Configuration des fichiers à télécharger. S'il y a plusieurs fichiers, ajoutez-les comme '2', '3', '4', etc. De plus, '0' est valide.
// Utilisez "http:" ou "https:" pour le protocole.
$targetFiles = array(
    '1' => 'VotreURL/NomFichier.zip',
    '2' => 'VotreURL/NomFichier.pdf',
    '3' => 'VotreURL/NomFichier.pdf',
    '4' => 'VotreURL/NomFichier.pdf',
);

// Définir l'encodage des caractères pour la sortie HTML
header("Content-Type: text/html; charset=utf-8");

// Encodage des caractères sur la page affichant l'historique des téléchargements
// Définir sur 'SJIS' pour Shift-JIS, 'EUC-JP' pour EUC-JP
$encodingType = 'UTF-8';

// Définir les informations d'authentification utilisateur et autres paramètres
$userid = 'admin';   // Identifiant utilisateur (remplacez 'admin' par n'importe quelle chaîne)
$password = 'admin'; // Mot de passe (remplacez 'admin' par n'importe quelle chaîne)
$hashedPassword = password_hash($password, PASSWORD_DEFAULT); // Utiliser password_hash() pour générer une valeur de hachage
$dataLogDir = 'log/'; // Le répertoire 'log' est automatiquement généré par ce programme. S'il n'est pas créé, téléversez un répertoire nommé 'log' séparément

// Choisissez d'inclure ou non le domaine lors de l'affichage du nom de fichier
$includeDomain = 1;  // 1: Afficher le nom de domaine, 0: Afficher uniquement le nom de fichier

// Choisissez de remplacer ou non le tableau d'origine par un nouveau trié dans l'ordre des nouveaux journaux lors de l'affichage de plusieurs tables sur une page
$sortTables = 1;  // 1: Trier, 0: Ne pas trier

$dir = 'log'; // Répertoire pour stocker les fichiers journaux et l'historique des téléchargements

// Obtenir le domaine de votre site
$domain = $_SERVER['HTTP_HOST'];

// Gestion de session : Prévenir le détournement de session et utiliser session_set_cookie_params()
session_set_cookie_params(0, '/', $domain, true, true); // Définir les drapeaux HttpOnly et Secure
session_start();
if (!isset($_SESSION['auth'])) {
    $_SESSION['auth'] = FALSE;
}

// Hachage du mot de passe : Utiliser password_needs_rehash()
if (password_needs_rehash($hashedPassword, PASSWORD_DEFAULT)) {
    $newHashedPassword = password_hash($password, PASSWORD_DEFAULT);
    // Sauvegarder la nouvelle valeur de hachage dans une base de données, etc.
}

// Créer le répertoire s'il n'existe pas
if (!is_dir($dir)) {
    if (mkdir($dir, 0755, true)) {
    } else {
        // Afficher si la création du répertoire échoue
        echo 'Veuillez créer le répertoire "' . $dataLogDir . '" et le téléverser séparément.';
    }
}

// Vérifier si le répertoire de journaux est accessible en écriture
if (!is_writable($dataLogDir)) {
    die('Le répertoire "' . $dataLogDir . '" n\'existe pas ou n\'a pas les autorisations d\'écriture. Veuillez créer le répertoire et définir correctement les autorisations (par exemple, 755).');
}

// Obtenir la date de base et la date d'hier
$baseDay = date("Y/m/d");
$yesterday = date("Y/m/d", strtotime("-1 day"));

// Fonction pour obtenir le jour de la semaine à partir d'une date
function getDayOfWeek($date)
{
    $dayOfWeek = date('w', strtotime($date));
    $weekDays = array('Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam');
    return $weekDays[$dayOfWeek];
}

// Définir le chemin du fichier pour chaque fichier cible et créer un fichier journal s'il n'existe pas
foreach ($targetFiles as $key => $val) {
    $filePath[$key] = $dataLogDir . "count_" . $key . ".log";

    // Créer le fichier journal s'il n'existe pas
    if (!file_exists($filePath[$key])) {
        createLogFile($filePath[$key]);
    }
}

// Obtenir les chemins des fichiers et leurs dates de dernière mise à jour (triés par ordre décroissant de date)
$filePathsAndDates = array();
foreach ($filePath as $key => $path) {
    if (file_exists($path)) {
        $filePathsAndDates[$key] = filemtime($path);
    } else {
        // Afficher cette erreur dans le journal et décider de continuer ou d'abandonner le traitement
        echo "Erreur : le fichier n'existe pas - $path<br>";
    }
}

// Trier par date de dernière mise à jour (la date la plus récente vient en premier)
arsort($filePathsAndDates);

// Reconstruire le tableau des chemins de fichiers triés
$sortedFilePaths = array();
foreach ($filePathsAndDates as $key => $date) {
    $sortedFilePaths[$key] = $filePath[$key];
}

// Choisissez conditionnellement d'utiliser les chemins triés pour le tri
$filePath = ($sortTables) ? $sortedFilePaths : $filePath;

// Renvoyer le code JavaScript au client (affichage dynamique du nombre de téléchargements)
if (isset($_GET['dsp_count'])) {
    header("Content-type: application/x-javascript");

    // Définir l'en-tête en tant que fichier JavaScript
    if (!preg_match("/^[0-9]+$/", $_GET['dsp_count'])) {
        echo "document.write(\"Le paramètre doit être un nombre demi-largeur\")";
        exit();
    }

    $dspCountNo = $_GET['dsp_count'];
    if (!file_exists($filePath[$dspCountNo])) {
        createLogFile($filePath[$dspCountNo]);
    }

    $line = file($filePath[$dspCountNo]);
    $total = 0;
    $todayCount = 0;
    $yesterdayCount = 0;

    foreach ($line as $val) {
        $valArray = explode(',', $val);
        $total += trim($valArray[1]);
        if (strpos($valArray[0], $baseDay) !== false) {
            $todayCount = trim($valArray[1]);
        }
        if (strpos($valArray[0], $yesterday) !== false) {
            $yesterdayCount = trim($valArray[1]);
        }
    }

    // Si l'option d'affichage de la date est activée, afficher y compris la date
    if (isset($_GET['day_dsp']) && $_GET['day_dsp'] == 'on') {
        $countDsp = <<<EOF
document.write('<div class="counter_inpage">Téléchargements totaux : <strong>{$total}</strong>[<span class="count_today">Aujourd'hui : <strong>{$todayCount}</strong></span>  <span class="count_yesterday">Hier : <strong>{$yesterdayCount}</strong></span>]</div>')
EOF;
    } else {
        // Si l'option d'affichage de la date est désactivée, afficher uniquement le nombre total de téléchargements
        $countDsp = <<<EOF
document.write('<p class="counter_inpage">Téléchargements totaux : {$total}</p>')
EOF;
    }

    // Si l'encodage des caractères n'est pas UTF-8, convertir
    if ($encodingType != 'UTF-8') $countDsp = mb_convert_encoding($countDsp, "$encodingType", 'UTF-8');
    echo $countDsp;

    exit();
}

// Traitement lorsqu'une demande de téléchargement de fichier est effectuée
if (isset($_GET['download'])) {
    $fileId = $_GET['download'];

    // Quitter si l'ID de fichier n'est pas un nombre ou si l'ID de fichier n'existe pas
    if (!preg_match("/^[0-9]+$/", $fileId) || !isset($filePath[$fileId])) {
        exit('Paramètre numérique incorrect');
    }

    // Ouvrir le fichier et le verrouiller
    $fp = fopen($filePath[$fileId], "rb+");
    if (!$fp) {
        exit('Impossible d\'ouvrir le fichier');
    }

    flock($fp, LOCK_EX);

    // Lire le fichier journal et le stocker dans un tableau
    $line = array();
    while (($data = fgets($fp)) !== false) {
        $line[] = $data;
    }

    // Tronquer le fichier et ajouter une nouvelle ligne de date au début
    ftruncate($fp, 0);
    rewind($fp);

    // Ajouter une nouvelle ligne de date au début si elle n'existe pas
    if (strpos($line[0], $baseDay) === false) {
        $writeLine = $baseDay . ',1' . "\n";
        fwrite($fp, $writeLine);
    }

    // Traiter chaque ligne dans le fichier
    foreach ($line as $val) {
        // Incrémenter le compteur de téléchargements pour la date actuelle
        if (strpos($val, $baseDay) !== false) {
            $valArray = explode(',', $val);
            $valArray[1] = rtrim($valArray[1], "\n") + 1;
            $val = $valArray[0] . ',' . $valArray[1] . "\n";
        }
        fwrite($fp, $val);
    }

    // Vider le tampon et libérer le verrou
    fflush($fp);
    flock($fp, LOCK_UN);

    // Fermer le fichier
    fclose($fp);

    // Effacer le tampon de sortie
    ob_end_clean();

    // Effectuer le téléchargement du fichier
    header("Location: {$targetFiles[$fileId]}");
    exit();
} else {
    // Démarrer la session, détruire la session si la déconnexion est demandée
    session_start();
    if (isset($_GET['logout'])) {
        $_SESSION = array();
        session_destroy();
    }

    $loginError = '';

    if (!isset($_SESSION['auth'])) {
        $_SESSION['auth'] = FALSE;
    }

    // Utiliser la fonction de hachage de mot de passe pour générer une valeur de hachage
    // Traitement de connexion
    if (isset($_POST['userid']) && isset($_POST['password'])) {
        // Comparer les valeurs de hachage pour l'authentification
        if ($_POST['userid'] === $userid && password_verify($_POST['password'], $hashedPassword)) {
            $oldSid = session_id();
            session_regenerate_id(TRUE);

            if (version_compare(PHP_VERSION, '5.1.0', '<')) {
                $path = session_save_path() != '' ? session_save_path() : '/tmp';
                $oldSessionFile = $path . '/sess_' . $oldSid;

                if (file_exists($oldSessionFile)) {
                    unlink($oldSessionFile);
                }
            }

            $_SESSION['auth'] = TRUE;
        } else {
            // Traitement en cas d'échec d'authentification
            $_SESSION['auth'] = FALSE;
            $loginError = '<div style="text-align: center; color: crimson;">Identifiant ou mot de passe incorrect.</div>';
        }
    }

  // Si l'authentification n'est pas réussie, affichez l'écran de connexion
if ($_SESSION['auth'] !== TRUE) {
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta name="robots" content="NOINDEX,NOFOLLOW">
        <title>Écran de connexion à l'historique de téléchargement</title>
        <!-- Styles de l'écran de connexion (modifiables au besoin) -->
        <style>
            body {
                font-family: Arial, sans-serif;
                background-color: #f4f4f4;
                margin: 0px;
                padding: 0px;
                display: flex;
                align-items: center;
                justify-content: center;
                height: 100vh;
            }
            form {
                background-color: #fff;
                padding: 20px;
                border-radius: 8px;
                box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
            }
            label {
                display: block;
                margin-bottom: 8px;
            }
            input {
                font-size: 18px; 
                width: 100%;
                padding: 8px;
                margin-bottom: 16px;
                box-sizing: border-box;
            }
            button {
                font-size: 16px;
                background-color: #4caf50;
                color: #fff;
                padding: 10px;
                border: none;
                border-radius: 4px;
                cursor: pointer;
            }
            .logintitle {
                text-align: center;
                font-size: 18px;
                font-weight: bold;
            }
            .logininfo {
                text-align: center;
            }
            .passwordshow {
                font-size: 14px;
                font-weight: bold;
                color: darkgray;
                text-align: center;
            }
            .center-container {
                display: inline-block;
                margin: 0 5px 0 0;
            }
        </style>
    </head>
    <body>
        <div id="login_form">
            <form action="<?php echo $fileName; ?>?mode=download" method="post">
                <p class="logintitle">【Voir l'historique des téléchargements】</p>
                <?php if (isset($loginError)): ?>
                    <!-- Affichez un message d'erreur si la variable $loginError est définie -->
                    <p style="color: crimson;"><?php echo $loginError; ?></p>
                <?php endif; ?>
                <label for="userid">Identifiant utilisateur :</label>
                <input type="text" id="userid" name="userid" required>
                <label for="password">Mot de passe :</label>
                <input type="password" id="password" name="password" required>
                <?php
                    // Supposons que $showPassword soit une variable PHP déterminant s'il faut afficher initialement le mot de passe
                    echo '<label class="passwordshow" for="showPassword">[Afficher le mot de passe]<div class="center-container"><input type="checkbox" id="showPassword" onchange="togglePasswordVisibility()" ' . ($showPassword ? 'checked' : '') . '></div></label>';
                ?>
                <button type="submit" name="login_submit">Connexion</button>
            </form>   
        </div>

<!-- Contrôler la visibilité du mot de passe -->
<script>
  function togglePasswordVisibility() {
    var passwordInput = document.getElementById('password');
    var showPasswordCheckbox = document.getElementById('showPassword');

    if (showPasswordCheckbox.checked) {
      // Si coché, le mot de passe sera affiché
      passwordInput.type = 'text';
    } else {
      // Décochez pour masquer le mot de passe
      passwordInput.type = 'password';
    }
  }
</script>
</body>
</html><?php
exit();
} else {
  // Si connecté, affichez la page de l'historique des téléchargements
  ?>
  <!DOCTYPE html>
  <html lang="fr">
  <head>
    <meta charset="utf-8">
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    <title>Historique des téléchargements</title>
    <!-- Styles pour afficher l'historique des téléchargements (modifiables au besoin) -->
    <style>
                 body {
                     font-family: 'Hiragino Kaku Gothic ProN', 'Hiragino Kaku Gothic ProN W3', Meiryo, Osaka, 'MS PGothic', arial, helvetica, sans-serif;
                 }
                 .log_title {
                     font-size: 16px;
                     font-weight: bold;
                     color: brown;
                     margin: 0px 0px 15px 10px;
                 }
                 .get_url {
                     font-size: 13px;
                     font-weight: bold;
                     padding: 8px 0;
                     color: brown;
                     background-color: lightgoldenrodyellow;
                 }
                 .log_table{
                     float:left;
                     width: 320px;
                     border: #CCC 1px solid;
                     border-radius: 5px;
                     margin: 0px 0px 5px 10px;
                     padding: 0px 5px 5px 5px;
                     word-break: break-all;
                 }
                 table {
                     width: 100%;
                     border-collapse: collapse;
                 }
                 td,
                 th {
                     padding: 5px 10px;
                     border: 1px solid #999;
                     text-align: right;
                     font-size: 90%;
                 }
                 th {
                     background: lavenderblush;
                     text-align: center;
                     font-weight: normal;
                 }
                 .tableheader {
                     background: lavender;
                     text-align: center;
                     font-weight: bold;
                     white-space: nowrap;
                 }
                 .total{
                     float:left;
                     margin: -25px 0px 0px 10px;
                 }
                 .counter_inpage{
                     margin: 15px 0px 8px 0px;
                 }
                 .bold{
                     font-weight: bold;
                 }
             </style>
  </head>
  <body>
    <div class="log_title">【Historique des téléchargements】 【<a href="?logout=true">Déconnexion</a>】</div> 
    <?php foreach($filePath as $key => $val){ ?>                      
      <div class="log_table">         
        <div class="get_url"><?php echo $includeDomain ? $targetFiles[$key] : basename($targetFiles[$key]); ?></div>
        <table align="center">
          <tr>
            <th class="tableheader">Date</th>
            <th class="tableheader">Téléchargements</th>
          </tr>
          <?php	  
            $totalDownload = 0;

            // Lire seulement si le fichier existe
            if (file_exists($val)) {
              $line = file($val);
              foreach ($line as $lineVal) {
                $lineArray = explode(',', $lineVal);

                // Vérifiez si $lineArray[1] est une valeur numérique
                $numericValue = filter_var($lineArray[1], FILTER_VALIDATE_FLOAT);
                if ($numericValue !== false) {
                  $totalDownload += $numericValue;
                  ?>
                  <tr>
                    <th nowrap><?php echo $lineArray[0] . ' (' . getDayOfWeek($lineArray[0]) . ')'; ?></th>
                    <td class="bold" nowrap><?php echo $lineArray[1]; ?></td>
                  </tr>
                  <?php
                }
              }
            }
          ?>
          <tr>
            <th colspan="2" class="bold">Téléchargements : <?php echo $totalDownload;?></th>
          </tr>
        </table>
      </div>              
    <?php
                }
              }
            }
          ?>
</body>
</html><?php
// Fonction pour désinfecter tous les éléments d'un tableau
function sanitize($arr)
{
  // S'il s'agit d'un tableau, appliquez la désinfection de manière récursive
  if (is_array($arr)) {
    return array_map('sanitize', $arr);
  }
  // Supprimez les caractères NULL à l'intérieur des chaînes
  return str_replace("\0", "", $arr);
}

// Créer un nouveau fichier journal s'il n'existe pas
function createLogFile($filePath)
{
  $baseDay = date("Y/m/d");
  $fp = fopen($filePath, "a+b");

  if ($fp) {
    flock($fp, LOCK_EX);
    ftruncate($fp, 0);
    rewind($fp);
    fwrite($fp, "$baseDay,0");
    fflush($fp);
    flock($fp, LOCK_UN);
    fclose($fp);

    // Définir les autorisations du fichier
    chmod($filePath, 0666);
  } else {
  }
}
Enregistrez le fichier avec l'extension ".php".
Cela conclut l'introduction du code PHP pour le "Compteur de Téléchargement/Programme d'Historique des Téléchargements." Nous espérons que cela vous sera utile.

Il peut y avoir des erreurs dans la formulation car il s'agit d'une traduction de la version japonaise. Nous nous excusons pour les désagréments, mais si des erreurs apparaissent dans la formulation du code, veuillez les corriger ou les ajuster vous-même.

Vos commentaires sur l'utilisation de ce code sont appréciés. Veuillez noter que je ne peux pas répondre aux questions.

おすすめサイト・関連サイト…

Last updated : 2024/06/29