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 [ルーマニア語]  

Contatore di Download
Programma di Visualizzazione Cronologia Download
= Scarica e Installa il Codice PHP =
Sample Download Counter

Introduzione:

Questa è un'introduzione a un programma che ti consente di conoscere il numero di download quando un utente di una pagina web scarica e utilizza un programma. È possibile impostare un contatore di download sulla pagina e gli amministratori del sito possono anche controllare facilmente la cronologia dei download sul browser.

[Esempio Installato sulla Pagina]
Download totali: 1865 [Oggi: 23 Ieri: 76]
[Esempio Aperto nel Browser]

Nota: Se una pagina con un link di download mostra un messaggio che suggerisce di salvare il file e viene chiusa senza avviare il download, sarà comunque conteggiata come un download. Questo perché conta il numero di clic sul link.

Istruzioni per il Download:

Da questa pagina, scarica il file compresso "zip" del programma e installalo sul tuo sito. Il file è chiamato "count.php", ma puoi cambiarlo.

Sei libero di utilizzare e modificare il codice, inclusa la modifica del design della pagina.

Modifica il codice per aggiungere nuove funzioni o cambiare il design per creare una pagina che sia facile da capire e utilizzare.

Download del Programma PHP:
Istruzioni di Installazione:

Scompatta il file scaricato "count.php.zip" e verrà creato un file chiamato "count.php". Crea una directory come "download_history" e salvalo lì.

Il file "zip" contiene solo un file, "count.php", e lo "schermo di accesso" per l'amministratore viene generato automaticamente.

Impostazioni:

Questo è il metodo principale di configurazione. Queste parti principali sono elencate anche nel file PHP.

  1. Impostazioni Password:
    1. È necessario impostare una password per la pagina dell'amministratore.
    2. TLa password predefinita è "admin", ma cambiala con una stringa a tua scelta.
    3. Per aumentare la sicurezza, imposta una password forte.
  2. Impostazione dei File da Scaricare:
    1. Completa le impostazioni per "$targetFiles = array()".
    2. Questa è la parte come "'1' => 'La tua URL/nome del file.zip',".
  3. Directory per Salvare i File di Log:
    1. Una directory chiamata "log" è richiesta sul server remoto per memorizzare i file di log che registrano la cronologia.
    2. Questo programma crea automaticamente una directory chiamata "log" quando carichi per la prima volta. Tuttavia, se ricevi un messaggio come "Nessuna directory", crea e carica separatamente.
  4. Visualizzazione Cronologia Primo Upload:
    1. Quando carichi per la prima volta, la "data" e il numero "0" possono essere visualizzati nella cronologia.
    2. Ciò avviene perché vengono generati anche file di log come "count_1.log" contenenti la data di caricamento nella directory "log" generata automaticamente.
    3. Se ciò ti disturba, scarica un file come "count_1.log" dal server remoto, elimina i dati e caricalo.
    4. Tuttavia, lo stato "data" e "0" potrebbe anche essere una cronologia di quando è stato avviato il contatore. Se c'è un download in quel giorno, verrà contato.
  5. Visualizzazione Pagina Amministratore:
    1. Quando gli amministratori visualizzano la pagina, è possibile scegliere se visualizzare l'URL o solo il nome del file.
    2. Se vengono posizionate più tabelle di cronologia sulla stessa pagina, è possibile scegliere se mantenerle nell'ordine impostato da "$targetFiles = array()" o ordinarle in base alla data in cui sono stati generati nuovi log.
  6. Design della Pagina, CSS, ecc.:
    1. Regola il design della pagina, il CSS, ecc., come appropriato per rendere la pagina facile da leggere.
    2. In passato, il CSS era scritto come file esterno, ma ora è scritto sulla stessa pagina in modo che tu possa fare riferimento ai tag quando cambi il CSS.
  7. Configurazione del Link di Download sulla Pagina:
    1. Tipicamente, il tag di download <a> è scritto come segue:
      <a href="/download_history/sample.zip" download="File name when downloading.zip">[Stringa arbitraria]</a>
    2. In questo programma, scrivi il tag di download <a> come segue:
    3. [Esempio]Copia
      <a href="/download_history/count.php?download=1" download="File name when downloading.zip" target="_blank">[Stringa arbitraria]</a>
    4. Abbinare il numero in "download=1" al numero impostato in "$targetFiles = array()". Questa impostazione si riferisce ai file da scaricare.
    5. Abbinare il percorso alla tua pagina.
    6. Carica la pagina con il link di download dopo aver caricato il file con "$targetFiles = array()" (in questo esempio, "count.php").
  8. Codice per Visualizzare la Cronologia in una Sola Linea:
    1. Crea il seguente JavaScript e posizionalo sulla pagina in cui desideri visualizzare:
    2. [Esempio]Copia
      <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
    3. Abbinare il numero in "dsp_count=1" al numero impostato in "$targetFiles = array()".
    4. Se elimini "&day_dsp=on," verrà visualizzato solo il "numero totale" senza la visualizzazione "oggi/ieri".
    5. Download totali: 1865 [Oggi: 23 Ieri: 76]
      Download totali: 1865
    6. Abbinare il percorso alla tua pagina.
Informazioni sulle Impostazioni dell'Estensione

Quando si mostrano più tabelle, la configurazione predefinita di questo programma è di ordinare in base all'orario dell'ultima modifica. Se si desidera ordinare in base al numero totale di download, creare un nuovo file come "total_downloads.php" e sostituire la seguente parte.

  1. Modifiche nei commenti
    Sostituire i commenti nella seguente sezione:
    // Scegli se sostituire l'array originale con uno nuovo ordinato nell'ordine dei nuovi log quando si visualizzano più tabelle su una pagina
  2. Copia il commento da sostituire
    // Se sulla pagina vengono visualizzate più tabelle, selezionare/impostare se sostituire l'array originale e ordinarle in ordine decrescente in base al numero totale di download.
  3. Modifiche nel codice e nei commenti
    Sostituire il codice e i commenti nella seguente sezione. Considerarlo come un unico blocco.
    // Ottieni percorsi dei file e le loro ultime date di aggiornamento (ordinati in ordine decrescente di data)
    $filePathsAndDates = array();
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $filePathsAndDates[$key] = filemtime($path);
        } else {
            // Output di questo errore nel log e decidere se continuare o interrompere l'elaborazione
            echo "Errore: Il file non esiste - $path<br>";
        }
    }
    
    // Ordina in modo decrescente per l'ultima data di aggiornamento (la data più recente viene per prima)
    arsort($filePathsAndDates);
    
    // Ricostruisci l'array di percorsi file ordinati
    $sortedFilePaths = array();
    foreach ($filePathsAndDates as $key => $date) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  4. Copia il codice sostitutivo e i commenti
    // Array che memorizza il numero totale di download
    $totalDownloads = array();
    
    // Ottieni il percorso del file e il numero totale di download
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $line = file($path);
            $total = 0;
    
           // Somma il numero di download per ogni riga
            foreach ($line as $val) {
                $valArray = explode(',', $val);
                $total += trim($valArray[1]);
            }
    
            // Memorizza il numero totale di download in un array
            $totalDownloads[$key] = $total;
        } else {
            // Visualizza questo errore nel registro e decide se continuare o interrompere il processo
            echo "Errore: il file non esiste - $path";
        }
    }
    
    // Ordina per numero totale di download in ordine decrescente
    arsort($totalDownloads);
    
    // Ricostruisce l'array ordinato dei percorsi dei file
    $sortedFilePaths = array();
    foreach ($totalDownloads as $key => $total) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  5. Creazione e installazione di nuovi file
    1. Quando si creano più pagine, per evitare errori nell'impostazione uniforme degli elementi durante l'aggiunta del contenuto, creare il codice per la parte sottostante in un file esterno e caricarlo nella parte attualmente implementata con codice separato. Crea un file esterno con un nome come "config.php".
    // Configurazione dei file da scaricare. Se ci sono più file, aggiungerli come '2', '3', '4', ecc. Anche '0' è valido.
    // Utilizzare "http:" o "https:" per il protocollo.
    $targetFiles = array(
        '1' => 'TuaURL/NomeFile.zip',
        '2' => 'TuaURL/NomeFile.pdf',
        '3' => 'TuaURL/NomeFile.pdf',
        '4' => 'TuaURL/NomeFile.pdf',
    );
  6. Copia la sezione di esempio chiamata "config.php"
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>DownloadHistory</title>
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    </head>
    <body>
    <?php
    // Rendi solo questa parte un file esterno e caricalo nella pagina che usi con "include __DIR__ . '/config.php';"
    // Configurazione dei file da scaricare. Se ci sono più file, aggiungerli come '2', '3', '4', ecc. Anche '0' è valido.
    // Utilizzare "http:" o "https:" per il protocollo.
    $targetFiles = array(
        '1' => 'TuaURL/NomeFile.zip',
        '2' => 'TuaURL/NomeFile.pdf',
        '3' => 'TuaURL/NomeFile.pdf',
        '4' => 'TuaURL/NomeFile.pdf',
    );
    ?>
    </body>
    </html>
    
  7. Codice per leggere file esterni e dove posizionarli
    1. Posiziona il file creato nella seguente posizione con un nome come "config.php" utilizzando il codice "include __DIR__ . '/config.php';".
    2. Commenta o cancella la parte sottostante e sostituiscila con il codice " include __DIR__ . '/config.php'; ".
    //$targetFiles = array(
    //    '1' => 'TuaURL/NomeFile.zip',
    //    '2' => 'TuaURL/NomeFile.pdf',
    //    '3' => 'TuaURL/NomeFile.pdf',
    //    '4' => 'TuaURL/NomeFile.pdf',
    //);
  8. Copia il codice da sostituire
    include __DIR__ . '/config.php';
* La "font-family" nel programma deve essere regolata per adattarsi al tuo sito, se necessario.
《 Codice PHP per Creare il Contatore di Download 》
Salva il file con estensione ".php".

<?php
//***************************************************************************************************
// Contatore di Download e Visualizzatore Cronologia Download Programma in PHP
// [Libro utile con un po' di conoscenza per tutti]
// [みんなの知識 ちょっと便利帳]
// https://www.benricho.org/Tips/download_history/
// Rilasciato: 28 Gennaio 2024
//
// Panoramica:
// Questo programma è un sistema per tracciare la cronologia dei download di file, dotato di funzionalità di autenticazione utente.
// Include funzionalità come la sanificazione dei dati in ingresso, la creazione di file di log e la visualizzazione delle statistiche di download.
// Sei libero di utilizzarlo, incluso modificare il codice e cambiare il design della pagina.
//
// Nota:
// Prima di caricare la pagina contenente i link di download, assicurati di configurare la sezione "$targetFiles = array()" di questo file,
// e carica questa pagina prima della pagina con i link di download.
// In caso contrario, potrebbe risultare impossibile per gli utenti effettuare il download, poiché questa pagina imposta e fa riferimento ai file da scaricare.
//
// Configurazione e Note:
// ① La password è impostata su "admin", ma si prega di cambiarla con una stringa desiderata.
// ② La directory "log" per memorizzare i file di log viene generata automaticamente al primo caricamento.
// Tuttavia, se si riscontrano messaggi come "directory non trovata", è necessario caricarla separatamente.
// ③ Al primo caricamento, la visualizzazione della cronologia mostra "data" e il numero "0".
// Questo perché i file di log come "count_1.log" con la data di caricamento vengono generati contemporaneamente nella directory "log" creata automaticamente.
// Se ciò è un problema, accedi al server remoto, scarica i file come "count_1.log", elimina i dati e poi carica.
// ④ Quando si visualizzano più tabelle su una pagina nella visualizzazione della cronologia, è possibile scegliere se mantenere l'array impostato in [$targetFiles = array] o visualizzarli in ordine cronologico.
// ⑤ Nella visualizzazione della cronologia, è possibile scegliere se includere il dominio nel 1) visualizzare il file o 2) mostrare solo il nome del file.
//
// [Formato del Link sulla Pagina con i Link di Download]
// [Esempio] <a href="/download_history/count.php?download=NumeroRegistrato" download="NomeFileScaricato.zip" target="_blank">[Qualsiasi Stringa]</a>
// ① Regolare il numero in "download=1" al numero impostato in "$targetFiles = array()".
// ② Regolare il percorso per corrispondere alla tua pagina.
//
// [Codice (JavaScript) per visualizzare la cronologia in una sola riga sulla pagina in cui è posizionato il link di download]
// [Esempio] <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
// ① Regolare il numero in "dsp_count=1" al numero impostato in "$targetFiles = array()".
// ② Se si rimuove "&day_dsp=on", verrà visualizzato solo il "totale" senza "oggi" e "ieri".
// ③ Regolare il percorso per corrispondere alla tua pagina.
//***************************************************************************************************

// Configurazione dei file da scaricare. Se ci sono più file, aggiungerli come '2', '3', '4', ecc. Anche '0' è valido.
// Utilizzare "http:" o "https:" per il protocollo.
$targetFiles = array(
    '1' => 'TuaURL/NomeFile.zip',
    '2' => 'TuaURL/NomeFile.pdf',
    '3' => 'TuaURL/NomeFile.pdf',
    '4' => 'TuaURL/NomeFile.pdf',
);

// Imposta la codifica dei caratteri per l'output HTML
header("Content-Type: text/html; charset=utf-8");

// Codifica dei caratteri sulla pagina che mostra la cronologia di download
// Impostare 'SJIS' per Shift-JIS, 'EUC-JP' per EUC-JP
$encodingType = 'UTF-8';

// Definisci le informazioni di autenticazione utente e altre impostazioni
$userid = 'admin';   // ID utente (sostituire 'admin' con qualsiasi stringa)
$password = 'admin'; // Password (sostituire 'admin' con qualsiasi stringa)
$hashedPassword = password_hash($password, PASSWORD_DEFAULT); // Usa password_hash() per generare un valore di hash
$dataLogDir = 'log/'; // La directory 'log' viene generata automaticamente da questo programma. Se non creata, carica una directory chiamata 'log' separatamente

// Scegli se includere o meno il dominio quando si visualizza il nome del file
$includeDomain = 1;  // 1: Mostra incluso il nome di dominio, 0: Mostra solo il nome del file

// Scegli se sostituire l'array originale con uno nuovo ordinato nell'ordine dei nuovi log quando si visualizzano più tabelle su una pagina
$sortTables = 1;  // 1: Ordina, 0: Non ordinare

$dir = 'log'; // Directory per memorizzare i file di log e la cronologia di download

// Ottieni il dominio del tuo sito
$domain = $_SERVER['HTTP_HOST'];

// Gestione sessione: Impedisci l'hijacking della sessione e usa session_set_cookie_params()
session_set_cookie_params(0, '/', $domain, true, true); // Imposta i flag HttpOnly e Secure
session_start();
if (!isset($_SESSION['auth'])) {
    $_SESSION['auth'] = FALSE;
}

// Hashing della password: Usa password_needs_rehash()
if (password_needs_rehash($hashedPassword, PASSWORD_DEFAULT)) {
    $newHashedPassword = password_hash($password, PASSWORD_DEFAULT);
    // Salva il nuovo valore di hash in un database, ecc.
}

// Crea la directory se non esiste
if (!is_dir($dir)) {
    if (mkdir($dir, 0755, true)) {
    } else {
        // Visualizza se la creazione della directory fallisce
        echo 'Si prega di creare la directory "' . $dataLogDir . '" e caricarla separatamente.';
    }
}

// Verifica se la directory dei log è scrivibile
if (!is_writable($dataLogDir)) {
    die('La directory "' . $dataLogDir . '" non esiste o non ha i permessi di scrittura. Si prega di creare la directory e impostare correttamente i permessi (ad esempio, 755).');
}

// Ottieni la data di base e la data di ieri
$baseDay = date("Y/m/d");
$yesterday = date("Y/m/d", strtotime("-1 day"));

// Funzione per ottenere il giorno della settimana da una data
function getDayOfWeek($date)
{
    $dayOfWeek = date('w', strtotime($date));
    $weekDays = array('Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab');
    return $weekDays[$dayOfWeek];
}

// Imposta il percorso del file per ogni file di destinazione e crea un file di log se non esiste
foreach ($targetFiles as $key => $val) {
    $filePath[$key] = $dataLogDir . "count_" . $key . ".log";

    // Crea il file di log se non esiste
    if (!file_exists($filePath[$key])) {
        createLogFile($filePath[$key]);
    }
}

// Ottieni percorsi dei file e le loro ultime date di aggiornamento (ordinati in ordine decrescente di data)
$filePathsAndDates = array();
foreach ($filePath as $key => $path) {
    if (file_exists($path)) {
        $filePathsAndDates[$key] = filemtime($path);
    } else {
        // Output di questo errore nel log e decidere se continuare o interrompere l'elaborazione
        echo "Errore: Il file non esiste - $path<br>";
    }
}

// Ordina in modo decrescente per l'ultima data di aggiornamento (la data più recente viene per prima)
arsort($filePathsAndDates);

// Ricostruisci l'array di percorsi file ordinati
$sortedFilePaths = array();
foreach ($filePathsAndDates as $key => $date) {
    $sortedFilePaths[$key] = $filePath[$key];
}

// Scegli condizionalmente se utilizzare i percorsi ordinati per l'ordinamento
$filePath = ($sortTables) ? $sortedFilePaths : $filePath;

// Restituisci codice JavaScript al client (visualizzazione dinamica del conteggio dei download)
if (isset($_GET['dsp_count'])) {
    header("Content-type: application/x-javascript");

    // Imposta l'intestazione come un file JavaScript
    if (!preg_match("/^[0-9]+$/", $_GET['dsp_count'])) {
        echo "document.write(\"Il parametro deve essere un numero a larghezza ridotta\")";
        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]);
        }
    }

    // Se l'opzione di visualizzazione della data è ATTIVA, visualizza inclusa la data
    if (isset($_GET['day_dsp']) && $_GET['day_dsp'] == 'on') {
        $countDsp = <<<EOF
document.write('<div class="counter_inpage">Download totali: <strong>{$total}</strong>[<span class="count_today">Oggi : <strong>{$todayCount}</strong></span>  <span class="count_yesterday">Ieri : <strong>{$yesterdayCount}</strong></span>]</div>')
EOF;
    } else {
        // Se l'opzione di visualizzazione della data è DISATTIVATA, visualizza solo il conteggio totale dei download
        $countDsp = <<<EOF
document.write('<p class="counter_inpage">Download totali: {$total}</p>')
EOF;
    }

    // Se la codifica dei caratteri non è UTF-8, converti
    if ($encodingType != 'UTF-8') $countDsp = mb_convert_encoding($countDsp, "$encodingType", 'UTF-8');
    echo $countDsp;

    exit();
}

// Elaborazione quando viene richiesto il download di un file
if (isset($_GET['download'])) {
    $fileId = $_GET['download'];

    // Esci se l'ID file non è un numero o se l'ID file non esiste
    if (!preg_match("/^[0-9]+$/", $fileId) || !isset($filePath[$fileId])) {
        exit('Parametro numerico non corretto');
    }

    // Apri il file e bloccalo
    $fp = fopen($filePath[$fileId], "rb+");
    if (!$fp) {
        exit('Impossibile aprire il file');
    }

    flock($fp, LOCK_EX);

    // Leggi il file di registro e memorizzalo in un array
    $line = array();
    while (($data = fgets($fp)) !== false) {
        $line[] = $data;
    }

    // Tronca il file e aggiungi una nuova riga di data all'inizio
    ftruncate($fp, 0);
    rewind($fp);

    // Aggiungi una nuova riga di data all'inizio se non esiste
    if (strpos($line[0], $baseDay) === false) {
        $writeLine = $baseDay . ',1' . "\n";
        fwrite($fp, $writeLine);
    }

    // Elabora ogni riga nel file
    foreach ($line as $val) {
        // Incrementa il conteggio dei download per la data corrente
        if (strpos($val, $baseDay) !== false) {
            $valArray = explode(',', $val);
            $valArray[1] = rtrim($valArray[1], "\n") + 1;
            $val = $valArray[0] . ',' . $valArray[1] . "\n";
        }
        fwrite($fp, $val);
    }

    // Svuota il buffer e rilascia il blocco
    fflush($fp);
    flock($fp, LOCK_UN);

    // Chiudi il file
    fclose($fp);

    // Cancella il buffer di output
    ob_end_clean();

    // Esegui il download del file
    header("Location: {$targetFiles[$fileId]}");
    exit();
} else {
    // Inizia la sessione, distruggi la sessione se il logout viene richiesto
    session_start();
    if (isset($_GET['logout'])) {
        $_SESSION = array();
        session_destroy();
    }

    $loginError = '';

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

    // Usa la funzione di hash della password per generare un valore di hash
    // Elaborazione di login
    if (isset($_POST['userid']) && isset($_POST['password'])) {
        // Confronta i valori di hash per l'autenticazione
        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 {
            // Elaborazione per il fallimento dell'autenticazione
            $_SESSION['auth'] = FALSE;
            $loginError = '<div style="text-align: center; color: crimson;">ID utente o password non corretti.</div>';
        }
    }

  // Se l'autenticazione non è riuscita, visualizza la schermata di accesso
if ($_SESSION['auth'] !== TRUE) {
    ?>
    <!DOCTYPE html>
    <html lang="it">
    <head>
        <meta charset="utf-8">
        <meta name="robots" content="NOINDEX,NOFOLLOW">
        <title>Schermata di Accesso alla Cronologia dei Download</title>
        <!-- Stili della schermata di accesso (modificabili secondo necessità) -->
        <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">【Visualizza la Cronologia dei Download】</p>
                <?php if (isset($loginError)): ?>
                    <!-- Visualizza un messaggio di errore se la variabile $loginError è impostata -->
                    <p style="color: crimson;"><?php echo $loginError; ?></p>
                <?php endif; ?>
                <label for="userid">ID Utente:</label>
                <input type="text" id="userid" name="userid" required>
                <label for="password">Password:</label>
                <input type="password" id="password" name="password" required>
                <?php
                    // Supponendo che $showPassword sia una variabile PHP che determina se mostrare inizialmente la password
                    echo '<label class="passwordshow" for="showPassword">[Mostra Password]<div class="center-container"><input type="checkbox" id="showPassword" onchange="togglePasswordVisibility()" ' . ($showPassword ? 'checked' : '') . '></div></label>';
                ?>
                <button type="submit" name="login_submit">Login</button>
            </form>   
        </div>

        <!-- Controlla la visibilità della password -->
        <script>
            function togglePasswordVisibility() {
                var passwordInput = document.getElementById('password');
                var showPasswordCheckbox = document.getElementById('showPassword');

                if (showPasswordCheckbox.checked) {
                    // Se selezionato, la password sarà visualizzata
                    passwordInput.type = 'text';
                } else {
                    // Deseleziona per nascondere la password
                    passwordInput.type = 'password';
                }
            }
        </script>
    </body>
    </html><?php
    exit();
} else {
    // Se l'accesso è effettuato, visualizza la pagina della cronologia dei download
    ?>
    <!DOCTYPE html>
    <html lang="it">
    <head>
        <meta charset="utf-8">
        <meta name="robots" content="NOINDEX,NOFOLLOW">
        <title>Cronologia dei Download</title>
        <!-- Stile della visualizzazione della cronologia dei download (modificabile secondo necessità) -->
        <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: 300px;
                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">【Cronologia dei Download】 【<a href="?logout=true">Logout</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">Data</th>
                        <th class="tableheader">Download</th>
                    </tr>
                    <?php	  
                    $totalDownload = 0;

                    // Leggi solo se il file esiste
                    if (file_exists($val)) {
                        $line = file($val);
                        foreach ($line as $lineVal) {
                            $lineArray = explode(',', $lineVal);

                            // Verifica se $lineArray[1] è un valore numerico
                            $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">Totale: <?php echo $totalDownload;?></th>
                    </tr>
                </table>
            </div>              
        <?php
        }
        }
    }
    
    ?>
    </body>
    </html><?php
    // Funzione per sanificare tutti gli elementi in un array
    function sanitize($arr)
    {
        // Se è un array, applica la sanificazione ricorsivamente
        if (is_array($arr)) {
            return array_map('sanitize', $arr);
        }
        // Rimuovi i caratteri NULL dalle stringhe
        return str_replace("\0", "", $arr);
    }

    // Crea un nuovo file di registro se non esiste
    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);

            // Imposta i permessi del file
            chmod($filePath, 0666);
        } else {
        }
    }
Salva il file con estensione ".php".
Questa conclude l'introduzione al codice PHP per il "Contatore di Download/Programma di Visualizzazione Cronologia Download." Speriamo che ti sia utile.

Potrebbero esserci errori nella formulazione in quanto è una traduzione dalla versione giapponese. Ci scusiamo per l'inconveniente, ma se ci sono errori nella formulazione nel codice, ti preghiamo di correggerli o adattarli tu stesso.

Apprezziamo il tuo feedback sull'utilizzo di questo codice. Nota che non posso rispondere a domande.

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

Last updated : 2024/06/29