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

Nedladdningsräknare
Program för att se nedladdningshistorik
= Ladda ner och installera PHP-koden =
Exempel på nedladdningsräknare

Introduktion:

Detta är en introduktion till ett program som låter dig veta antalet nedladdningar när en webbsideanvändare laddar ner och använder ett program. Det är möjligt att ställa in en nedladdningsräknare på sidan, och webbplatsadministratörer kan också enkelt kontrollera nedladdningshistoriken i webbläsaren.

[Exempel installerat på sidan]
Totala numret: 1865[Idag: 23 Igår: 76
[Exempel öppnat i webbläsaren]
Obs: Om en sida med en nedladdningslänk visar ett meddelande som uppmanar till filsparande och stängs utan att påbörja nedladdningen, räknas det fortfarande som en nedladdning. Detta beror på att det räknar antalet länkklick.
ladda ner:

Från denna sida, ladda ner det komprimerade "zip"-filen av programmet och installera det på din egen sida. Filen heter "count.php", men du kan ändra den.

Du är fri att använda och modifiera koden, inklusive att ändra sidans design.

Modifiera gärna koden för att lägga till nya funktioner eller ändra designen för att skapa en sida som är lätt att förstå och använda.

 PHP-programnedladdning:

Installationsanvisningar:

Packa upp den nedladdade "count.php.zip"-filen, och en fil som heter "count.php" skapas. Skapa en mapp som "nedladdningshistorik" och spara den där.

"Zip"-filen innehåller endast en fil, "count.php," och "inloggningsskärmen" för administratören genereras automatiskt.

Inställningar:

Detta är det huvudsakliga inställningssättet. Dessa huvuddelar listas också i PHP-filen.

  1. Lösenordsinställningar:
    1. Ett lösenord måste ställas in för administratörsidan.
    2. Standardlösenordet är "admin", men ändra det till valfri sträng.
    3. För att förbättra säkerheten, ange ett starkt lösenord.
  2. Inställning av filer att ladda ner:
    1. Slutför inställningarna för "$targetFiles = array()".
    2. Detta är delen som "'1' => 'Din URL/filnamn.zip',".
  3. Mapp för att spara loggfiler:
    1. En mapp som heter "log" krävs på den externa servern för att spara loggfiler som registrerar historik.
    2. Detta program skapar automatiskt en mapp som kallas "log" när du laddar upp första gången. Om du dock får ett meddelande som "Ingen mapp", skapa och ladda upp den separat.
  4. Visning av historik för första gången:
    1. När du laddar upp för första gången kan "datum" och siffran "0" visas i historiken.
    2. Detta beror på att loggfiler som "count_1.log" innehållande uppladdningsdatum också genereras i den automatiskt genererade mappen "log".
    3. こOm detta stör dig, ladda ner en fil som "count_1.log" från den externa servern, radera datan och ladda upp den.
    4. Men "datum"- och "0"-tillståndet kan också vara en historik över när räknaren startades. Om det finns en nedladdning den dagen kommer den att räknas upp.
  5. Administratörsvissningssida:
    1. När administratörer visar sidan kan du välja om du vill visa URL:en eller endast filnamnet.
    2. Om flera historiktabeller placeras på en sida kan du välja att behålla dem i den ordning som anges av "$targetFiles = array()" eller sortera dem i ordning efter datum när nya loggar inträffade.
  6. Sidodesign, CSS, osv.:
    1. Justera sidodesignen, CSS, osv. efter behov för att göra sidan lättläst.
    2. till taggarna när du ändrar CSS.
  7. Inställning av nedladdningslänk på sidan:
    1.  Vanligtvis är nedladdnings <a>-taggen skriven enligt följande:
      <a href="/nedladdningshistorik/exempel.zip" download="Filnamn vid nedladdning.zip">[Godtycklig sträng]</a>
    2. I detta program, skriv nedladdnings <a>-taggen enligt följande:
    3. [Exempel]Kopiera
      <a href="/nedladdningshistorik/count.php?download=1" download="Filnamn vid nedladdning.zip" target="_blank">[Godtycklig sträng]</a>
    4. Matcha numret i "download=1" med numret inställt i "$targetFiles = array()". Denna inställning hänvisar till filerna som ska laddas ner.
    5. Matcha sökvägen till din sida.
    6. Ladda upp sidan med nedladdningslänken efter att ha laddat upp filen med "$targetFiles = array()" (i detta exempel, "count.php").
  8. Kod för att visa historik på en rad:
    1. Skapa följande JavaScript och placera det på sidan där du vill visa:
    2. [Exempel]Kopiera
      <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
    3. Matcha numret i "dsp_count=1" med numret inställt i "$targetFiles = array()".
    4. Om du tar bort "&day_dsp=on," visas endast "totalt antal" utan "idag/igår"-visning.
    5. Totala numret: 1865[Idag: 23 Igår: 76
      Totala numret: 1865
    6. Matcha sökvägen till din sida.
Om Inställningar för Tillägg

När flera tabeller visas är programmets standardinställning att sortera efter senaste uppdateringstid. Om du vill sortera efter totalt nedladdningsantal, skapa en ny fil som "total_downloads.php" och ersätt följande del.。

  1. Ändring i kommentarer
    Ersätt kommentarerna i följande avsnitt:
    // Välj om du vill ersätta den ursprungliga arrayen med en ny sorterad i ordning av nya loggar när flera tabeller visas på en sida
  2. Kopiera utbyteskommentaren
    // Om du visar flera tabeller på sidan, välj om du vill ersätta den ursprungliga arrayen och sortera i ordningen av det totala antalet nedladdningar.
  3. Kod- och kommentarändringar
    Ersätt koden och kommentarerna i följande avsnitt. Betrakta det som en helhet.
    // Hämta filvägar och deras senaste uppdateringsdatum (sorterat i fallande ordning efter datum)
    $filePathsAndDates = array();
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $filePathsAndDates[$key] = filemtime($path);
        } else {
            // Visa detta fel i loggen och bestäm om du vill fortsätta eller avbryta behandlingen
            echo "Fel: Filen finns inte - $path<br>";
        }
    }
    
    // Sortera i fallande ordning efter det senaste uppdateringsdatumet (nyaste datumet kommer först)
    arsort($filePathsAndDates);
    
    // Återskapa arrayen av sorterade filvägar
    $sortedFilePaths = array();
    foreach ($filePathsAndDates as $key => $date) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  4. Kopiera ersättningskoden och kommentarer
    // Hämta filvägar och deras senaste uppdateringsdatum (sorterat i fallande ordning efter datum)
    $totalDownloads = array();
    
    // Hämta filvägen och dess totala antal nedladdningar
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $line = file($path);
            $total = 0;
    
            // Summera antalet nedladdningar för varje rad
            foreach ($line as $val) {
                $valArray = explode(',', $val);
                $total += trim($valArray[1]);
            }
    
            // Lagra det totala antalet nedladdningar i en array
            $totalDownloads[$key] = $total;
        } else {
            // Skriv ut detta fel i loggen och bestäm om du vill fortsätta eller avbryta processen
            echo "Fel: Filen finns inte - $path";
        }
    }
    
    // Sortera i fallande ordning efter det totala antalet nedladdningar
    arsort($totalDownloads);
    
    // Återuppbygg den sorterade arrayen med filvägar
    $sortedFilePaths = array();
    foreach ($totalDownloads as $key => $total) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  5. Skapande och inställning av fil
    1. När du skapar flera sidor, för att förhindra misstag i inställning av poster när du lägger till innehåll enhetligt, skapa följande del av koden som en extern fil och ladda in den i den för närvarande implementerade delen med en annan kod. Skapa en extern fil med namnet "config.php".
    // Konfiguration av filer att ladda ner. Om det finns flera filer, lägg till dem som '2', '3', '4', etc. Dessutom är '0' giltigt.
    // Använd "http:" eller "https:" för protokollet.
    $targetFiles = array(
    '1' => 'DinURL/Filnamn.zip',
    '2' => 'DinURL/Filnamn.pdf',
    '3' => 'DinURL/Filnamn.pdf',
    '4' => 'DinURL/Filnamn.pdf',
    );
  6. Kopiera exemplet på delen som ska namnges "config.php"
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>DownloadHistory</title>
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    </head>
    <body>
    <?php
    // Gör endast den här delen till en extern fil och ladda in den i sidan du använder med "include __DIR__ . '/config.php';"
    // Konfiguration av filer att ladda ner. Om det finns flera filer, lägg till dem som '2', '3', '4', etc. Dessutom är '0' giltigt.
    // Använd "http:" eller "https:" för protokollet.
    $targetFiles = array(
    '1' => 'DinURL/Filnamn.zip',
    '2' => 'DinURL/Filnamn.pdf',
    '3' => 'DinURL/Filnamn.pdf',
    '4' => 'DinURL/Filnamn.pdf',
    ); ?> </body> </html>
  7. Kod och plats för att ladda externa filer
    1. Inkludera filen skapad med namnet "config.php" på följande plats med koden "include __DIR__ . '/config.php';".
    2. Kommentera bort eller ta bort följande avsnitt och ersätt det med koden "include __DIR__ . '/config.php';".
    //$targetFiles = array(
    // '1' => 'DinURL/Filnamn.zip',
    // '2' => 'DinURL/Filnamn.pdf',
    // '3' => 'DinURL/Filnamn.pdf',
    // '4' => 'DinURL/Filnamn.pdf',
    //);
  8. Kopiera koden för att ersätta
    include __DIR__ . '/config.php';
* "font-family" i programmet bör justeras för att matcha din egen webbplats om det behövs.
《PHP-kod för att skapa Nedladdningsräknare》
Spara filen med förlängningen ".php".

<?php
//***************************************************************************************************
// Nedladdningsräknare och Program för att se nedladdningshistorik i PHP
// [Allas Kunskap En Liten Användbar Bok]
//        Minna no Chishiki Chotto Benricho
//        みんなの知識 ちょっと便利帳
// https://www.benricho.org/Tips/download_history/
// Släppt: 16 februari 2024
//
// Översikt:
// Det här programmet är ett system för att spåra historiken över filnedladdningar, utrustat med funktionalitet för användarautentisering.
// Det inkluderar funktioner som sanering av indata, skapande av loggfiler och visning av nedladdningsstatistik.
// Du är fri att använda det, inklusive att modifiera koden och ändra sidans design.
//
// Observera:
// Innan du laddar upp sidan som innehåller nedladdningslänkarna, se till att konfigurera avsnittet "$targetFiles = array()" i den här filen,
// och ladda upp den här sidan innan sidan med nedladdningslänkarna.
// Misslyckande med att göra detta kan resultera i att användare inte kan ladda ner när de försöker, eftersom denna sida anger och refererar till filerna som ska laddas ner.
//
// Konfiguration och Anteckningar:
// ① Lösenordet är inställt på "admin", men ändra det till valfri sträng.
// ② Katalogen "log" för att lagra loggfiler genereras automatiskt vid första uppladdningen.
//    Om du dock får meddelanden som "katalogen finns inte", ladda upp den separat.
// ③ Vid den första uppladdningen visas historikvisningen "datum" och siffran "0".
//    Detta beror på att loggfiler som "count_1.log" med uppladdningsdatum också genereras samtidigt i den automatiskt skapade katalogen "log".
//    Om detta är oroande, få tillgång till den fjärrservern, hämta filer som "count_1.log", radera datan och ladda sedan upp den.
// ④ När flera tabeller visas på en sida i historikvisning kan du välja om du vill behålla arrayen inställd på [$targetFiles = array] eller visa dem i kronologisk ordning.
// ⑤ I historikvisningen kan du välja om du vill inkludera domänen i 1) visning av filen eller 2) visa endast filnamnet.
//
// [Format av länken på sidan med nedladdningslänkar]
// [Exempel] <a href="/download_history/count.php?download=Registrerat Nummer" download="NedladdatFilnamn.zip" target="_blank">[Valfri Sträng]</a>
// ① Justera numret i "download=1" till det nummer som anges i "$targetFiles = array()".
// ② Justera sökvägen för att matcha din sida.
//
// [Kod (JavaScript) för att visa historik på en rad på sidan där nedladdningslänken placeras]
// [Exempel] <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
// ① Justera numret i "dsp_count=1" till det nummer som anges i "$targetFiles = array()".
// ② Om du tar bort "&day_dsp=on," visas endast "totalt" utan "idag" och "igår".
// ③ Justera sökvägen för att matcha din sida.
//***************************************************************************************************

// Konfiguration av filer att ladda ner. Om det finns flera filer, lägg till dem som '2', '3', '4', etc. Dessutom är '0' giltigt.
// Använd "http:" eller "https:" för protokollet.
$targetFiles = array(
    '1' => 'DinURL/Filnamn.zip',
    '2' => 'DinURL/Filnamn.pdf',
    '3' => 'DinURL/Filnamn.pdf',
    '4' => 'DinURL/Filnamn.pdf',
);

// Ange teckenkodning för HTML-utmatning
header("Content-Type: text/html; charset=utf-8");

// Teckenkodning på sidan som visar nedladdningshistoriken
$encodingType = 'UTF-8';

// Definiera användarautentiseringsinformation och andra inställningar
$userid = 'admin';   // Användar-ID (ersätt 'admin' med valfri sträng)
$password = 'admin'; // Lösenord (ersätt 'admin' med valfri sträng)
$hashedPassword = password_hash($password, PASSWORD_DEFAULT); // Använd password_hash() för att generera en hash-värde
$dataLogDir = 'log/'; // Katalogen 'log' genereras automatiskt av detta program. Om den inte skapas, ladda upp en katalog med namnet 'log' separat

// Välj om du vill inkludera domänen när du visar filnamnet eller inte
$includeDomain = 1;  // 1: Visa inklusive domännamnet, 0: Visa endast filnamnet

// Välj om du vill ersätta den ursprungliga arrayen med en ny sorterad i ordning av nya loggar när flera tabeller visas på en sida
$sortTables = 1;  // 1: Sortera, 0: Sortera inte

$dir = 'log'; // Katalog för att lagra loggfiler och nedladdningshistorik

// Hämta din webbplats domän
$domain = $_SERVER['HTTP_HOST'];

// Sessionhantering: Förhindra sessionkapning och använd session_set_cookie_params()
session_set_cookie_params(0, '/', $domain, true, true); // Ange HttpOnly och Secure-flaggor
session_start();
if (!isset($_SESSION['auth'])) {
    $_SESSION['auth'] = FALSE;
}

// Lösenordshashing: Använd password_needs_rehash()
if (password_needs_rehash($hashedPassword, PASSWORD_DEFAULT)) {
    $newHashedPassword = password_hash($password, PASSWORD_DEFAULT);
    // Spara det nya hashvärdet i en databas, etc.
}

// Skapa katalogen om den inte finns
if (!is_dir($dir)) {
    if (mkdir($dir, 0755, true)) {
    } else {
        // Visa om katalogskapande misslyckas
        echo 'Skapa katalogen "' . $dataLogDir . '" och ladda upp den separat.';
    }
}

// Kontrollera om loggkatalogen är skrivbar
if (!is_writable($dataLogDir)) {
    die('Katalogen "' . $dataLogDir . '" finns antingen inte eller har inte skrivrättigheter. Skapa katalogen och ange rättigheter korrekt (t.ex. 755).');
}

// Hämta basdatum och gårdagens datum
$baseDay = date("Y/m/d");
$yesterday = date("Y/m/d", strtotime("-1 day"));

// Funktion för att få veckodagen från ett datum
function getDayOfWeek($date)
{
    $dayOfWeek = date('w', strtotime($date));
    $weekDays = array('Sön', 'Mån', 'Tis', 'Ons', 'Tor', 'Fre', 'Lör');
    return $weekDays[$dayOfWeek];
}

// Ange filvägen för varje målfil och skapa en loggfil om den inte finns
foreach ($targetFiles as $key => $val) {
    $filePath[$key] = $dataLogDir . "count_" . $key . ".log";

    // Skapa loggfilen om den inte finns
    if (!file_exists($filePath[$key])) {
        createLogFile($filePath[$key]);
    }
}

// Hämta filvägar och deras senaste uppdateringsdatum (sorterat i fallande ordning efter datum)
$filePathsAndDates = array();
foreach ($filePath as $key => $path) {
    if (file_exists($path)) {
        $filePathsAndDates[$key] = filemtime($path);
    } else {
        // Visa detta fel i loggen och bestäm om du vill fortsätta eller avbryta behandlingen
        echo "Fel: Filen finns inte - $path<br>";
    }
}

// Sortera i fallande ordning efter det senaste uppdateringsdatumet (nyaste datumet kommer först)
arsort($filePathsAndDates);

// Återskapa arrayen av sorterade filvägar
$sortedFilePaths = array();
foreach ($filePathsAndDates as $key => $date) {
    $sortedFilePaths[$key] = $filePath[$key];
}

// Välj villkorligt om du vill använda de sorterade vägarna för sortering
$filePath = ($sortTables) ? $sortedFilePaths : $filePath;

// Returnera JavaScript-kod till klienten (dynamisk visning av nedladdningsräkningar)
if (isset($_GET['dsp_count'])) {
    header("Content-type: application/x-javascript");

    // Ange rubriken som en JavaScript-fil
    if (!preg_match("/^[0-9]+$/", $_GET['dsp_count'])) {
        echo "document.write(\"Parametern måste vara ett halvbred nummer\")";
        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]);
        }
    }

    // Om alternativet för datumvisning är PÅ, visa inklusive datumet
    if (isset($_GET['day_dsp']) && $_GET['day_dsp'] == 'on') {
        $countDsp = <<<EOF
document.write('<div class="counter_inpage">Totala nedladdningar: <strong>{$total}</strong>[<span class="count_today">Idag : <strong>{$todayCount}</strong></span>  <span class="count_yesterday">Igår : <strong>{$yesterdayCount}</strong></span>]</div>')
EOF;
    } else {
        // Om alternativet för datumvisning är AV, visa bara den totala nedladdningsräkningen
        $countDsp = <<<EOF
document.write('<p class="counter_inpage">Totala nedladdningar: {$total}</p>')
EOF;
    }

    // Om teckenkodningen inte är UTF-8, konvertera
    if ($encodingType != 'UTF-8') $countDsp = mb_convert_encoding($countDsp, "$encodingType", 'UTF-8');
    echo $countDsp;

    exit();
}

// Bearbetning när en filnedladdning begärs
if (isset($_GET['download'])) {
    $fileId = $_GET['download'];

    // Avsluta om fil-ID inte är ett nummer eller om fil-ID inte finns
    if (!preg_match("/^[0-9]+$/", $fileId) || !isset($filePath[$fileId])) {
        exit('Inkorrekt numerisk parameter');
    }

    // Öppna filen och lås den
    $fp = fopen($filePath[$fileId], "rb+");
    if (!$fp) {
        exit('Misslyckades att öppna filen');
    }

    flock($fp, LOCK_EX);

    // Läs loggfilen och lagra den i en array
    $line = array();
    while (($data = fgets($fp)) !== false) {
        $line[] = $data;
    }

    // Kapa filen och lägg till en ny datumrad i början
    ftruncate($fp, 0);
    rewind($fp);

    // Lägg till en ny datumrad i början om den inte finns
    if (strpos($line[0], $baseDay) === false) {
        $writeLine = $baseDay . ',1' . "\n";
        fwrite($fp, $writeLine);
    }

    // Bearbeta varje rad i filen
    foreach ($line as $val) {
        // Öka nedladdningsräkningen för aktuellt datum
        if (strpos($val, $baseDay) !== false) {
            $valArray = explode(',', $val);
            $valArray[1] = rtrim($valArray[1], "\n") + 1;
            $val = $valArray[0] . ',' . $valArray[1] . "\n";
        }
        fwrite($fp, $val);
    }

    // Skölj bufferten och släpp låset
    fflush($fp);
    flock($fp, LOCK_UN);

    // Stäng filen
    fclose($fp);

    // Rensa utmatningsbufferten
    ob_end_clean();

    // Utför filnedladdningen
    header("Location: {$targetFiles[$fileId]}");
    exit();
} else {
    // Starta sessionen, förstör sessionen om utloggning begärs
    session_start();
    if (isset($_GET['logout'])) {
        $_SESSION = array();
        session_destroy();
    }

    $loginError = '';

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

    // Använd lösenordshashningsfunktionen för att generera en hash-värde
    // Inloggningsbearbetning
    if (isset($_POST['userid']) && isset($_POST['password'])) {
        // Jämför hashvärden för 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 {
            // Bearbetning för autentiseringsfel
            $_SESSION['auth'] = FALSE;
            $loginError = '<div style="text-align: center; color: crimson;">Inkorrekt användar-ID eller lösenord.</div>';
        }
    }

    // Om autentisering inte lyckas, visa inloggningsskärmen
    if ($_SESSION['auth'] !== TRUE) {
        ?>
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="utf-8">
            <meta name="robots" content="NOINDEX,NOFOLLOW">
            <title>Logga in på nedladdningshistorik</title>
            <!-- Stilar för inloggningsskärmen (kan ändras efter 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>
        <body>
            <div id="login_form">
                <form action="<?php echo $fileName; ?>?mode=download" method="post">
                    <p class="logintitle">【Visa nedladdningshistorik】</p>
                    <?php if (isset($loginError)): ?>
                        <!-- Visa ett felmeddelande om variabeln $loginError är satt -->
                        <p style="color: crimson;"><?php echo $loginError; ?></p>
                    <?php endif; ?>
                    <label for="userid">Användar-ID:</label>
                    <input type="text" id="userid" name="userid" required>
                    <label for="password">Lösenord:</label>
                    <input type="password" id="password" name="password" required>
                    <?php
                        // Antag att $showPassword är en PHP-variabel som bestämmer om lösenordet ska visas initialt
                        echo '<label class="passwordshow" for="showPassword">[Visa lösenord]<div class="center-container"><input type="checkbox" id="showPassword" onchange="togglePasswordVisibility()" ' . ($showPassword ? 'checked' : '') . '></div></label>';
                    ?>
                    <button type="submit" name="login_submit">Logga in</button>
                </form>   
            </div>

<!-- Kontrollera synligheten av lösenordet -->
<script>
  function togglePasswordVisibility() {
    var passwordInput = document.getElementById('password');
    var showPasswordCheckbox = document.getElementById('showPassword');

    if (showPasswordCheckbox.checked) {
      // Om markerad visas lösenordet
      passwordInput.type = 'text';
    } else {
      // Avmarkera för att dölja lösenordet
      passwordInput.type = 'password';
    }
  }
</script>
</body>
</html><?php
exit();
} else {
  // Om inloggad, visa sidan för nedladdningshistorik
  ?>
  <!DOCTYPE html>
  <html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    <title>Nedladdningshistorik</title>
    <!-- Stilar för nedladdningshistorik (kan ändras efter 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">【Nedladdningshistorik】 【<a href="?logout=true">Logga 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">Datum</th>
            <th class="tableheader">Nedladdningar</th>
          </tr>
          <?php	  
            $totalDownload = 0;

            // Läs endast om filen finns
            if (file_exists($val)) {
              $line = file($val);
              foreach ($line as $lineVal) {
                $lineArray = explode(',', $lineVal);

                // Kontrollera om $lineArray[1] är ett numeriskt värde
                $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">Totala numret: <?php echo $totalDownload;?></th>
          </tr>
        </table>
      </div>              
    <?php
                }
              }
            }
          ?>
</body>
</html><?php
// Funktion för att sanera alla element i en array
function sanitize($arr)
{
  // Om det är en array, tillämpa sanering rekursivt
  if (is_array($arr)) {
    return array_map('sanitize', $arr);
  }
  // Ta bort NULL-tecken från strängar
  return str_replace("\0", "", $arr);
}

// Skapa en ny loggfil om den inte finns
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);

    // Ange filbehörigheter
    chmod($filePath, 0666);
  } else {
  }
}
Spara filen med förlängningen ".php".
Detta avslutar introduktionen av PHP-koden för "Nedladdningsräknare/Program för att se nedladdningshistorik." Vi hoppas att du finner det användbart.

Det kan finnas fel i ordval eftersom det är en översättning från den japanska versionen. Vi ber om ursäkt för eventuella olägenheter, men om det finns ett fel i ordvalet i koden, vänligen korrigera eller justera det själv.

Din feedback på att använda denna kod uppskattas. Observera att jag inte kan svara på frågor.

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

Last updated : 2024/02/05