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

Download Counter
Download History Viewing Program
= I-download at I-install ang PHP Code =
Sample Download Counter

Introduksyon:

Ito ay isang introduksyon sa isang programa na nagbibigay-daan sa iyo na malaman ang bilang ng mga pag-download kapag ang isang tagagamit ng web page ay nagda-download at gumagamit ng isang programa. Maaari kang mag-set up ng isang download counter sa pahina, at ang mga administrator ng site ay maaari rin nang madali na mag-check ng kasaysayan ng download sa browser.

[Halimbawa na Nakalagay sa Pahina]
Kabuuang mga Download: 1865[Ngayon:23 Kahapon:76
[Halimbawa na Buksan sa Browser]
* Kung ang isang pahina na may link sa download ay nagpapakita ng isang mensahe na nagtatanong para sa pag-save ng file at isinasara ng walang pagsisimula ng pag-download, ito ay bibilangin pa rin bilang isang pag-download. Ito ay sapagkat binibilang ang bilang ng mga click sa link.
Mga Tagubilin sa Pag-download:

Mula sa pahinang ito, i-download ang compressed "zip" file ng programa at i-install ito sa iyong sariling site. Ang file ay may pangalan na "count.php", ngunit maaari mong baguhin ito.

Malaya kang gumamit at baguhin ang code, kabilang ang pagbabago ng disenyo ng pahina.

Mangyaring baguhin ang code upang magdagdag ng bagong mga function o baguhin ang disenyo upang lumikha ng isang pahina na madaling maintindihan at gamitin.

 I-download ang PHP Program:

Mga Tagubilin sa Pag-i-install:

I-unzip ang i-download na "count.php.zip" file, at lumikha ng isang file na may pangalan na "count.php". Mangyaring lumikha ng isang directory tulad ng "download_history" at doon ito i-save.

Ang "zip" file ay naglalaman lamang ng isang file, "count.php," at ang "login screen" para sa administrator ay awtomatikong nililikha.

Mga Setting:

Ito ang pangunahing paraan ng pag-set. Ang mga pangunahing bahagi ay naka-lista rin sa PHP file.

  1. Mga Setting sa Password:
    1. Kailangang mag-set ng isang password para sa pahina ng administrator.
    2. Ang default na password ay "admin", ngunit baguhin ito sa anumang string na gusto mo.
    3. Upang palakasin ang seguridad, mag-set ng isang malakas na password.
  2. Pag-set ng mga File na I-download:
    1. Kumpletuhin ang mga setting para sa "$targetFiles = array()".
    2. Ito ang bahagi tulad ng "'1' => 'Your URL/file name.zip',".
  3. Direktoryo para sa Pag-i-save ng mga Log Files:
    1. Isang direktoryo na may pangalan na "log" ang kinakailangan sa remote server upang mag-save ng mga log files na nagre-record ng kasaysayan.
    2. Awtomatikong lumilikha ng direktoryong tinatawag na "log" ang programa kapag ito ay na-upload sa unang pagkakataon. Gayunpaman, kung makakatanggap ka ng mensahe tulad ng "Walang direktoryo", mangyaring lumikha at i-upload ito nang hiwalay.
  4. Unang Pagkakataong Display ng Pag-upload ng Kasaysayan:
    1. Kapag unang na-upload, ang "petsa" at ang numero na "0" ay maaaring ma-display sa kasaysayan.
    2. Ito ay sapagkat naglilikha rin ng mga log files tulad ng "count_1.log" na naglalaman ng petsa ng upload sa awtomatikong nilikhang direktoryong "log".
    3. Kung ito ay nakakairita sa iyo, i-download ang isang file tulad ng "count_1.log" mula sa remote server, burahin ang data, at i-upload ito.
    4. Gayunpaman, ang "petsa" at "0" na estado ay maaari rin namang isang kasaysayan ng kung kailan nagsimula ang counter. Kung mayroong pag-download sa araw na iyon, ito ay bibilangin.
  5. Pamamalagi ng Display ng Pahinang Nakikita ng Administrator:
    1. Kapag tiningnan ng mga administrator ang pahina, maaari nilang piliin kung ipapakita nila ang URL o tanging ang pangalan ng file lamang.
    2. Kung maraming mga history table ang nasa isang pahina, maaari mong piliin na panatilihing nasa order na itinakda ng "$targetFiles = array()" o i-sort sila sa order ng petsa kung kailan nagkaroon ng mga bagong log.
  6. Disenyo ng Pahina, CSS, at iba pa:
    1. Mangyaring i-adjust ang disenyo ng pahina, CSS, at iba pa, ayon sa naaangkop upang gawing madali ang pagbabasa ng pahina.
    2. Noong una, ang CSS ay isinulat bilang isang external file, ngunit ngayon ito ay isinulat sa parehong pahina upang maaari mong pagbasehan ng mga tag kapag nagbabago ng CSS.
  7. Pagsasaayos ng Link sa Pag-download sa Pahina:
    1.  Karaniwan, ang download <a> tag ay isinusulat tulad ng sumusunod:
      <a href="/download_history/sample.zip" download="Pangalan ng File kapag nagdo-download.zip">[Kaswal na string]</a>
    2. Sa program na ito, isulat ang download <a> tag tulad ng sumusunod:
    3. [Halimbawa]Kopyahin
      <a href="/download_history/count.php?download=1" download="Pangalan ng File kapag nagdo-download.zip" target="_blank">[Kaswal na string]</a>
    4. I-match ang numero sa "download=1" sa numero na itinakda sa "$targetFiles = array()". Ang setting na ito ay kumakatawan sa mga file na iba-download.
    5. Mangyaring i-match ang landas sa iyong pahina.
    6. Mangyaring i-upload ang pahina na may link sa download pagkatapos i-upload ang file na may "$targetFiles = array()" (sa halimbawang ito, "count.php").
  8. Code para sa Pagpapakita ng Kasaysayan sa Isang Linya:
    1. Lumikha ng sumusunod na JavaScript at ilagay ito sa pahina na nais mong ipakita:
    2. [Halimbawa]Kopyahin
      <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
    3. I-match ang numero sa "dsp_count=1" sa numero na itinakda sa "$targetFiles = array()".
    4. Kung burahin mo ang "&day_dsp=on," tanging ang "kabuuang bilang" ang ipapakita nang walang "ngayon/kahapon" na display.
    5. Kabuuang mga Download: 1865[Ngayon:23 Kahapon:76
      Kabuuang mga Download: 1865
    6. Mangyaring i-match ang landas sa iyong pahina.
Tungkol sa Mga Setting ng Extension

Kapag nagpapakita ng maraming mga table, ang default na setting ng programa ay mag-sort ayon sa pinakabagong oras ng update. Kung nais mong mag-sort ayon sa kabuuang bilang ng download, lumikha ng isang bagong file tulad ng "total_downloads.php" at palitan ang sumusunod na bahagi.

  1. Pagbabago sa mga komento
    Palitan ang mga komento sa sumusunod na seksyon:
    // Pumili kung papalitan ang orihinal na array ng bago at i-sort ayon sa order ng bagong mga logs kapag nagpapakita ng maraming mga table sa isang pahina
  2. Kopyahin ang papalitan na komento
    // Kung nagpapakita ng maraming mga table sa pahina, pumili kung papalitan ang orihinal na array at i-sort ayon sa kabuuang bilang ng mga downloads.
  3. Pagbabago sa Code at mga Komento
    Palitan ang code at mga komento sa sumusunod na seksyon. Mangyaring isaalang-alang ito bilang isang block.
    // Kunin ang mga file path at ang kanilang pinakabagong update na petsa (itinakda sa descending order ayon sa petsa)
    $filePathsAndDates = array();
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $filePathsAndDates[$key] = filemtime($path);
        } else {
           // Ipakita ang error sa log at magpasya kung itutuloy o ipapahinto ang proseso
            echo "Error: File does not exist - $path<br>";
        }
    }
    
    // I-sort sa descending order ayon sa pinakabagong update na petsa (ang pinakabagong petsa ay nauuna)
    arsort($filePathsAndDates);
    
    // I-rebuild ang array ng mga sorted file path
    $sortedFilePaths = array();
    foreach ($filePathsAndDates as $key => $date) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  4. Kopyahin ang papalitang code at komento
    // Array na nag-iimbak ng kabuuang bilang ng mga downloads
    $totalDownloads = array();
    
    // Kunin ang file path at ang kabuuang bilang ng mga downloads nito
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $line = file($path);
            $total = 0;
    
           // I-add ang bilang ng mga downloads para sa bawat row
            foreach ($line as $val) {
                $valArray = explode(',', $val);
                $total += trim($valArray[1]);
            }
    
           // I-save ang kabuuang bilang ng mga downloads sa isang array
            $totalDownloads[$key] = $total;
        } else {
            /// Ilabas ang error na ito sa log at magpasiya kung itutuloy o ititigil ang proseso
            echo "Error: File does not exist - $path";
        }
    }
    
    // I-sort ayon sa kabuuang bilang ng mga downloads sa pababa
    arsort($totalDownloads);
    
    // I-rebuild ang na-sort na array ng mga file path
    $sortedFilePaths = array();
    foreach ($totalDownloads as $key => $total) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  5. Paglikha at Pag-setup ng File
    1. Kapag lumilikha ng maraming mga pahina, upang maiwasan ang mga pagkakamali sa pag-set ng mga item habang idinadagdag ang content nang uniform, lumikha ng sumusunod na bahagi ng code bilang isang external file, at i-load ito sa kasalukuyang ipinatupad na bahagi gamit ang ibang code. Lumikha ng isang external file na may pangalan tulad ng "config.php".
    // Konfigurasyon ng mga file na ido-download. Kung mayroong maraming mga file, idagdag ito bilang '2', '3', '4', atbp. Ang '0' rin ay wasto.
    // Gamitin ang "http:" o "https:" para sa protocol.
    $targetFiles = array(
    '1' => 'YourURL/FileName.zip',
    '2' => 'YourURL/FileName.pdf',
    '3' => 'YourURL/FileName.pdf',
    '4' => 'YourURL/FileName.pdf', );
  6. Kopyahin ang sample ng bahagi na gagawing "config.php"
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>DownloadHistory</title>
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    </head>
    <body>
    <?php
    // Gawing external file lamang ang bahaging ito at i-load ito sa pahina na gagamitin mo gamit ang "include __DIR__ . '/config.php';"
    // Konfigurasyon ng mga file na ido-download. Kung mayroong maraming mga file, idagdag ito bilang '2', '3', '4', atbp. Ang '0' rin ay wasto.
    // Gamitin ang "http:" o "https:" para sa protocol.
    $targetFiles = array(
    '1' => 'YourURL/FileName.zip',
    '2' => 'YourURL/FileName.pdf',
    '3' => 'YourURL/FileName.pdf',
    '4' => 'YourURL/FileName.pdf', ); ?> </body> </html>
  7. Code para i-load ang external file at kung saan ilalagay ito
    1. Isama ang file na nilikha na may pangalan tulad ng "config.php" sa sumusunod na lokasyon gamit ang code na "include __DIR__ . '/config.php';".
    2. I-komento o tanggalin ang sumusunod na seksyon at palitan ito ng code na "include __DIR__ . '/config.php';".
    //$targetFiles = array(
    // '1' => 'YourURL/FileName.zip',
    // '2' => 'YourURL/FileName.pdf',
    // '3' => 'YourURL/FileName.pdf',
    // '4' => 'YourURL/FileName.pdf',
    //);
  8. Kopyahin ang code na papalit
    include __DIR__ . '/config.php';
* Ang "font-family" sa programa ay dapat iakma sa iyong sariling site kung kinakailangan.
《 PHP Code para Lumikha ng Download Counter 》
I-save ang file na may extension na ".php".

<?php
//***************************************************************************************************
// Download Counter at Pagsusuri ng Kasaysayan ng Pag-download na Programa sa PHP
// [Ang Kaalaman ng Bawat Isa Ay Kaunting Kapaki-pakinabang na Aklat]
//        Minna no Chishiki Chotto Benricho
//        みんなの知識 ちょっと便利帳
// https://www.benricho.org/Tips/download_history/
// Inilabas: Pebrero 11, 2024
//
// Overview:
// Ang programang ito ay isang sistema para sa pagsubaybay sa kasaysayan ng pag-download ng mga file, na may kakayahang pagsuri ng user authentication.
// Kasama dito ang mga feature tulad ng input data sanitization, paglikha ng log file, at pagpapakita ng estadistika ng pag-download.
// Malaya kang gamitin ito, kabilang ang pagbabago sa code at pagbabago sa disenyo ng pahina.
//
// Tandaan:
// Bago mag-upload ng pahina na naglalaman ng mga link ng pag-download, siguruhing i-configure ang seksyon na "$targetFiles = array()" ng file na ito,
// at i-upload ang pahinang ito bago ang pahina na may mga link ng pag-download.
// Ang hindi paggawa nito ay maaaring magresulta sa mga user na hindi makapag-download kapag sinusubukan, dahil ang pahinang ito ay nagtatakda at nagsasangguni sa mga file na ido-download.
//
// Konfigurasyon at Tala:
// ① Ang password ay nakatakda sa "admin," ngunit mangyaring palitan ito sa anumang nais na string.
// ② Ang "log" directory para sa pag-iimbak ng mga log file ay awtomatikong nililikha sa unang upload.
// Gayunpaman, kung magkatagpo ka ng mga mensahe tulad ng "directory not found," mangyaring i-upload ito nang hiwalay.
// ③ Sa unang upload, ang display ng kasaysayan ay nagpapakita ng "date" at ang numero na "0."
// Ito ay dahil ang mga log file tulad ng "count_1.log" na may kasamang petsa ng upload ay sabay na nililikha sa awtomatikong nilikhang "log" directory.
// Kung ito ay isang pangamba, pumunta sa remote server, i-download ang mga file tulad ng "count_1.log," burahin ang data, at pagkatapos i-upload ito.
// ④ Kapag nagpapakita ng maraming mga table sa isang pahina sa display ng kasaysayan, maaari kang pumili kung panatilihin ang array na itinakda sa [$targetFiles = array] o ipakita sila sa kronolohikal na order.
// ⑤ Sa display ng kasaysayan, maaari kang pumili kung isama ang domain sa 1) pagpapakita ng file o 2) pagpapakita lamang ng pangalan ng file.
//
// [Format ng Link sa Pahina na may mga Link ng Pag-download]
// [Halimbawa] <a href="/download_history/count.php?download=Registered Number" download="DownloadedFileName.zip" target="_blank">[Any String]</a>
// ① I-adjust ang numero sa "download=1" sa numero na itinakda sa "$targetFiles = array()".
// ② I-adjust ang landas upang tugmaan ang iyong pahina.
//
// [Code (JavaScript) para sa pagpapakita ng kasaysayan sa isang linya sa pahina kung saan inilalagay ang link ng pag-download]
// [Halimbawa] <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
// ① I-adjust ang numero sa "dsp_count=1" sa numero na itinakda sa "$targetFiles = array()".
// ② Kung tatanggalin mo ang "&day_dsp=on," magpapakita ito lamang ng "total" nang walang "today" at "yesterday".
// ③ I-adjust ang landas upang tugmaan ang iyong pahina.
//***************************************************************************************************

// Konfigurasyon ng mga file na ido-download. Kung mayroong maraming mga file, idagdag ito bilang '2', '3', '4', atbp. Ang '0' rin ay wasto.
// Gamitin ang "http:" o "https:" para sa protocol.
$targetFiles = array(
    '1' => 'YourURL/FileName.zip',
    '2' => 'YourURL/FileName.pdf',
    '3' => 'YourURL/FileName.pdf',
    '4' => 'YourURL/FileName.pdf',
);

// Itakda ang character encoding para sa HTML output
header("Content-Type: text/html; charset=utf-8");

// Character encoding sa pahina na nagpapakita ng kasaysayan ng pag-download
$encodingType = 'UTF-8';

// Tukuyin ang impormasyon sa user authentication at iba pang mga setting
$userid = 'admin';   // User ID (palitan ang 'admin' ng anumang string)
$password = 'admin'; // Password (palitan ang 'admin' ng anumang string)
$hashedPassword = password_hash($password, PASSWORD_DEFAULT); // Gamitin ang password_hash() upang mag-enerate ng hash value
$dataLogDir = 'log/'; // Ang 'log' directory ay awtomatikong nililikha ng programa na ito. Kung hindi nilikha, i-upload ang isang directory na may pangalan na 'log' nang hiwalay

// Pumili kung isasama ang domain kapag nagpapakita ng pangalan ng file o hindi
$includeDomain = 1;  // 1: Ipakita kasama ang pangalan ng domain, 0: Ipakita lamang ang pangalan ng file

// Pumili kung papalitan ang orihinal na array ng bago at i-sort ayon sa order ng bagong mga logs kapag nagpapakita ng maraming mga table sa isang pahina
$sortTables = 1;  // 1: Sort, 0: Do not sort

$dir = 'log'; // Directory para sa pag-iimbak ng mga log file at kasaysayan ng pag-download

// Kunin ang domain ng iyong site
$domain = $_SERVER['HTTP_HOST'];

// Pamamahala ng sesyon: Pigilan ang session hijacking at gamitin ang session_set_cookie_params()
session_set_cookie_params(0, '/', $domain, true, true); // Itakda ang HttpOnly at Secure flags
session_start();
if (!isset($_SESSION['auth'])) {
    $_SESSION['auth'] = FALSE;
}

// Password hashing: Gamitin ang password_needs_rehash()
if (password_needs_rehash($hashedPassword, PASSWORD_DEFAULT)) {
    $newHashedPassword = password_hash($password, PASSWORD_DEFAULT);
    // I-save ang bagong hash value sa isang database, atbp.
}

// Likhaan ang directory kung hindi ito umiiral
if (!is_dir($dir)) {
    if (mkdir($dir, 0755, true)) {
    } else {
        // Ipakita kung nagtagumpay ang paglikha ng directory
        echo 'Mangyaring lumikha ng "' . $dataLogDir . '" directory at i-upload ito nang hiwalay.';
    }
}

// Suriin kung ang log directory ay writable
if (!is_writable($dataLogDir)) {
    die('Ang "' . $dataLogDir . '" directory ay hindi umiiral o walang write permissions. Mangyaring lumikha ng directory at itakda nang wasto ang permissions (hal. 755).');
}

// Kunin ang base na petsa at petsa kahapon
$baseDay = date("Y/m/d");
$yesterday = date("Y/m/d", strtotime("-1 day"));

// Function para kunin ang araw ng linggo mula sa petsa
function getDayOfWeek($date)
{
    $dayOfWeek = date('w', strtotime($date));
    $weekDays = array('Dom', 'Lun', 'Mar', 'Miy', 'Huw', 'Biy', 'Sab');
    return $weekDays[$dayOfWeek];
}

// Itakda ang file path para sa bawat target file at lumikha ng log file kung hindi ito umiiral
foreach ($targetFiles as $key => $val) {
    $filePath[$key] = $dataLogDir . "count_" . $key . ".log";

    // Lumikha ng log file kung hindi ito umiiral
    if (!file_exists($filePath[$key])) {
        createLogFile($filePath[$key]);
    }
}

// Kunin ang mga file path at ang kanilang pinakabagong update na petsa (itinakda sa descending order ayon sa petsa)
$filePathsAndDates = array();
foreach ($filePath as $key => $path) {
    if (file_exists($path)) {
        $filePathsAndDates[$key] = filemtime($path);
    } else {
        // Ipakita ang error sa log at magpasya kung itutuloy o ipapahinto ang proseso
        echo "Error: File does not exist - $path<br>";
    }
}

// I-sort sa descending order ayon sa pinakabagong update na petsa (ang pinakabagong petsa ay nauuna)
arsort($filePathsAndDates);

// I-rebuild ang array ng mga sorted file path
$sortedFilePaths = array();
foreach ($filePathsAndDates as $key => $date) {
    $sortedFilePaths[$key] = $filePath[$key];
}

// Nang kondisyonal, pumili kung gagamitin ang mga sorted na landas para sa pag-sort
$filePath = ($sortTables) ? $sortedFilePaths : $filePath;

// Ibahagi ang code ng JavaScript sa client (dynamically na pagpapakita ng bilang ng pag-download)
if (isset($_GET['dsp_count'])) {
    header("Content-type: application/x-javascript");

    // Itakda ang header bilang isang JavaScript file
    if (!preg_match("/^[0-9]+$/", $_GET['dsp_count'])) {
        echo "document.write(\"Ang parameter ay dapat na half-width number\")";
        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]);
        }
    }

    // Kung ang opsyon ng display ng petsa ay ON, ipakita kasama ang petsa
    if (isset($_GET['day_dsp']) && $_GET['day_dsp'] == 'on') {
        $countDsp = <<<EOF
document.write('<div class="counter_inpage">Total downloads: <strong>{$total}</strong>[<span class="count_today">Today : <strong>{$todayCount}</strong></span>  <span class="count_yesterday">Yesterday : <strong>{$yesterdayCount}</strong></span>]</div>')
EOF;
    } else {
        // Kung ang opsyon ng display ng petsa ay OFF, ipakita lamang ang kabuuang bilang ng pag-download
        $countDsp = <<<EOF
document.write('<p class="counter_inpage">Total downloads: {$total}</p>')
EOF;
    }

    // Kung ang character encoding ay hindi UTF-8, i-convert
    if ($encodingType != 'UTF-8') $countDsp = mb_convert_encoding($countDsp, "$encodingType", 'UTF-8');
    echo $countDsp;

    exit();
}

// Paggawa ng Proseso kapag humiling ng pag-download ng file
if (isset($_GET['download'])) {
    $fileId = $_GET['download'];

    // Lumabas kung ang file ID ay hindi isang numero o kung ang file ID ay hindi umiiral
    if (!preg_match("/^[0-9]+$/", $fileId) || !isset($filePath[$fileId])) {
        exit('Maling numerikong parameter');
    }

    // Buksan ang file at i-lock ito
    $fp = fopen($filePath[$fileId], "rb+");
    if (!$fp) {
        exit('Tagumpay na magbukas ng file');
    }

    flock($fp, LOCK_EX);

    // Basahin ang log file at itago ito sa isang array
    $line = array();
    while (($data = fgets($fp)) !== false) {
        $line[] = $data;
    }

    // I-truncate ang file at magdagdag ng isang bagong linya ng petsa sa simula
    ftruncate($fp, 0);
    rewind($fp);

    // Magdagdag ng isang bagong linya ng petsa sa simula kung hindi ito umiiral
    if (strpos($line[0], $baseDay) === false) {
        $writeLine = $baseDay . ',1' . "\n";
        fwrite($fp, $writeLine);
    }

    // Proseso ng bawat linya sa file
    foreach ($line as $val) {
        // Taasan ang bilang ng pag-download para sa kasalukuyang petsa
        if (strpos($val, $baseDay) !== false) {
            $valArray = explode(',', $val);
            $valArray[1] = rtrim($valArray[1], "\n") + 1;
            $val = $valArray[0] . ',' . $valArray[1] . "\n";
        }
        fwrite($fp, $val);
    }

    // I-flush ang buffer at i-release ang lock
    fflush($fp);
    flock($fp, LOCK_UN);

    // Isara ang file
    fclose($fp);

    // Linisin ang output buffer
    ob_end_clean();

    // Simulan ang pag-download ng file
    header("Location: {$targetFiles[$fileId]}");
    exit();
} else {
    // Simulan ang sesyon, sirain ang sesyon kung hinihiling ang pag-logout
    session_start();
    if (isset($_GET['logout'])) {
        $_SESSION = array();
        session_destroy();
    }

    $loginError = '';

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

    // Gamitin ang password hash function upang mag-generate ng hash value
    // Proseso ng pag-login
    if (isset($_POST['userid']) && isset($_POST['password'])) {
        // Ihambing ang hash values para sa authentication
        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 {
            // Proseso para sa pagkabigo sa authentication
            $_SESSION['auth'] = FALSE;
            $loginError = '<div style="text-align: center; color: crimson;">Maling user ID o password.</div>';
        }
    }

    // Kung ang authentication ay hindi matagumpay, ipakita ang login screen
    if ($_SESSION['auth'] !== TRUE) {
        ?>
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="utf-8">
            <meta name="robots" content="NOINDEX,NOFOLLOW">
            <title>Login Screen ng Kasaysayan ng Pag-download</title>
            <!-- Mga estilo ng login screen (maaaring baguhin ayon sa kailangan)-->
            <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">【Tingnan ang Kasaysayan ng Pag-download】</p>
                    <?php if (isset($loginError)): ?>
                        <!-- Ipakita ang mensahe ng error kung ang $loginError variable ay itinakda -->
                        <p style="color: crimson;"><?php echo $loginError; ?></p>
                    <?php endif; ?>
                    <label for="userid">User ID:</label>
                    <input type="text" id="userid" name="userid" required>
                    <label for="password">Password:</label>
                    <input type="password" id="password" name="password" required>
                    <?php
                        // Sa pag-aakala na $showPassword ay isang PHP variable na nagtatakda kung dapat ipakita ang password sa simula
                        echo '<label class="passwordshow" for="showPassword">[Ipakita ang Password]<div class="center-container"><input type="checkbox" id="show

Password" onchange="togglePasswordVisibility()" ' . ($showPassword ? 'checked' : '') . '></div></label>';
                    ?>
                    <button type="submit" name="login_submit">Mag-login</button>
                </form>   
            </div>

<!-- Kontrolin ang pagiging kita ng password -->
<script>
  function togglePasswordVisibility() {
    var passwordInput = document.getElementById('password');
    var showPasswordCheckbox = document.getElementById('showPassword');

    if (showPasswordCheckbox.checked) {
      // Kung naka-check, ipapakita ang password
      passwordInput.type = 'text';
    } else {
      // Uncheck para itago ang password
      passwordInput.type = 'password';
    }
  }
</script>
</body>
</html><?php
exit();
} else {
  // Kung naka-login, ipakita ang pahina ng kasaysayan ng pag-download
  ?>
  <!DOCTYPE html>
  <html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    <title>Kasaysayan ng Pag-download</title>
    <!-- Estilo ng pagtingin ng kasaysayan ng pag-download (maaaring baguhin ayon sa kailangan) -->
    <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">【Kasaysayan ng Pag-download】 【<a href="?logout=true">Logout</a>】</div> 
    <?php foreach($filePath as $key => $val){ ?>                      
      <div class="log_table">         
        <div class="get_url"><?php echo $includeDomain ? $targetFiles[$key] : basename($targetFiles[$key]); ?></div>
        <table align="center">
          <tr>
            <th class="tableheader">Petsa</th>
            <th class="tableheader">Pag-download</th>
          </tr>
          <?php	  
            $totalDownload = 0;

            // Basahin lamang kung umiiral ang file
            if (file_exists($val)) {
              $line = file($val);
              foreach ($line as $lineVal) {
                $lineArray = explode(',', $lineVal);

                // Suriin kung ang $lineArray[1] ay isang numerikong halaga
                $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">Kabuuang Bilang: <?php echo $totalDownload;?></th>
          </tr>
        </table>
      </div>              
    <?php
                }
              }
            }
          ?>
</body>
</html><?php
// Function upang linisin ang lahat ng element sa isang array
function sanitize($arr)
{
  // Kung ito ay isang array, gamitin ang sanitization recursively
  if (is_array($arr)) {
    return array_map('sanitize', $arr);
  }
  // Alisin ang NULL characters mula sa loob ng mga string
  return str_replace("\0", "", $arr);
}

// Lumikha ng bagong log file kung hindi ito umiiral
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);

    // Itakda ang permissions ng file
    chmod($filePath, 0666);
  } else {
  }
}
I-save ang file na may extension na ".php".
Download Counter/Download History Viewing Program." Sana ay makatulong ito sa inyo.

Maaaring may mga pagkakamali sa mga salita dahil ito ay isang pagsasalin mula sa Japanese version. Humihingi kami ng paumanhin sa abala, ngunit kung mayroong error sa salita sa code, mangyaring ituwid o ayusin ito ng iyong sarili.

Pinahahalagahan ang iyong feedback sa paggamit ng code na ito. Mangyaring tandaan na hindi ako makakasagot sa mga tanong.

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

Last updated : 2024/02/05