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

Nedlastningsteller
Nedlastningshistorikkvisningsprogram
= Last ned og installer PHP-koden =
Eksempel Nedlastningsteller

Innledning:

Dette er en introduksjon til et program som lar deg vite antall nedlastinger når en nettsidebruker laster ned og bruker et program. Det er mulig å sette opp en nedlastningsteller på siden, og nettstedsadministratorer kan også enkelt sjekke nedlastningshistorikken i nettleseren.

[Eksempel installert på side]
Totalt antall: 1865[I dag: 23 I går: 76
[Eksempel åpnet i nettleseren]
Merk: Hvis en side med en nedlastingslenke viser en melding som ber om fil lagring og blir lukket uten å starte nedlastingen, vil det fortsatt bli regnet som en nedlasting. Dette skyldes at den teller antall lenkeklikk.
Nedlastningsinstruksjoner:

Fra denne siden kan du laste ned den komprimerte "zip"-filen til programmet og installere den på ditt eget nettsted. Filen heter "count.php", men du kan endre den.

Du kan fritt bruke og endre koden, inkludert å endre sideutformingen.

Vennligst endre koden for å legge til nye funksjoner eller endre designet for å lage en side som er enkel å forstå og bruke.

 PHP-programnedlasting:

Installasjonsinstruksjoner:

Pakk ut den nedlastede "count.php.zip"-filen, og en fil som heter "count.php" vil bli opprettet. Opprett en mappe som "nedlastningshistorikk" og lagre den der.

"Zip"-filen inneholder bare én fil, "count.php," og "innloggingsskjermen" for administratoren genereres automatisk.

Innstillinger:

Dette er hovedinnstillingsmetoden. Disse hoveddelene er også oppført i PHP-filen.

  1. Passordinnstillinger:
    1. Et passord må settes for administrator siden.
    2. Standardpassordet er "admin", men endre det til en hvilken som helst streng etter eget valg.
    3. For å øke sikkerheten, sett et sterkt passord.
  2. Innstilling av filer som skal lastes ned:
    1. Fullfør innstillingene for "$targetFiles = array()".
    2. Dette er delen som f.eks. "'1' => 'Din URL/filnavn.zip',".
  3. Mappe for lagring av loggfiler:
    1. En mappe kalt "log" kreves på fjernserveren for å lagre loggfiler som registrerer historie.
    2. Dette programmet oppretter automatisk en mappe kalt "log" når du laster opp for første gang. Hvis du imidlertid får en melding som f.eks. "Ingen mappe", vennligst opprett og last opp den separat.
  4. Førstegangsopplastningshistorievisning:
    1. Når du laster opp for første gang, kan "datoen" og tallet "0" vises i historikken.
    2. Dette skyldes at loggfiler som "count_1.log" som inneholder opplastingsdatoen, også genereres i den automatisk opprettede "log" -mappen.
    3. Hvis dette plager deg, last ned en fil som "count_1.log" fra fjernserveren, slett dataene og last den opp igjen.
    4. Imidlertid kan "datoen" og "0"-tilstanden også være en historie når telleren ble startet. Hvis det er en nedlasting den dagen, vil den bli telt opp.
  5. Administratorsiden visnings sidevisning:
    1. Når administratorer ser på siden, kan du velge om du vil vise URL-en eller bare filnavnet.
    2. Hvis flere historiktabeller er plassert på én side, kan du velge å beholde dem i den rekkefølgen som er satt av "$targetFiles = array()" eller sortere dem i rekkefølgen til datoen når nye logger oppstod.
  6. Sideutforming, CSS, osv.:
    1. Juster sideutformingen, CSS, osv. som passende for å gjøre siden lett å lese.
    2. Tidligere var CSS skrevet som en ekstern fil, men nå er den skrevet på samme side slik at du kan referere til taggene når du endrer CSS.
  7. Oppsett av nedlastningslenke på siden:
    1. Typisk skrives nedlastnings <a>-taggen slik:
      <a href="/nedlastningshistorikk/eksempel.zip" download="Filnavn ved nedlasting.zip">[Vilkårlig streng]</a>
    2. I dette programmet skriver du nedlastnings <a>-taggen slik:
    3. [Eksempel]Kopier
      <a href="/nedlastningshistorikk/count.php?download=1" download="Filnavn ved nedlasting.zip" target="_blank">[Vilkårlig streng]</a>
    4. Match nummeret i "download=1" med nummeret satt i "$targetFiles = array()". Denne innstillingen refererer til filene som skal lastes ned.
    5. Vennligst match banen til din side.
    6. Last opp siden med nedlastningslenken etter å ha lastet opp filen med "$targetFiles = array()" (i dette eksempelet, "count.php").
  8. Kode for å vise historikken på én linje:
    1. Opprett følgende JavaScript og plasser det på siden du vil vise:
    2. [Eksempel]Kopier
      <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
    3. Match nummeret i "dsp_count=1" med nummeret satt i "$targetFiles = array()".
    4. Hvis du sletter "&day_dsp=on,", vil bare "totalt antall" bli vist uten "i dag/i går"-visningen.
    5. Totalt antall: 1865[I dag: 23 I går: 76
      Totalt antall: 1865
    6. Vennligst match banen til din side.
Om Utvidelsesinnstillinger

Når du viser flere tabeller, er programmets standardinnstilling å sortere etter den siste oppdateringstiden. Hvis du ønsker å sortere etter totalt nedlastningsantall, opprett en ny fil som "total_downloads.php" og erstatt følgende del.

  1. Endring i kommentarer
    Erstatt kommentarene i følgende avsnitt:
    // Velg om du vil erstatte den opprinnelige matrisen med en ny sortert i rekkefølgen til de nye loggene når du viser flere tabeller på en side
  2. Kopier den erstattende kommentaren
    // Hvis du viser flere tabeller på siden, velg om du vil erstatte den opprinnelige matrisen og sortere i rekkefølgen av totalt antall nedlastinger.
  3. Endring av kode og kommentarer
    Erstatt koden og kommentarene i følgende avsnitt. Vennligst betrakt det som ett blokk.
    // Få filbaner og deres siste oppdateringsdatoer (sortert i synkende rekkefølge av dato)
    $filePathsAndDates = array();
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $filePathsAndDates[$key] = filemtime($path);
        } else {
           // Utdata denne feilen til loggen og bestem om du vil fortsette eller avbryte behandlingen
            echo "Filen eksisterer ikke - $path<br>";
        }
    }
    
    // Sorter synkende etter den siste oppdateringsdatoen (nyeste dato først)
    arsort($filePathsAndDates);
    
    // Gjenoppbygg matrisen med sorterte filbaner
    $sortedFilePaths = array();
    foreach ($filePathsAndDates as $key => $date) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  4. Kopier erstatningskode og kommentarer
    // Matrise som lagrer totalt antall nedlastinger
    $totalDownloads = array();
    
    // Få filbanen og dens totale antall nedlastinger
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $line = file($path);
            $total = 0;
    
            // Summer antallet nedlastinger for hver rad
            foreach ($line as $val) {
                $valArray = explode(',', $val);
                $total += trim($valArray[1]);
            }
    
            // Lagre totalt antall nedlastinger i en matrise
            $totalDownloads[$key] = $total;
        } else {
            // Utdata denne feilen til loggen og avgjør om du vil fortsette eller avbryte prosessen
            echo "Feil: Filen eksisterer ikke - $path";
        }
    }
    
    // Sorter etter totalt antall nedlastinger i synkende rekkefølge
    arsort($totalDownloads);
    
    // Gjenoppbygg matrisen med sorterte filbaner
    $sortedFilePaths = array();
    foreach ($totalDownloads as $key => $total) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  5. Filopprettelse og oppsett
    1. Når du oppretter flere sider, for å forhindre feil i innstillingspostene mens du legger til innhold jevnt, opprett følgende del av koden som en ekstern fil, og last den inn i den for øyeblikket implementerte delen med en annen kode. Opprett en ekstern fil med navn som "config.php".
    // Konfigurering av filer som skal lastes ned. Hvis det er flere filer, legg dem til som '2', '3', '4', etc. Også '0' er gyldig.
    // Bruk "http:" eller "https:" for protokollen.
    $targetFiles = array(
    '1' => 'DinURL/Filnavn.zip',
    '2' => 'DinURL/Filnavn.pdf',
    '3' => 'DinURL/Filnavn.pdf',
    '4' => 'DinURL/Filnavn.pdf',
    );
  6. Kopier eksempelet på delen som skal navngis "config.php"
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>DownloadHistory</title>
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    </head>
    <body>
    <?php
    // Gjør bare denne delen til en ekstern fil og last den inn på siden du bruker med "include __DIR__ . '/config.php';"
    // Konfigurering av filer som skal lastes ned. Hvis det er flere filer, legg dem til som '2', '3', '4', etc. Også '0' er gyldig.
    // Bruk "http:" eller "https:" for protokollen.
    $targetFiles = array(
    '1' => 'DinURL/Filnavn.zip',
    '2' => 'DinURL/Filnavn.pdf',
    '3' => 'DinURL/Filnavn.pdf',
    '4' => 'DinURL/Filnavn.pdf',
    ); ?> </body> </html>
  7. Kode for å laste inn eksterne filer og hvor den skal legges
    1. Inkluder filen opprettet med navn som "config.php" på følgende sted med koden "include __DIR__ . '/config.php';".
    2. Kommenter ut eller slett følgende del og erstatt den med koden "include __DIR__ . '/config.php';".
    //$targetFiles = array(
    // '1' => 'DinURL/Filnavn.zip',
    // '2' => 'DinURL/Filnavn.pdf',
    // '3' => 'DinURL/Filnavn.pdf',
    // '4' => 'DinURL/Filnavn.pdf',
    //);
  8. Kopier koden for å erstatte
    include __DIR__ . '/config.php';
《 PHP-kode for å Opprette Nedlastningsteller 》
Lagre filen med en ".php"-utvidelse.

<?php
//***************************************************************************************************
// Nedlastingsmåler og Nedlastingshistorikkviser PHP-program
// [Alle vet litt nyttige bok]
// [みんなの知識 ちょっと便利帳]
// https://www.benricho.org/Tips/download_history/
// Utgitt: 17. februar 2024
//
// Oversikt:
// Dette programmet er et system for å spore historikken til filnedlastinger, utstyrt med funksjonalitet for brukerautentisering.
// Det inkluderer funksjoner som inndata sanitizing, opprettelse av loggfiler og visning av nedlastingsstatistikk.
// Du står fritt til å bruke det, inkludert å endre koden og endre sidens design.
//
// Merk:
// Før du laster opp siden som inneholder nedlastingslenkene, må du sørge for å konfigurere "$targetFiles = array()" -delen av denne filen,
// og last opp denne siden før siden med nedlastingslenkene.
// Manglende dette kan føre til at brukere ikke kan laste ned når de prøver, siden denne siden angir og refererer til filene som skal lastes ned.
//
// Konfigurasjon og merknader:
// ① Passordet er satt til "admin", men vennligst endre det til en ønsket streng.
// ② "log" -katalogen for lagring av loggfiler genereres automatisk ved første opplasting.
// Hvis du imidlertid får meldinger som "katalogen ikke finnes", må du laste den opp separat.
// ③ Ved første opplasting viser historikken "dato" og nummeret "0".
// Dette skyldes at loggfiler som "count_1.log" med opplastingsdatoen genereres samtidig i den automatisk opprettede "log" -katalogen.
// Hvis dette er en bekymring, få tilgang til den fjerne serveren, last ned filer som "count_1.log", slett dataene og last deretter opp.
// ④ Når du viser flere tabeller på en side i historikken, kan du velge om du vil beholde matrisen satt i [$targetFiles = array] eller vise dem i kronologisk rekkefølge.
// ⑤ I historikken kan du velge om du vil inkludere domenet i 1) visning av filen eller 2) bare vise filnavnet.
//
// [Formatet på lenken på siden med nedlastingslenker]
// [Eksempel] <a href="/download_history/count.php?download=Registrert Nummer" download="NedlastetFilnavn.zip" target="_blank">[Enhver streng]</a>
// ① Juster nummeret i "nedlasting=1" til nummeret satt i "$targetFiles = array()".
// ② Juster banen slik at den matcher siden din.
//
// [Kode (JavaScript) for å vise historikk på en linje på siden der nedlastingslenken er plassert]
// [Eksempel] <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
// ① Juster nummeret i "dsp_count=1" til nummeret satt i "$targetFiles = array()".
// ② Hvis du fjerner "&day_dsp=on," vil den bare vise "total" uten "i dag" og "i går".
// ③ Juster banen slik at den matcher siden din.
//***************************************************************************************************

// Konfigurering av filer som skal lastes ned. Hvis det er flere filer, legg dem til som '2', '3', '4', etc. Også '0' er gyldig.
// Bruk "http:" eller "https:" for protokollen.
$targetFiles = array(
    '1' => 'DinURL/Filnavn.zip',
    '2' => 'DinURL/Filnavn.pdf',
    '3' => 'DinURL/Filnavn.pdf',
    '4' => 'DinURL/Filnavn.pdf',
);

// Sett tegnkoding for HTML-utgang
header("Content-Type: text/html; charset=utf-8");

// Tegnkoding på siden som viser nedlastingshistorikken
$encodingType = 'UTF-8';

// Definer brukerautentiseringsinformasjon og andre innstillinger
$userid = 'admin';   // Bruker-ID (erstatt 'admin' med en hvilken som helst streng)
$password = 'admin'; // Passord (erstatt 'admin' med en hvilken som helst streng)
$hashedPassword = password_hash($password, PASSWORD_DEFAULT); // Bruk password_hash() for å generere en hashverdi
$dataLogDir = 'log/'; // 'log' -katalogen genereres automatisk av dette programmet. Hvis den ikke opprettes, last opp en katalog som heter 'log' separat

// Velg om domenet skal inkluderes når filnavnet vises eller ikke
$includeDomain = 1;  // 1: Vis inkludering av domenenavnet, 0: Vis bare filnavnet

// Velg om du vil erstatte den opprinnelige matrisen med en ny sortert i rekkefølgen til de nye loggene når du viser flere tabeller på en side
$sortTables = 1;  // 1: Sorter, 0: Ikke sorter

$dir = 'log'; // Katalog for lagring av loggfiler og nedlastingshistorikk

// Få domenet til nettstedet ditt
$domain = $_SERVER['HTTP_HOST'];

// Sesjonshåndtering: Forhindre sesjonskapring og bruk session_set_cookie_params()
session_set_cookie_params(0, '/', $domain, true, true); // Sett HttpOnly og Secure-flagg
session_start();
if (!isset($_SESSION['auth'])) {
    $_SESSION['auth'] = FALSE;
}

// Passord hashing: Bruk password_needs_rehash()
if (password_needs_rehash($hashedPassword, PASSWORD_DEFAULT)) {
    $newHashedPassword = password_hash($password, PASSWORD_DEFAULT);
    // Lagre den nye hashverdien i en database, etc.
}

// Opprett katalogen hvis den ikke eksisterer
if (!is_dir($dir)) {
    if (mkdir($dir, 0755, true)) {
    } else {
        // Vis hvis opprettelse av katalogen mislykkes
        echo 'Vennligst opprett "' . $dataLogDir . '" -katalogen og last den opp separat.';
    }
}

// Sjekk om loggkatalogen kan skrives til
if (!is_writable($dataLogDir)) {
    die('"' . $dataLogDir . '" -katalogen eksisterer ikke eller har ikke skrive tillatelser. Opprett katalogen og sett tillatelsene riktig (f.eks. 755).');
}

// Få basertdatoen og gårsdagens dato
$baseDay = date("Y/m/d");
$yesterday = date("Y/m/d", strtotime("-1 day"));

// Funksjon for å få ukedagen fra en dato
function getDayOfWeek($date)
{
    $dayOfWeek = date('w', strtotime($date));
    $weekDays = array('Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør');
    return $weekDays[$dayOfWeek];
}

// Sett filbanen for hver målfil og opprett en loggfil hvis den ikke eksisterer
foreach ($targetFiles as $key => $val) {
    $filePath[$key] = $dataLogDir . "count_" . $key . ".log";

    // Opprett loggfilen hvis den ikke eksisterer
    if (!file_exists($filePath[$key])) {
        createLogFile($filePath[$key]);
    }
}

// Få filbaner og deres siste oppdateringsdatoer (sortert i synkende rekkefølge av dato)
$filePathsAndDates = array();
foreach ($filePath as $key => $path) {
    if (file_exists($path)) {
        $filePathsAndDates[$key] = filemtime($path);
    } else {
        // Utdata denne feilen til loggen og bestem om du vil fortsette eller avbryte behandlingen
        echo "Feil: Filen eksisterer ikke - $path<br>";
    }
}

// Sorter synkende etter den siste oppdateringsdatoen (nyeste dato først)
arsort($filePathsAndDates);

// Gjenoppbygg matrisen med sorterte filbaner
$sortedFilePaths = array();
foreach ($filePathsAndDates as $key => $date) {
    $sortedFilePaths[$key] = $filePath[$key];
}

// Velg betingelsesmessig om du vil bruke de sorterte banene for sortering
$filePath = ($sortTables) ? $sortedFilePaths : $filePath;

// Returner JavaScript-kode til klienten (dynamisk visning av nedlastingsantall)
if (isset($_GET['dsp_count'])) {
    header("Content-type: application/x-javascript");

    // Sett overskriften som en JavaScript-fil
    if (!preg_match("/^[0-9]+$/", $_GET['dsp_count'])) {
        echo "document.write(\"Parameteret må være et halvtall\")";
        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]);
        }
    }

    // Hvis datovisningsalternativet er PÅ, vis inkludering av datoen
    if (isset($_GET['day_dsp']) && $_GET['day_dsp'] == 'on') {
        $countDsp = <<<EOF
document.write('<div class="counter_inpage">Total nedlastinger: <strong>{$total}</strong>[<span class="count_today">I dag : <strong>{$todayCount}</strong></span>  <span class="count_yesterday">I går : <strong>{$yesterdayCount}</strong></span>]</div>')
EOF;
    } else {
        // Hvis datovisningsalternativet er AV, vis bare totalt antall nedlastinger
        $countDsp = <<<EOF
document.write('<p class="counter_inpage">Total nedlastinger: {$total}</p>')
EOF;
    }

    // Hvis tegnkodingen ikke er UTF-8, konverter
    if ($encodingType != 'UTF-8') $countDsp = mb_convert_encoding($countDsp, "$encodingType", 'UTF-8');
    echo $countDsp;

    exit();
}

// Behandling når en filnedlasting er forespurt
if (isset($_GET['download'])) {
    $fileId = $_GET['download'];

    // Avslutt hvis fil-ID-en ikke er et tall eller hvis fil-ID-en ikke eksisterer
    if (!preg_match("/^[0-9]+$/", $fileId) || !isset($filePath[$fileId])) {
        exit('Feil numerisk parameter');
    }

    // Åpne filen og lås den
    $fp = fopen($filePath[$fileId], "rb+");
    if (!$fp) {
        exit('Klarte ikke å åpne filen');
    }

    flock($fp, LOCK_EX);

    // Les loggfilen og lagre den i en matrise
    $line = array();
    while (($data = fgets($fp)) !== false) {
        $line[] = $data;
    }

    // Kort ned filen og legg til en ny dato linje i begynnelsen
    ftruncate($fp, 0);
    rewind($fp);

    // Legg til en ny datolinje i begynnelsen hvis den ikke eksisterer
    if (strpos($line[0], $baseDay) === false) {
        $writeLine = $baseDay . ',1' . "\n";
        fwrite($fp, $writeLine);
    }

    // Behandle hver linje i filen
    foreach ($line as $val) {
        // Øk nedlastingsantallet for gjeldende dato
        if (strpos($val, $baseDay) !== false) {
            $valArray = explode(',', $val);
            $valArray[1] = rtrim($valArray[1], "\n") + 1;
            $val = $valArray[0] . ',' . $valArray[1] . "\n";
        }
        fwrite($fp, $val);
    }

    // Flushe bufferen og frigjøre låsen
    fflush($fp);
    flock($fp, LOCK_UN);

    // Lukk filen
    fclose($fp);

    // Tøm utdata bufferen
    ob_end_clean();

    // Utfør filnedlastingen
    header("Location: {$targetFiles[$fileId]}");
    exit();
} else {
    // Start økten, ødelegg økten hvis utlogging er forespurt
    session_start();
    if (isset($_GET['logout'])) {
        $_SESSION = array();
        session_destroy();
    }

    $loginError = '';

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

    // Bruk passordhasjefunksjonen til å generere en hasjverdi
    // Logg inn behandling
    if (isset($_POST['userid']) && isset($_POST['password'])) {
        // Sammenlign hasjverdier for autentisering
        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 {
            // Behandling for autentiseringsfeil
            $_SESSION['auth'] = FALSE;
            $loginError = '<div style="text-align: center; color: crimson;">Feil bruker-ID eller passord.</div>';
        }
    }

  // Hvis autentisering ikke er vellykket, vis innloggingskjermen
    if ($_SESSION['auth'] !== TRUE) {
        ?>
        <!DOCTYPE html>
        <html lang="no">
        <head>
            <meta charset="utf-8">
            <meta name="robots" content="NOINDEX,NOFOLLOW">
            <title>Vis nedlastingshistorikk Skjerm</title>
            <!-- Innloggingskjermstiler (kan endres etter behov) -->
            <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>
 ```html
<body>
            <div id="login_form">
                <form action="<?php echo $fileName; ?>?mode=download" method="post">
                    <p class="logintitle">【Vis nedlastingshistorikk】</p>
                    <?php if (isset($loginError)): ?>
                        <!-- Vis en feilmelding hvis variabelen $loginError er satt -->
                        <p style="color: crimson;"><?php echo $loginError; ?></p>
                    <?php endif; ?>
                    <label for="userid">Bruker-ID:</label>
                    <input type="text" id="userid" name="userid" required>
                    <label for="password">Passord:</label>
                    <input type="password" id="password" name="password" required>
                    <?php
                        // Antar at $showPassword er en PHP-variabel som bestemmer om passordet skal vises til å begynne med
                        echo '<label class="passwordshow" for="showPassword">[Vis passord]<div class="center-container"><input type="checkbox" id="showPassword" onchange="togglePasswordVisibility()" ' . ($showPassword ? 'checked' : '') . '></div></label>';
                    ?>
                    <button type="submit" name="login_submit">Logg inn</button>
                </form>   
            </div>

<!-- Kontroller synligheten til passordet -->
<script>
  function togglePasswordVisibility() {
    var passwordInput = document.getElementById('password');
    var showPasswordCheckbox = document.getElementById('showPassword');

    if (showPasswordCheckbox.checked) {
      // Hvis avkrysset, vil passordet vises
      passwordInput.type = 'text';
    } else {
      // Fjern avkrysningen for å skjule passordet
      passwordInput.type = 'password';
    }
  }
</script>
</body>
</html><?php
exit();
} else {
  // Hvis innlogget, vis nedlastingshistorikksiden
  ?>
  <!DOCTYPE html>
  <html lang="no">
  <head>
    <meta charset="utf-8">
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    <title>Nedlastingshistorikk</title>
    <!-- Stil for visning av nedlastingshistorikk (kan endres etter behov) -->
    <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">【Nedlastingshistorikk】 【<a href="?logout=true">Logg ut</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">Dato</th>
            <th class="tableheader">Nedlastinger</th>
          </tr>
          <?php	  
            $totalDownload = 0;

            // Les bare hvis filen eksisterer
            if (file_exists($val)) {
              $line = file($val);
              foreach ($line as $lineVal) {
                $lineArray = explode(',', $lineVal);

                // Sjekk om $lineArray[1] er en numerisk verdi
                $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">Totalt antall: <?php echo $totalDownload;?></th>
          </tr>
        </table>
      </div>              
    <?php
                }
              }
            }
          ?>
</body>
</html><?php
// Funksjon for å rense alle elementer i en matrise
function sanitize($arr)
{
  // Hvis det er en matrise, bruk rensing rekursivt
  if (is_array($arr)) {
    return array_map('sanitize', $arr);
  }
  // Fjern NULL-tegn fra strenger
  return str_replace("\0", "", $arr);
}

// Opprett en ny loggfil hvis den ikke eksisterer
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);

    // Sett filrettigheter
    chmod($filePath, 0666);
  } else {
  }
}
Lagre filen med en ".php"-utvidelse.
Dette avslutter introduksjonen av PHP-koden for "Nedlastningsteller/Nedlastningshistorikkvisningsprogrammet." Vi håper du finner den nyttig.

Det kan være feil i formuleringen siden det er en oversettelse fra den japanske versjonen. Vi be klager ulempen, men hvis det er en feil i formuleringen i koden, vennligst rett eller juster det selv.

Vi setter pris på tilbakemeldinger om bruken av denne koden. Vær oppmerksom på at jeg ikke kan svare på spørsmål.

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

Last updated : 2024/02/05