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

Letöltésszámláló
Letöltési előzmények megtekintő program
= Letöltés és telepítés PHP kódja =
Példa letöltésszámláló

Bevezetés:

Ez egy olyan program bemutatása, amely lehetővé teszi számodra, hogy megtudd a letöltések számát, amikor egy weboldal felhasználó letölt és használ egy programot. Lehetséges egy letöltésszámlálót felállítani az oldalon, és az oldal adminisztrátorai könnyedén ellenőrizhetik a letöltési előzményeket a böngészőben.

[Az oldalra telepített állapot]
Összes letöltés: 1865[Ma: 23 Tegnap: 76
[Mint böngészőben megnyitva]
Megjegyzés: Ha egy letöltési hivatkozást tartalmazó oldal megjeleníti a fájl mentésére utasító üzenetet, és letöltés nélkül bezáródik, akkor az még mindig letöltésként lesz számolva. Ennek oka, hogy a hivatkozások számát számolja.
Letöltési utasítások:

Erről az oldalról töltsd le a program tömörített "zip" fájlját, és telepítsd saját oldaladra. A fájl neve "count.php", de átnevezheted.

Szabadon felhasználhatod és módosíthatod a kódot, beleértve az oldal tervezésének megváltoztatását is.

Kérjük, módosítsd a kódot, hogy új funkciókat adj hozzá vagy megváltoztasd a tervezést, hogy egy könnyen érthető és használható oldalt hozz létre.

 PHP Program letöltése:

Telepítési utasítások:

Csomagold ki a letöltött "count.php.zip" fájlt, és létrejön egy "count.php" nevű fájl. Kérlek, hozz létre egy "download_history" nevű könyvtárat, és mentsd el oda.

A "zip" fájl csak egy "count.php" nevű fájlt tartalmaz, az "adminisztrátor bejelentkező képernyője" automatikusan létrejön.

Beállítások:

Ez a fő beállítási mód. Ezek a fő részek szerepelnek a PHP fájlban.

  1. Jelszó beállítások:
    1. Jelszót kell beállítani az adminisztrátori oldalhoz.
    2. Az alapértelmezett jelszó "admin", de változtasd meg bármilyen karaktersorozatra.
    3. A biztonság fokozása érdekében állíts be erős jelszót.
  2. Letöltendő fájlok beállítása:
    1. Végezd el a beállításokat a "$targetFiles = array()" részhez.
    2. Ez az a rész, mint például "'1' => 'A te URL/fájl neve.zip',".
  3. Naplófájlok mentésére szolgáló könyvtár:
    1. Egy "log" nevű könyvtár szükséges a távoli szerveren a történetet rögzítő naplófájlok tárolásához.
    2. Ez a program automatikusan létrehoz egy "log" nevű könyvtárat az első feltöltéskor. Ha azonban olyan üzenetet kapsz, mint "Nincs könyvtár", kérlek, hozz létre és töltsd fel külön.
  4. Első feltöltési előzmények megjelenítése:
    1. Az első feltöltéskor az "időpont" és a "0" szám megjelenhet a történetben.
    2. Ez azért van, mert naplófájlokat, például "count_1.log"-ot is generál a feltöltés időpontját tartalmazó "log" könyvtárban.
    3. Ha ez zavar, tölts le egy olyan fájlt, mint a "count_1.log" a távoli szerverről, töröld az adatokat, majd töltsd fel újra.
    4. Azonban az "időpont" és a "0" állapot lehet a számláló indításának története is. Ha azon a napon történik letöltés, akkor az számításba kerül.
  5. Adminisztrátori megtekintési oldal megjelenítése:
    1. Amikor az adminisztrátorok megtekintik az oldalt, választhatják, hogy megjelenítsék-e az URL-t vagy csak a fájlnevet.
    2. Ha több előzmény táblázatot helyezel el egy oldalon, választhatsz, hogy megtartod-e az "$targetFiles = array()" által beállított sorrendet, vagy rendezd azokat a dátum alapján, amikor új naplók jelentek meg.
  6. Oldaltervezés, CSS, stb.:
    1. Kérlek, állítsd be az oldaltervezést, CSS-t stb. megfelelően, hogy az oldal könnyen olvasható legyen.
    2. Egykoron a CSS-t külső fájlként írták, de most ugyanazon az oldalon írják, hogy hivatkozhass a címkékre, amikor a CSS-t változtatod.
  7. Letöltési hivatkozás beállítása az oldalon:
    1.  Általában a letöltési <a> címkét így írják:
      <a href="/download_history/sample.zip" download="Letöltéskor megjelenő fájlnév.zip">[Tetszőleges szöveg]</a>
    2. Ebben a programban a letöltési <a> címkét így írd:
    3. [Példa]Másold
      <a href="/download_history/count.php?download=1" download="Letöltéskor megjelenő fájlnév.zip" target="_blank">[Tetszőleges szöveg]</a>
    4. Egyeztesd a "download=1" számot a "$targetFiles = array()" beállított számával. Ez a beállítás a letöltendő fájlokat érinti.
    5. Egyeztesd az utat az oldaladhoz.
    6. Kérlek, töltsd fel az oldalt a letöltési hivatkozással, miután feltöltötted a fájlt a "$targetFiles = array()" beállítással (ebben a példában "count.php").
  8. Kód az előzmények egy sorban való megjelenítéséhez:ド
    1. Hozz létre az alábbi JavaScriptet, és helyezd el azon az oldalon, ahol meg akarod jeleníteni:
    2. [Példa]Másold
      <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
    3. Egyeztesd a "dsp_count=1" számot a "$targetFiles = array()" beállított számával.
    4. Ha törölsz "&day_dsp=on"-t, csak a "teljes szám" lesz megjelenítve a "ma/tegnap" megjelenítés nélkül.
    5. Összes letöltés:1865[Ma: 23 Tegnap: 76
      Összes letöltés:1865
    6. Egyeztesd az utat az oldaladhoz.
Bővítménybeállítások

Több táblázat megjelenítésekor a program alapértelmezett beállítása az, hogy a legfrissebb frissítési idő szerint rendezzen. Ha a letöltések összes számára szeretnél rendezni, hozz létre egy új fájlt, például "total_downloads.php", és cseréld le a következő részt.

  1. Megjegyzés változtatás
    Cseréld le a megjegyzéseket az alábbi szakaszban:
    // Válaszd ki, hogy az eredeti tömböt cseréli-e egy újra, amelyet az új naplók sorrendjében rendeztek-e megjelenítéskor több táblázatot egy oldalon
  2. Másold a csere megjegyzést
    // Ha több táblázatot jelenítesz meg az oldalon, válaszd ki, hogy cseréled-e az eredeti tömböt, és rendezd az összes letöltés számának sorrendjében.
  3. Kód- és megjegyzésváltoztatások
    Cseréld le a kódot és a megjegyzéseket az alábbi szakaszban. Kérlek, tekintsd ezt egy blokknak.
    // Fájlok elérési útjának és utolsó frissítési dátumának lekérése (csökkenő sorrendben a legújabb dátum alapján)
    $filePathsAndDates = array();
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $filePathsAndDates[$key] = filemtime($path);
        } else {
            // Írd ki ezt a hibát a naplóba, és döntsd el, hogy folytatod-e a folyamatot vagy megszakítod
            echo "Hiba: A fájl nem létezik - $path<br>";
        }
    }
    
    // Rendezés csökkenő sorrendben az utolsó frissítési dátum szerint (hogy az újabb dátumok előbb kerüljenek))
    arsort($filePathsAndDates);
    
    // Újraépítés rendezett fájlelérési út tömb
    $sortedFilePaths = array();
    foreach ($filePathsAndDates as $key => $date) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  4. Másold a csere kódot és megjegyzéseket
    // Több letöltési számot tároló tömb
    $totalDownloads = array();
    
    // Lekérdezzük a fájl elérési útját és annak összes letöltési számát
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $line = file($path);
            $total = 0;
    
            // Összeadjuk a letöltések számát minden sorhoz
            foreach ($line as $val) {
                $valArray = explode(',', $val);
                $total += trim($valArray[1]);
            }
    
            // Tároljuk az összes letöltés számát egy tömbben
            $totalDownloads[$key] = $total;
        } else {
            // Írd ki ezt a hibát a naplóba, és döntsd el, hogy folytatod-e a folyamatot vagy megszakítod
            echo "Hiba: A fájl nem létezik - $path";
        }
    }
    
    // Rendezés az összes letöltési szám szerint csökkenő sorrendben
    arsort($totalDownloads);
    
    // Újraépítés rendezett fájlelérési út tömb
    $sortedFilePaths = array();
    foreach ($totalDownloads as $key => $total) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  5. Fájl létrehozása és beállítása
    1. Ha több oldalt hozol létre, hogy egyenletesen hozzáadott tartalommal ne kövess el beállítási hibákat, az alábbi részét a kódnak külső fájlként hozd létre, és töltsd be az aktuálisan implementált részbe más kóddal. Hozz létre egy külső fájlt "config.php" néven.
    // Letöltendő fájlok konfigurációja. Ha több fájl van, add hozzá őket '2', '3', '4', stb. A '0' is érvényes.
    // A protokollhoz használd a "http:" vagy "https:" -et.
    $targetFiles = array(
    '1' => 'AzURL/cím/Neve.zip',
    '2' => 'AzURL/cím/Neve.pdf',
    '3' => 'AzURL/cím/Neve.pdf',
    '4' => 'AzURL/cím/Neve.pdf',
    );
  6. Másold a rész mintáját, amit "config.php"-nak kell nevezni
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>DownloadHistory</title>
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    </head>
    <body>
    <?php
    // Csak ezt a részt hozd létre külső fájlként, és töltsd be az oldaladba ezzel: "include __DIR__ . '/config.php';"
    // Letöltendő fájlok konfigurációja. Ha több fájl van, add hozzá őket '2', '3', '4', stb. A '0' is érvényes.
    // A protokollhoz használd a "http:" vagy "https:" -et.
    $targetFiles = array(
    '1' => 'AzURL/cím/Neve.zip',
    '2' => 'AzURL/cím/Neve.pdf',
    '3' => 'AzURL/cím/Neve.pdf',
    '4' => 'AzURL/cím/Neve.pdf',
    ); ?> </body> </html>
  7. Külső fájl betöltése és elhelyezése
    1. Töltsd be a "config.php"-ként létrehozott fájlt az alábbi helyre a "include __DIR__ . '/config.php';" kóddal.
    2. Az alábbi részt kommenteld ki vagy töröld ki, majd cseréld le a kóddal "include __DIR__ . '/config.php';".
    // $targetFiles = array(
    // '1' => 'AzURL/cím/Neve.zip',
    // '2' => 'AzURL/cím/Neve.pdf',
    // '3' => 'AzURL/cím/Neve.pdf',
    // '4' => 'AzURL/cím/Neve.pdf',
    //);
  8. Másold a kódot a csere érdekében
    include __DIR__ . '/config.php';
《 PHP kód a Letöltésszámláló létrehozásához 》
Mentsd el a fájlt ".php" kiterjesztéssel.

<?php
//***************************************************************************************************
// Letöltésszámláló és Letöltési előzmények megjelenítő PHP program
// [Mindenki kis hasznos tudás könyve]
//        Minna no Chishiki Chotto Benricho
//        みんなの知識 ちょっと便利帳
// https://www.benricho.org/Tips/download_history/
// Kiadva: 2024. február 27.
//
// Áttekintés:
// Ez a program egy olyan rendszer, amely a fájlok letöltésének előzményeit követi, felhasználói hitelesítési funkcionalitással ellátva.
// Tartalmaz olyan funkciókat, mint az adatok szankcionálása, naplófájl létrehozása és a letöltési statisztikák megjelenítése.
// Szabadon felhasználhatja, beleértve a kód módosítását és az oldal tervezésének megváltoztatását.
//
// Megjegyzés:
// Mielőtt feltölti a letöltési linkeket tartalmazó oldalt, győződjön meg arról, hogy konfigurálta-e e fájl "$targetFiles = array()" részét,
// és feltöltötte-e ezt az oldalt a letöltési linkekkel rendelkező oldal előtt.
// Ha ezt elmulasztja, akkor a felhasználók nem tudják letölteni a kísérletet, mivel ez az oldal beállítja és hivatkozik a letöltendő fájlokra.
//
// Konfiguráció és megjegyzések:
// ① A jelszó beállítva "admin" értékre, de kérjük, változtassa meg azt bármilyen kívánt karakterláncra.
// ② A naplófájlok tárolására szolgáló "log" könyvtár automatikusan létrejön az első feltöltéskor.
// Azonban ha olyan üzenetekkel találkozik, mint "könyvtár nem található", külön kell feltöltenie.
// ③ Az első feltöltéskor a történeti megjelenítés "dátumot" és a "0" számot mutatja.
// Ez azért van, mert a feltöltés dátumával ellátott naplófájlok, mint például a "count_1.log", egyidejűleg generálódnak az automatikusan létrehozott "log" könyvtárban.
// Ha ez probléma, hozzáférhet a távoli szerverhez, letöltheti a "count_1.log" fájlokat, törölheti az adatokat, majd feltöltheti őket.
// ④ Amikor több táblát jelenít meg az előzmények megjelenítésén az oldalon, választhatja, hogy megőrzi-e a [$targetFiles = array] beállított tömböt, vagy időrendi sorrendben jelenítse meg őket.
// ⑤ Az előzmények megjelenítésénél választhatja, hogy a 1) fájl megjelenítésénél beleérti-e a tartományt, vagy csak a fájlnevet jelenítse meg.
//
// [Link formátuma a Letöltési linkekkel rendelkező oldalon]
// [Példa] <a href="/download_history/count.php?download=Regisztrált szám" download="LetöltöttFájlnév.zip" target="_blank">[Bármilyen szöveg]</a>
// ① Állítsa be a "download=1" számot az "$targetFiles = array()" beállított számra.
// ② Állítsa be az utat az oldalához.
//
// [Kód (JavaScript) a történet megjelenítéséhez egy sorban az oldalon, ahol a letöltési link található]
// [Példa] <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
// ① Állítsa be a "dsp_count=1" számot az "$targetFiles = array()" beállított számra.
// ② Ha eltávolítja a "&day_dsp=on" részt, csak a "teljes" kijelzőt jeleníti meg, anélkül, hogy "ma" és "tegnap" lenne.
// ③ Állítsa be az utat az oldalához.
//***************************************************************************************************

// Konfiguráció a letölthető fájlokhoz. Ha több fájl van, add hozzá őket '2', '3', '4', stb. A '0' érvényes.
// A protokollhoz használj "http:"-t vagy "https:"-t.
$targetFiles = array(
    '1' => 'AzURL/FileName.zip',
    '2' => 'AzURL/FileName.pdf',
    '3' => 'AzURL/FileName.pdf',
    '4' => 'AzURL/FileName.pdf',
);

// Beállítja a karakterkódolást a HTML kimenethez
header("Content-Type: text/html; charset=utf-8");

// A letöltési előzményeket megjelenítő oldalon a karakterkódolás beállítása
$encodingType = 'UTF-8';

// Felhasználói hitelesítési adatok és egyéb beállítások meghatározása
$userid = 'admin';   // Felhasználói azonosító (cseréld ki az 'admin'-t bármilyen karakterláncra)
$password = 'admin'; // Jelszó (cseréld ki az 'admin'-t bármilyen karakterláncra)
$hashedPassword = password_hash($password, PASSWORD_DEFAULT); // A hash érték generálásához használja a password_hash() függvényt
$dataLogDir = 'log/'; // A 'log' könyvtár automatikusan létrejön ennek a programnak az első feltöltésekor. Ha nem jön létre, töltsd fel különállóan a 'log' nevű könyvtárat

// Válaszd ki, hogy a fájlnevet tartalmazzák-e a tartományba vagy sem
$includeDomain = 1;  // 1: A tartománynévvel együtt jelenítse meg, 0: Csak a fájlnevet jelenítse meg

// Válaszd ki, hogy az eredeti tömböt cseréli-e egy újra, amelyet az új naplók sorrendjében rendeztek-e megjelenítéskor több táblázatot egy oldalon
$sortTables = 1;  // 1: Rendezés, 0: Ne rendezze

$dir = 'log'; // A naplófájlokat és a letöltési előzményeket tároló könyvtár

// Szerezz információt az oldal domainjáról
$domain = $_SERVER['HTTP_HOST'];

// Munkamenetkezelés: Megakadályozza a munkamenet-eltérítést, és használja a session_set_cookie_params() függvényt
session_set_cookie_params(0, '/', $domain, true, true); // Állítsa be a HttpOnly és a Secure zászlókat
session_start();
if (!isset($_SESSION['auth'])) {
    $_SESSION['auth'] = FALSE;
}

// Jelszóhashelés: Használja a password_needs_rehash() függvényt
if (password_needs_rehash($hashedPassword, PASSWORD_DEFAULT)) {
    $newHashedPassword = password_hash($password, PASSWORD_DEFAULT);
    // Mentsd el az új hash értéket az adatbázisban stb.
}

// Hozd létre a könyvtárat, ha nem létezik
if (!is_dir($dir)) {
    if (mkdir($dir, 0755, true)) {
    } else {
        // Jelenítsd meg, ha a könyvtár létrehozása nem sikerül
        echo 'Kérlek, hozz létre egy "' . $dataLogDir . '" nevű könyvtárat, és töltsd fel különállóan.';
    }
}

// Ellenőrizd, hogy a naplókönyvtár írható-e
if (!is_writable($dataLogDir)) {
    die('A "' . $dataLogDir . '" könyvtár nem létezik vagy nem rendelkezik írási jogosultságokkal. Kérlek, hozd létre a könyvtárat, és állítsd be a jogosultságokat megfelelően (pl. 755).');
}

// Szerezd meg az alap dátumot és a tegnapi dátumot
$baseDay = date("Y/m/d");
$yesterday = date("Y/m/d", strtotime("-1 day"));

// Függvény a hétfőtől szombatig tartó napok lekéréséhez egy dátumból
function getDayOfWeek($date)
{
    $dayOfWeek = date('w', strtotime($date));
    $weekDays = array('Vas', 'Hét', 'Ke', 'Sze', 'Csü', 'Pé', 'Szo');
    return $weekDays[$dayOfWeek];
}

// Állítsd be a fájl elérési útvonalát minden célfájlhoz, és hozz létre egy naplófájlt, ha nem létezik
foreach ($targetFiles as $key => $val) {
    $filePath[$key] = $dataLogDir . "count_" . $key . ".log";

    // Hozd létre a naplófájlt, ha nem létezik
    if (!file_exists($filePath[$key])) {
        createLogFile($filePath[$key]);
    }
}

// Szerezd meg a fájl elérési útvonalait és azok utolsó frissítési dátumait (a dátumok csökkenő sorrendben rendezve)
$filePathsAndDates = array();
foreach ($filePath as $key => $path) {
    if (file_exists($path)) {
        $filePathsAndDates[$key] = filemtime($path);
    } else {
        // Írd ki ezt a hibát a naplóba, és döntsd el, hogy folytatod-e a folyamatot vagy megszakítod
        echo "Hiba: A fájl nem létezik - $path<br>";
    }
}

// Rendezd csökkenő sorrendben az utolsó frissítési dátum alapján (az újabb dátumok előre kerülnek)
arsort($filePathsAndDates);

// Új raépíti a rendezett fájl elérési útvonal tömböt
$sortedFilePaths = array();
foreach ($filePathsAndDates as $key => $date) {
    $sortedFilePaths[$key] = $filePath[$key];
}

// Feltételes választás, hogy a rendezett elérési utakat használja-e a rendezéshez
$filePath = ($sortTables) ? $sortedFilePaths : $filePath;

// Visszaadja a JavaScript kódot a kliensnek (a letöltésszámlálók dinamikus megjelenítése)
if (isset($_GET['dsp_count'])) {
    header("Content-type: application/x-javascript");

    // Beállítja a fejlécet JavaScript fájlként
    if (!preg_match("/^[0-9]+$/", $_GET['dsp_count'])) {
        echo "document.write(\"A paraméternek félig széles számnak kell lennie\")";
        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]);
        }
    }

    // Ha a dátum megjelenítési lehetőség BE van kapcsolva, akkor a dátummal együtt jelenítse meg
    if (isset($_GET['day_dsp']) && $_GET['day_dsp'] == 'on') {
        $countDsp = <<<EOF
document.write('<div class="counter_inpage">Összes letöltés: <strong>{$total}</strong>[<span class="count_today">Ma : <strong>{$todayCount}</strong></span>  <span class="count_yesterday">Tegnap : <strong>{$yesterdayCount}</strong></span>]</div>')
EOF;
    } else {
        // Ha a dátum megjelenítési lehetőség KI van kapcsolva, akkor csak az összes letöltés számát jelenítse meg
        $countDsp = <<<EOF
document.write('<p class="counter_inpage">Összes letöltés: {$total}</p>')
EOF;
    }

    // Ha a karakterkódolás nem UTF-8, konvertálja
    if ($encodingType != 'UTF-8') $countDsp = mb_convert_encoding($countDsp, "$encodingType", 'UTF-8');
    echo $countDsp;

    exit();
}

// Fájlletöltési kérelem feldolgozása
if (isset($_GET['download'])) {
    $fileId = $_GET['download'];

    // Kilépés, ha a fájl azonosítója nem szám, vagy ha a fájl azonosítója nem létezik
    if (!preg_match("/^[0-9]+$/", $fileId) || !isset($filePath[$fileId])) {
        exit('Helytelen numerikus paraméter');
    }

    // Nyissa meg a fájlt és zárja le
    $fp = fopen($filePath[$fileId], "rb+");
    if (!$fp) {
        exit('Nem sikerült megnyitni a fájlt');
    }

    flock($fp, LOCK_EX);

    // Olvassa be a naplófájlt és tárolja egy tömbben
    $line = array();
    while (($data = fgets($fp)) !== false) {
        $line[] = $data;
    }

    // Vágja le a fájlt, és adjon hozzá egy új dátum sort a kezdetére
    ftruncate($fp, 0);
    rewind($fp);

    // Adjunk hozzá egy új dátum sort a kezdetére, ha még nem létezik
    if (strpos($line[0], $baseDay) === false) {
        $writeLine = $baseDay . ',1' . "\n";
        fwrite($fp, $writeLine);
    }

    // Dolgozza fel az egyes sorokat a fájlban
    foreach ($line as $val) {
        // Növelje meg a letöltési számot az aktuális dátumhoz
        if (strpos($val, $baseDay) !== false) {
            $valArray = explode(',', $val);
            $valArray[1] = rtrim($valArray[1], "\n") + 1;
            $val = $valArray[0] . ',' . $valArray[1] . "\n";
        }
        fwrite($fp, $val);
    }

    // Puffer kiürítése és zárózár feloldása
    fflush($fp);
    flock($fp, LOCK_UN);

    // Fájl bezárása
    fclose($fp);

    // Kimeneti puffer törlése
    ob_end_clean();

    // Végrehajtja a fájl letöltését
    header("Location: {$targetFiles[$fileId]}");
    exit();
} else {
    // Indítsa el a munkamenetet, és törölje a munkamenetet, ha a kijelentkezés a kérések között van
    session_start();
    if (isset($_GET['logout'])) {
        $_SESSION = array();
        session_destroy();
    }

    $loginError = '';

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

    // Jelszó hash funkció használata egy hash érték létrehozásához
    // Bejelentkezési feldolgozás
    if (isset($_POST['userid']) && isset($_POST['password'])) {
        // Összehasonlítás hash értékekkel az azonosításhoz
        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 {
            // Feldolgozás hitelességi hiba esetén
            $_SESSION['auth'] = FALSE;
            $loginError = '<div style="text-align: center; color: crimson;">Helytelen felhasználónév vagy jelszó.</div>';
        }
    }

    // Ha a hitelesítés nem sikerült, jelenítse meg a bejelentkezési képernyőt
    if ($_SESSION['auth'] !== TRUE) {
        ?>
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="utf-8">
            <meta name="robots" content="NOINDEX,NOFOLLOW">
            <title>Letöltési előzmények bejelentkezési képernyő</title>
            <!-- Bejelentkezési képernyő stílusok (szükség szerint módosítható) -->
            <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">【Letöltési előzmények megtekintése】</p>
                    <?php if (isset($loginError)): ?>
                        <!-- Hiba üzenet megjelenítése, ha a $loginError változó be van állítva -->
                        <p style="color: crimson;"><?php echo $loginError; ?></p>
                    <?php endif; ?>
                    <label for="userid">Felhasználónév:</label>
                    <input type="text" id="userid" name="userid" required>
                    <label for="password">Jelszó:</label>
                    <input type="password" id="password" name="password" required>
                    <?php
                        // Feltételezzük, hogy $showPassword egy PHP változó, amely meghatározza, hogy kezdetben látható-e a jelszó
                        echo '<label class="passwordshow" for="showPassword">[Jelszó megjelenítése]<div class="center-container"><input type="checkbox" id="showPassword" onchange="togglePasswordVisibility()" ' . ($showPassword ? 'checked' : '') . '></div></label>';
                    ?>
                    <button type="submit" name="login_submit">Bejelentkezés</button>
                </form>   
            </div>

<!-- A jelszó láthatóságának vezérlése -->
<script>
  function togglePasswordVisibility() {
    var passwordInput = document.getElementById('password');
    var showPasswordCheckbox = document.getElementById('showPassword');

    if (showPasswordCheckbox.checked) {
      // Ha be van jelölve, a jelszó látható lesz
      passwordInput.type = 'text';
    } else {
      // Kijelölés megszüntetése a jelszó elrejtéséhez
      passwordInput.type = 'password';
    }
  }
</script>
</body>
</html><?php
exit();
} else {
  // Ha be van jelentkezve, jelenítse meg a letöltési előzmények oldalt
  ?>
  <!DOCTYPE html>
  <html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    <title>Letöltési előzmények</title>
    <!-- Letöltési előzmények megtekintési stílus (szükség szerint módosítható) -->
    <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">【Letöltési előzmények】 【<a href="?logout=true">Kijelentkezés</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">Dátum</th>
            <th class="tableheader">Letöltések</th>
          </tr>
          <?php	  
            $totalDownload = 0;

            // Csak akkor olvassa el, ha a fájl létezik
            if (file_exists($val)) {
              $line = file($val);
              foreach ($line as $lineVal) {
                $lineArray = explode(',', $lineVal);

                // Ellenőrizze, hogy $lineArray[1] numerikus érték-e
                $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">Összes letöltés: <?php echo $totalDownload;?></th>
          </tr>
        </table>
      </div>              
    <?php
                }
              }
            }
          ?>
</body>
</html><?php
// Tömb összes elemének szankcionálása
function sanitize($arr)
{
  // Ha tömb, alkalmazza a szankcionálást rekurzívan
  if (is_array($arr)) {
    return array_map('sanitize', $arr);
  }
  // Törölje a NULL karaktereket a stringekből
  return str_replace("\0", "", $arr);
}

// Új naplófájl létrehozása, ha nem létezik
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);

    // Fájlengedélyek beállítása
    chmod($filePath, 0666);
  } else {
  }
}
Mentsd el a fájlt ".php" kiterjesztéssel.
Ezzel befejeztük a "Letöltésszámláló/Letöltési előzmények megtekintő program" PHP kódjának bemutatását. Reméljük, hasznosnak találod.

Előfordulhatnak hibák a szövegben, mivel a japán verzióból történő fordítás. Elnézést kérünk a kellemetlenségért, de ha hibás a szöveg a kódban, kérlek, javítsd vagy igazítsd ki magad.

Visszajelzésed a kód használatáról értékeljük. Kérlek, vedd figyelembe, hogy nem tudok válaszolni a kérdésekre.

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

Last updated : 2024/02/05