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

Contor de descărcări
Program de vizualizare a istoricului de descărcări
= Descărcare și instalare Cod PHP =
Eșantion contor de descărcări

Introducere:

Aceasta este o introducere la un program care vă permite să cunoașteți numărul de descărcări atunci când un utilizator de pe pagină web descarcă și utilizează un program. Este posibil să configurați un contor de descărcări pe pagină, iar administratorii site-ului pot verifica, de asemenea, ușor istoricul descărcărilor în browser.

[Eșantion instalat pe pagină]
Descărcări totale: 1865[Astăzi: 23 Ieri: 76
[Eșantion deschis în browser]
Notă: Dacă o pagină cu un link de descărcare afișează un mesaj care solicită salvarea fișierului și este închisă fără a iniția descărcarea, tot va fi considerată o descărcare. Aceasta se datorează faptului că se numără numărul de clicuri pe link.
Instrucțiuni de descărcare:

De pe această pagină, descărcați fișierul "zip" comprimat al programului și instalați-l pe propriul site. Fișierul se numește "count.php", dar puteți să-l schimbați.

Aveți libertatea să utilizați și să modificați codul, inclusiv să schimbați designul paginii.

Vă rugăm să modificați codul pentru a adăuga funcții noi sau pentru a schimba designul și a crea o pagină ușor de înțeles și de utilizat.

 Descărcare program PHP:

Instrucțiuni de instalare:

Dezarhivați fișierul "count.php.zip" descărcat și se va crea un fișier numit "count.php". Vă rugăm să creați un director, cum ar fi "download_history" și să-l salvați acolo.

Fișierul "zip" conține doar un singur fișier, "count.php," iar "ecranul de conectare" pentru administrator este generat automat.

Setări:

Aceasta este metoda principală de configurare. Aceste părți principale sunt enumerate și în fișierul PHP.

  1. Setări de parolă:
    1. Trebuie setată o parolă pentru pagina de administrator.
    2. Parola implicită este "admin", dar o puteți schimba cu orice șir dorit.
    3. Pentru a îmbunătăți securitatea, setați o parolă puternică.
  2. Setarea fișierelor de descărcat:
    1. Finalizați setările pentru "$targetFiles = array()".
    2. Aceasta este partea cum ar fi "'1' => 'URL-ul/Fișierul dvs. nume.zip',".
  3. Director pentru salvarea fișierelor de jurnal:
    1. Este necesar un director numit "log" pe serverul remote pentru a stoca fișierele de jurnal care înregistrează istoricul.
    2. Acest program creează automat un director numit "log" când încărcați pentru prima dată. Cu toate acestea, dacă primiți un mesaj cum ar fi "Niciun director", vă rugăm să-l creați și să-l încărcați separat.
  4. 初Afișare istoric încărcare pentru prima dată:
    1. La încărcarea pentru prima dată, "data" și numărul "0" pot fi afișate în istoric.
    2. Aceasta se datorează faptului că sunt generate și fișiere de jurnal precum "count_1.log" care conțin data încărcării în directorul "log" generat automat.
    3. Dacă acest lucru vă deranjează, descărcați un fișier cum ar fi "count_1.log" de pe serverul remote, ștergeți datele și încărcați-l.
    4. Cu toate acestea, starea "dată" și "0" poate fi și un istoric al momentului în care a fost pornit contorul. Dacă există o descărcare în acea zi, va fi numărată.
  5. Afișarea paginii de vizualizare a administratorului:
    1. Atunci când administratorii văd pagina, puteți alege dacă să afișați URL-ul sau doar numele fișierului.
    2. Dacă sunt plasate mai multe tabele de istoric pe o singură pagină, puteți alege să le păstrați în ordinea setată de "$targetFiles = array()" sau să le sortați în ordinea datei când au apărut noi jurnale.
  6. Designul paginii, CSS, etc.:
    1. Vă rugăm să ajustați designul paginii, CSS-ul, etc., așa cum considerați potrivit pentru a face pagina ușor de citit.
    2. Odată, CSS-ul a fost scris ca un fișier extern, dar acum este scris pe aceeași pagină, astfel încât să puteți să vă referiți la etichetele atunci când schimbați CSS-ul.
  7. Configurare link descărcare pe pagină:
    1.  În mod normal, eticheta de descărcare <a> este scrisă astfel:
      <a href="/download_history/sample.zip" download="Numele fișierului atunci când se descarcă.zip">[Șir arbitrar]</a>
    2. În acest program, scrieți eticheta de descărcare <a> astfel:
    3. [Exemplu]Copiere
      <a href="/download_history/count.php?download=1" download="Numele fișierului atunci când se descarcă.zip" target="_blank">[Șir arbitrar]</a>
    4. Potriviți numărul din "download=1" cu numărul setat în "$targetFiles = array()". Această setare se referă la fișierele care trebuie descărcate.
    5. Vă rugăm să potriviți calea către pagina dvs.
    6. Vă rugăm să încărcați pagina cu linkul de descărcare după ce ați încărcat fișierul cu "$targetFiles = array()" (în acest exemplu, "count.php").
  8. Cod pentru afișarea istoricului într-o linie:
    1. Creați următorul JavaScript și plasați-l pe pagina pe care doriți să o afișați:
    2. [Exemplu]Copiere
      <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
    3. Potriviți numărul din "dsp_count=1" cu numărul setat în "$targetFiles = array()".
    4. Dacă ștergeți "&day_dsp=on," va fi afișat doar "numărul total" fără afișarea "astăzi/ieri".
    5. Descărcări totale: 1865[Astăzi: 23 Ieri: 76
      Descărcări totale: 1865
    6. Vă rugăm să potriviți calea către pagina dvs.
Despre Configurările Extensiei

Când sunt afișate mai multe tabele, setarea implicită a programului este să fie sortate după ultima actualizare. Dacă doriți să sortați după numărul total de descărcări, creați un fișier nou precum "total_downloads.php" și înlocuiți următoarea parte.

  1. Schimbare în comentarii
    Înlocuiți comentariile din următoarea secțiune:
    // Alegeți dacă să înlocuiți array-ul original cu unul nou sortat în ordinea noilor jurnale la afișarea mai multor tabele pe o pagină
  2. Copiați comentariul de înlocuire
    // Dacă sunt afișate mai multe tabele pe pagină, alegeți dacă să înlocuiți array-ul original și să sortați în ordinea numărului total de descărcări.
  3. Schimbări de cod și comentarii
    Înlocuiți codul și comentariile din următoarea secțiune. Vă rugăm să o considerați ca fiind un bloc unic.
    // Obțineți căile fișierelor și ultimele lor date de actualizare (sortate în ordine descrescătoare a datei)
    $filePathsAndDates = array();
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $filePathsAndDates[$key] = filemtime($path);
        } else {
           // Afișați această eroare în jurnal și decideți dacă să continuați sau să întrerupeți procesul
            echo "Eroare: Fișierul nu există - $path<br>";
        }
    }
    
    // Sortare descrescătoare după data de actualizare (data cea mai recentă vine prima)
    arsort($filePathsAndDates);
    
    // Reconstruiți array-ul de căi de fișiere sortate
    $sortedFilePaths = array();
    foreach ($filePathsAndDates as $key => $date) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  4. Copiați codul și comentariile de înlocuire
    // Array care stochează numărul total de descărcări
    $totalDownloads = array();
    
    // Obțineți calea fișierului și numărul total de descărcări
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $line = file($path);
            $total = 0;
    
           // Adunați numărul de descărcări pentru fiecare rând
            foreach ($line as $val) {
                $valArray = explode(',', $val);
                $total += trim($valArray[1]);
            }
    
            // Stocați numărul total de descărcări într-un array
            $totalDownloads[$key] = $total;
        } else {
            // Afișați această eroare în jurnal și decideți dacă să continuați sau să întrerupeți procesul
            echo "Eroare: Fișierul nu există - $path";
        }
    }
    
    // Sortați după numărul total de descărcări în ordine descrescătoare
    arsort($totalDownloads);
    
    // Reconstruiți array-ul sortat de căi de fișiere
    $sortedFilePaths = array();
    foreach ($totalDownloads as $key => $total) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  5. Creare și configurare fișier
    1. Atunci când creați mai multe pagini, pentru a preveni erorile în setările elementelor în timp ce adăugați conținut uniform, creați următoarea parte a codului ca un fișier extern și încărcați-l în partea implementată în prezent cu un cod diferit. Creați un fișier extern cu un nume precum "config.php".
    // Configurarea fișierelor de descărcat. Dacă există mai multe fișiere, adăugați-le ca '2', '3', '4', etc. De asemenea, '0' este valid.
    // Utilizați "http:" sau "https:" pentru protocol.
    $targetFiles = array(
    '1' => 'YourURL/FileName.zip',
    '2' => 'YourURL/FileName.pdf',
    '3' => 'YourURL/FileName.pdf',
    '4' => 'YourURL/FileName.pdf',
    );
  6. Copiați exemplul părții care va fi numită "config.php"
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>DownloadHistory</title>
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    </head>
    <body>
    <?php
    // Faceți doar această parte un fișier extern și încărcați-l în pagina pe care o utilizați cu "include __DIR__ . '/config.php';"
    // Configurarea fișierelor de descărcat. Dacă există mai multe fișiere, adăugați-le ca '2', '3', '4', etc. De asemenea, '0' este valid.
    // Utilizați "http:" sau "https:" pentru protocol.
    $targetFiles = array(
    '1' => 'YourURL/FileName.zip',
    '2' => 'YourURL/FileName.pdf',
    '3' => 'YourURL/FileName.pdf',
    '4' => 'YourURL/FileName.pdf',
    ); ?> </body> </html>
  7. Cod pentru încărcarea fișierelor externe și unde să-l puneți
    1. Includeți fișierul creat cu un nume precum "config.php" în locația următoare cu codul "include __DIR__ . '/config.php';".
    2. Comentați sau ștergeți următoarea secțiune și înlocuiți-o cu codul "include __DIR__ . '/config.php';".
    // $targetFiles = array(
    // '1' => 'YourURL/FileName.zip',
    // '2' => 'YourURL/FileName.pdf',
    // '3' => 'YourURL/FileName.pdf',
    // '4' => 'YourURL/FileName.pdf',
    // );
  8. Copiați codul pentru a fi înlocuit
    include __DIR__ . '/config.php';
《Codul PHP pentru a Crea Contorul de Descărcări》
Salvați fișierul cu extensia ".php".

<?php
//***************************************************************************************************
// Program PHP pentru Contorul de Descărcări și Vizualizatorul de Istoric al Descărcărilor
// [Everyone's Knowledge A Little Useful Book]
//        Minna no Chishiki Chotto Benricho
//        みんなの知識 ちょっと便利帳
// https://www.benricho.org/Tips/download_history/
// Lansat: 29 februarie 2024
//
// Descriere generală:
// Acest program este un sistem pentru urmărirea istoricului descărcărilor de fișiere, dotat cu funcționalitate de autentificare a utilizatorului.
// Include caracteristici precum dezinfectarea datelor de intrare, crearea fișierelor jurnal și afișarea statisticilor de descărcare.
// Aveți libertatea să îl utilizați, inclusiv să modificați codul și să schimbați designul paginii.
//
// Notă:
// Înainte de a încărca pagina care conține linkurile de descărcare, asigurați-vă că configurați secțiunea "$targetFiles = array()" a acestui fișier,
// și încărcați această pagină înaintea paginii cu linkurile de descărcare.
// Neefectuarea acestor operații poate duce la imposibilitatea utilizatorilor de a descărca atunci când încearcă, deoarece această pagină stabilește și face referire la fișierele de descărcat.
//
// Configurare și Note:
// ① Parola este setată la "admin", dar vă rugăm să o schimbați cu orice șir dorit.
// ② Directorul "log" pentru stocarea fișierelor jurnal este generat automat la prima încărcare.
// Cu toate acestea, dacă întâmpinați mesaje precum "directorul nu este găsit", vă rugăm să îl încărcați separat.
// ③ La încărcarea inițială, afișajul istoricului arată "dată" și numărul "0".
// Acest lucru se datorează faptului că fișierele jurnal precum "count_1.log" cu data încărcării sunt generate simultan în directorul "log" creat automat.
// Dacă acest lucru este o preocupare, accesați serverul de la distanță, descărcați fișiere precum "count_1.log", ștergeți datele și apoi încărcați.
// ④ La afișarea mai multor tabele pe o pagină în afișarea istoricului, puteți alege dacă să păstrați array-ul setat în [$targetFiles = array] sau să le afișați în ordine cronologică.
// ⑤ În afișarea istoricului, puteți alege dacă să includeți domeniul în 1) afișarea fișierului sau 2) afișarea doar a numelui fișierului.
//
// [Formatul Linkului pe Pagina cu Linkurile de Descărcare]
// [Exemplu] <a href="/download_history/count.php?download=Număr Înregistrat" download="NumeFișierDescărcat.zip" target="_blank">[Orice Șir]</a>
// ① Ajustați numărul în "download=1" la numărul setat în "$targetFiles = array()".
// ② Ajustați calea pentru a se potrivi cu pagina dvs.
//
// [Cod (JavaScript) pentru afișarea istoricului într-o singură linie pe pagina în care este plasat linkul de descărcare]
// [Exemplu] <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
// ① Ajustați numărul în "dsp_count=1" la numărul setat în "$targetFiles = array()".
// ② Dacă eliminați "&day_dsp=on,", se va afișa doar "totalul" fără afișarea "astăzi" și "ieri".
// ③ Ajustați calea pentru a se potrivi cu pagina dvs.
//***************************************************************************************************

// Configurarea fișierelor de descărcat. Dacă există mai multe fișiere, adăugați-le ca '2', '3', '4', etc. De asemenea, '0' este valid.
// Utilizați "http:" sau "https:" pentru protocol.
$targetFiles = array(
    '1' => 'YourURL/FileName.zip',
    '2' => 'YourURL/FileName.pdf',
    '3' => 'YourURL/FileName.pdf',
    '4' => 'YourURL/FileName.pdf',
);

// Setarea codării de caractere pentru ieșirea HTML
header("Content-Type: text/html; charset=utf-8");

// Codificarea caracterelor pe pagina care afișează istoricul de descărcare
$encodingType = 'UTF-8';

// Definirea informațiilor de autentificare a utilizatorului și alte setări
$userid = 'admin';   // ID utilizator (înlocuiți 'admin' cu orice șir)
$password = 'admin'; // Parolă (înlocuiți 'admin' cu orice șir)
$hashedPassword = password_hash($password, PASSWORD_DEFAULT); // Utilizați password_hash() pentru a genera un hash
$dataLogDir = 'log/'; // Directorul 'log' este generat automat de acest program. Dacă nu este creat, încărcați un director numit 'log' separat

// Alegeți dac ă să includeți domeniul atunci când afișați numele fișierului sau nu
$includeDomain = 1;  // 1: Afișați includerea numelui de domeniu, 0: Afișați doar numele fișierului

// Alegeți dacă să înlocuiți array-ul original cu unul nou sortat în ordinea noilor jurnale la afișarea mai multor tabele pe o pagină
$sortTables = 1;  // 1: Sortare, 0: Nu sortați

$dir = 'log'; // Director pentru stocarea fișierelor jurnal și a istoricului de descărcare

// Obțineți domeniul site-ului dvs.
$domain = $_SERVER['HTTP_HOST'];

// Gestionarea sesiunii: Preveniți preluarea sesiunii și utilizați session_set_cookie_params()
session_set_cookie_params(0, '/', $domain, true, true); // Setați indicatoarele HttpOnly și Secure
session_start();
if (!isset($_SESSION['auth'])) {
    $_SESSION['auth'] = FALSE;
}

// Criptarea parolei: Utilizați password_needs_rehash()
if (password_needs_rehash($hashedPassword, PASSWORD_DEFAULT)) {
    $newHashedPassword = password_hash($password, PASSWORD_DEFAULT);
    // Salvați noua valoare de hash într-o bază de date, etc.
}

// Creați directorul dacă nu există
if (!is_dir($dir)) {
    if (mkdir($dir, 0755, true)) {
    } else {
        // Afișați dacă crearea directorului eșuează
        echo 'Vă rugăm să creați directorul "' . $dataLogDir . '" și să îl încărcați separat.';
    }
}

// Verificați dacă directorul jurnalului este inscriptibil
if (!is_writable($dataLogDir)) {
    die('Directorul "' . $dataLogDir . '" fie nu există, fie nu are permisiuni de scriere. Vă rugăm să creați directorul și să setați permisiunile corespunzător (de exemplu, 755).');
}

// Obțineți data de bază și data de ieri
$baseDay = date("Y/m/d");
$yesterday = date("Y/m/d", strtotime("-1 day"));

// Funcția pentru a obține ziua săptămânii dintr-o dată
function getDayOfWeek($date)
{
    $dayOfWeek = date('w', strtotime($date));
    $weekDays = array('Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm');
    return $weekDays[$dayOfWeek];
}

// Setați calea fișierului pentru fiecare fișier țintă și creați un fișier jurnal dacă nu există
foreach ($targetFiles as $key => $val) {
    $filePath[$key] = $dataLogDir . "count_" . $key . ".log";

    // Creați fișierul jurnal dacă nu există
    if (!file_exists($filePath[$key])) {
        createLogFile($filePath[$key]);
    }
}

// Obțineți căile fișierelor și ultimele lor date de actualizare (sortate în ordine descrescătoare a datei)
$filePathsAndDates = array();
foreach ($filePath as $key => $path) {
    if (file_exists($path)) {
        $filePathsAndDates[$key] = filemtime($path);
    } else {
        // Afișați această eroare în jurnal și decideți dacă să continuați sau să întrerupeți procesul
        echo "Eroare: Fișierul nu există - $path<br>";
    }
}

// Sortare descrescătoare după data de actualizare (data cea mai recentă vine prima)
arsort($filePathsAndDates);

// Reconstruiți array-ul de căi de fișiere sortate
$sortedFilePaths = array();
foreach ($filePathsAndDates as $key => $date) {
    $sortedFilePaths[$key] = $filePath[$key];
}

// Alegeți condiționat dacă să utilizați căile sortate pentru sortare
$filePath = ($sortTables) ? $sortedFilePaths : $filePath;

// Returnați codul JavaScript către client (afișare dinamică a numărului de descărcări)
if (isset($_GET['dsp_count'])) {
    header("Content-type: application/x-javascript");

    // Setați antetul ca un fișier JavaScript
    if (!preg_match("/^[0-9]+$/", $_GET['dsp_count'])) {
        echo "document.write(\"Parametrul trebuie să fie un număr pe jumătate\")";
        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]);
        }
    }

    // Dacă opțiunea de afișare a datei este activată, afișați includerea datei
    if (isset($_GET['day_dsp']) && $_GET['day_dsp'] == 'on') {
        $countDsp = <<<EOF
document.write('<div class="counter_inpage">Descărcări totale: <strong>{$total}</strong>[<span class="count_today">Astăzi : <strong>{$todayCount}</strong></span>  <span class="count_yesterday">Ieri : <strong>{$yesterdayCount}</strong></span>]</div>')
EOF;
    } else {
        // Dacă opțiunea de afișare a datei este dezactivată, afișați doar numărul total de descărcări
        $countDsp = <<<EOF
document.write('<p class="counter_inpage">Descărcări totale: {$total}</p>')
EOF;
    }

    // Dacă codificarea caracterelor nu este UTF-8, convertiți


    if ($encodingType != 'UTF-8') $countDsp = mb_convert_encoding($countDsp, "$encodingType", 'UTF-8');
    echo $countDsp;

    exit();
}

// Procesarea când este solicitată o descărcare de fișier
if (isset($_GET['download'])) {
    $fileId = $_GET['download'];

    // Ieșiți dacă ID-ul fișierului nu este un număr sau dacă ID-ul fișierului nu există
    if (!preg_match("/^[0-9]+$/", $fileId) || !isset($filePath[$fileId])) {
        exit('Parametru numeric incorect');
    }

    // Deschideți fișierul și blocați-l
    $fp = fopen($filePath[$fileId], "rb+");
    if (!$fp) {
        exit('Nu s-a putut deschide fișierul');
    }

    flock($fp, LOCK_EX);

    // Citiți fișierul jurnal și stocați-l într-un array
    $line = array();
    while (($data = fgets($fp)) !== false) {
        $line[] = $data;
    }

    // Trunchiați fișierul și adăugați o nouă linie de dată la început
    ftruncate($fp, 0);
    rewind($fp);

    // Adăugați o nouă linie de dată la început dacă nu există
    if (strpos($line[0], $baseDay) === false) {
        $writeLine = $baseDay . ',1' . "\n";
        fwrite($fp, $writeLine);
    }

    // Procesați fiecare linie din fișier
    foreach ($line as $val) {
        // Incrementați numărul de descărcări pentru data curentă
        if (strpos($val, $baseDay) !== false) {
            $valArray = explode(',', $val);
            $valArray[1] = rtrim($valArray[1], "\n") + 1;
            $val = $valArray[0] . ',' . $valArray[1] . "\n";
        }
        fwrite($fp, $val);
    }

    // Goliți buffer-ul și eliberați blocarea
    fflush($fp);
    flock($fp, LOCK_UN);

    // Închideți fișierul
    fclose($fp);

    // Ștergeți buffer-ul de ieșire
    ob_end_clean();

    // Efectuați descărcarea fișierului
    header("Location: {$targetFiles[$fileId]}");
    exit();
} else {
    // Începeți sesiunea, distrugeți sesiunea dacă este solicitată ieșirea
    session_start();
    if (isset($_GET['logout'])) {
        $_SESSION = array();
        session_destroy();
    }

    $loginError = '';

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

    // Utilizați funcția de hash pentru parolă pentru a genera o valoare de hash
    // Procesarea autentificării
    if (isset($_POST['userid']) && isset($_POST['password'])) {
        // Comparați valorile de hash pentru autentificare
        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 {
            // Procesarea pentru eșecul autentificării
            $_SESSION['auth'] = FALSE;
            $loginError = '<div style="text-align: center; color: crimson;">ID utilizator sau parolă incorectă.</div>';
        }
    }

    // Dacă autentificarea nu este reușită, afișați ecranul de autentificare
    if ($_SESSION['auth'] !== TRUE) {
        ?>
        <!DOCTYPE html>
        <html lang="ro">
        <head>
            <meta charset="utf-8">
            <meta name="robots" content="NOINDEX,NOFOLLOW">
            <title>Ecran autentificare istoric descărcări</title>
            <!-- Stilurile ecranului de autentificare (modificabile după necesitate)-->
            <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">【Vizualizare istoric descărcări】</p>
                    <?php if (isset($loginError)): ?>
                        <!-- Afișați un mesaj de eroare dacă variabila $loginError este setată -->
                        <p style="color: crimson;"><?php echo $loginError; ?></p>
                    <?php endif; ?>
                    <label for="userid">ID utilizator:</label>
                    <input type="text" id="userid" name="userid" required>
                    <label for="password">Parolă:</label>
                    <input type="

password" id="password" name="password" required>
                    <?php
                        // Presupunând că $showPassword este o variabilă PHP care determină dacă să afișeze inițial parola
                        echo '<label class="passwordshow" for="showPassword">[Afișați parola]<div class="center-container"><input type="checkbox" id="showPassword" onchange="togglePasswordVisibility()" ' . ($showPassword ? 'checked' : '') . '></div></label>';
                    ?>
                    <button type="submit" name="login_submit">Autentificare</button>
                </form>   
            </div>

<!-- Controlați vizibilitatea parolei -->
<script>
  function togglePasswordVisibility() {
    var passwordInput = document.getElementById('password');
    var showPasswordCheckbox = document.getElementById('showPassword');

    if (showPasswordCheckbox.checked) {
      // Dacă este bifat, parola va fi afișată
      passwordInput.type = 'text';
    } else {
      // Debifați pentru a ascunde parola
      passwordInput.type = 'password';
    }
  }
</script>
</body>
</html><?php
exit();
} else {
  // Dacă sunteți autentificat, afișați pagina de istoric descărcări
  ?>
  <!DOCTYPE html>
  <html lang="ro">
  <head>
    <meta charset="utf-8">
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    <title>Istoric descărcări</title>
    <!-- Stilul de vizualizare a istoricului de descărcări (modificabil după necesitate) -->
    <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">【Istoric descărcări】 【<a href="?logout=true">Deconectare</a>】</div> 
    <?php foreach($filePath as $key => $val){ ?>                      
      <div class="log_table">         
        <div class="get_url"><?php echo $includeDomain ? $targetFiles[$key] : basename($targetFiles[$key]); ?></div>
        <table align="center">
          <tr>
            <th class="tableheader">Data</th>
            <th class="tableheader">Descărcări</th>
          </tr>
          <?php	  
            $totalDownload = 0;

            // Citiți doar dacă fișierul există
            if (file_exists($val)) {
              $line = file($val);
              foreach ($line as $lineVal) {
                $lineArray = explode(',', $lineVal);

                // Verificați dacă $lineArray[1] este o valoare numerică
                $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">Total descărcări: <?php echo $totalDownload;?></th>
          </tr>
        </table>
      </div>              
    <?php
                }
              }
            }
          ?>
</body>
</html><?php
// Funcție pentru a dezinfecta toate elementele dintr-un array
function sanitize($arr)
{
  // Dacă este un array, aplicați dezinfectarea recursiv
  if (is_array($arr)) {
    return array_map('sanitize', $arr);
  }
  // Eliminați caracterele NULL din interiorul șirurilor
  return str_replace("\0", "", $arr);
}

// Creați un fișier jurnal nou dacă nu există
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);

    // Setare permisiuni fișier
    chmod($filePath, 0666);
  } else {
  }
}

Aceasta încheie introducerea codului PHP pentru "Contorul de Descărcări/Programul de Vizualizare a Istoricului de Descărcări." Sperăm să vă fie de folos.

Este posibil să existe erori în formulare deoarece este o traducere din versiunea în japoneză. Ne cerem scuze pentru neplăceri, dar dacă există o eroare în formulare în cod, vă rugăm să o corectați sau să o ajustați singur.

Părerea dvs. despre utilizarea acestui cod este apreciată. Vă rugăm să rețineți că nu pot răspunde la întrebări.

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

Last updated : 2024/02/05