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

Counter Unduhan
Program Pemantau Riwayat Unduhan
= Unduh dan Pasang Kode PHP =
Contoh Counter Unduhan

Pengantar:

Ini adalah pengantar untuk program yang memungkinkan Anda mengetahui jumlah unduhan ketika pengguna halaman web mengunduh dan menggunakan suatu program. Anda dapat menyiapkan counter unduhan di halaman tersebut, dan administrator situs juga dapat dengan mudah memeriksa riwayat unduhan di browser.

[Contoh Terpasang di Halaman]
Total Unduhan:1865[Hari Ini:23 Kemarin:76
[Contoh Terbuka di Browser]
Catatan: Jika halaman dengan tautan unduhan menampilkan pesan untuk menyimpan file dan ditutup tanpa memulai unduhan, itu masih akan dihitung sebagai unduhan. Ini karena menghitung jumlah klik tautan.
Instruksi Unduh:

Dari halaman ini, unduh file terkompresi "zip" dari program dan pasang di situs Anda sendiri. File tersebut dinamai "count.php", tetapi Anda dapat mengubahnya.

Anda bebas menggunakan dan memodifikasi kode, termasuk mengubah desain halaman.

Silakan modifikasi kode untuk menambahkan fungsi baru atau mengubah desain untuk membuat halaman yang mudah dipahami dan digunakan.

 Unduh Program PHP:

Instruksi Pemasangan:

Ekstrak file "count.php.zip" yang diunduh, dan sebuah file bernama "count.php" akan dibuat. Harap buat direktori seperti "download_history" dan simpan di sana.

File "zip" hanya berisi satu file, "count.php," dan "layar login" untuk administrator secara otomatis dibuat.

Pengaturan:

Ini adalah metode pengaturan utama. Bagian-bagian utama ini juga terdaftar dalam file PHP.

  1. Pengaturan Kata Sandi:
    1. Kata sandi harus ditetapkan untuk halaman administrator.
    2. Kata sandi default adalah "admin", tetapi ubah menjadi string apa pun yang Anda inginkan.
    3. Untuk meningkatkan keamanan, atur kata sandi yang kuat.
  2. Pengaturan File yang Akan Diunduh:
    1. Selesaikan pengaturan untuk "$targetFiles = array()".
    2. Ini adalah bagian seperti "'1' => 'URL Anda/nama file.zip',".
  3. Direktori untuk Menyimpan File Log:
    1. Direktori bernama "log" diperlukan pada server jarak jauh untuk menyimpan file log yang mencatat riwayat.
    2. Program ini secara otomatis membuat direktori bernama "log" ketika Anda mengunggah untuk pertama kalinya. Namun, jika Anda mendapatkan pesan seperti "Tidak ada direktori", harap buat dan unggah secara terpisah.
  4. Tampilan Riwayat Pengunggahan Pertama Kali:
    1. Saat mengunggah untuk pertama kalinya, "tanggal" dan angka "0" mungkin ditampilkan dalam riwayat.
    2. Ini karena file log seperti "count_1.log" yang berisi tanggal pengunggahan juga dihasilkan dalam direktori "log" yang dibuat secara otomatis.
    3. Jika ini mengganggu Anda, buka server jauh dan unduh file seperti "count_1.log", hapus data dan unggah.
    4. Namun, keadaan "tanggal" dan "0" juga bisa menjadi riwayat saat counter dimulai. Jika ada unduhan pada hari itu, itu akan dihitung.
  5. Tampilan Halaman Administrator:
    1. Saat administrator melihat halaman, Anda dapat memilih apakah akan menampilkan URL atau hanya nama file.
    2. Jika beberapa tabel riwayat ditempatkan di satu halaman, Anda dapat memilih untuk tetap mengikuti urutan yang ditetapkan oleh "$targetFiles = array()" atau mengurutkannya berdasarkan tanggal saat log baru terjadi.
  6. Desain Halaman, CSS, dll.:
    1. Silakan sesuaikan desain halaman, CSS, dll., sesuai kebutuhan untuk membuat halaman mudah dibaca.
    2. Pada satu waktu, CSS ditulis sebagai file eksternal, tetapi sekarang ditulis di halaman yang sama sehingga Anda dapat merujuk ke tag saat mengubah CSS.
  7. Penyiapan Tautan Unduh di Halaman:
    1.  Biasanya, tag unduh <a> ditulis sebagai berikut:
      <a href="/download_history/contoh.zip" download="Nama File Saat Diunduh.zip">[String Arbitrer]</a>
    2. Dalam program ini, tulis tag unduh <a> sebagai berikut:
    3. [Contoh]Salin
      <a href="/download_history/count.php?download=1" download="Nama File Saat Diunduh.zip" target="_blank">[String Arbitrer]</a>
    4. Cocokkan nomor di "download=1" dengan nomor yang ditetapkan di "$targetFiles = array()". Pengaturan ini merujuk pada file yang akan diunduh.
    5. Silakan cocokkan jalur ke halaman Anda.
    6. Silakan unggah halaman dengan tautan unduhan setelah mengunggah file dengan "$targetFiles = array()" (dalam contoh ini, "count.php").
  8. Kode untuk Menampilkan Riwayat dalam Satu Baris:
    1. Buat JavaScript berikut dan letakkan di halaman yang ingin Anda tampilkan:
    2. [Contoh]Salin
      <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
    3. Cocokkan nomor di "dsp_count=1" dengan nomor yang ditetapkan di "$targetFiles = array()".
    4. Jika Anda menghapus "&day_dsp=on," hanya "jumlah total" akan ditampilkan tanpa tampilan "hari ini/kemarin".
    5. Total Unduhan:1865[Hari Ini:23 Kemarin:76
      Total Unduhan:1865
    6. Silakan cocokkan jalur ke halaman Anda.
Tentang Pengaturan Ekstensi

Ketika menampilkan beberapa tabel, pengaturan default program adalah untuk menyortir berdasarkan waktu pembaruan terbaru. Jika Anda ingin menyortir berdasarkan jumlah unduhan total, buat file baru seperti "total_downloads.php" dan gantikan bagian berikut.

  1. Perubahan dalam komentar
    Ganti komentar pada bagian berikut:
    // ページに複数のテーブルを表示した場合、元の配列を置き換えて新しいログの順に並べ替えるかどうかの選択・設定
  2. Salin komentar penggantian
    // Jika menampilkan beberapa tabel di halaman, pilih apakah akan menggantikan array asli dan menyortir berdasarkan jumlah total unduhan.
  3. Perubahan Kode dan Komentar
    Ganti kode dan komentar pada bagian berikut. Pertimbangkan sebagai satu blok.
    // Dapatkan jalur file dan tanggal pembaruan terakhir mereka (diurutkan berdasarkan tanggal secara menurun)
    $filePathsAndDates = array();
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $filePathsAndDates[$key] = filemtime($path);
        } else {
            // Output kesalahan ini ke log dan tentukan apakah akan melanjutkan atau menghentikan proses
            echo "Error: File does not exist - $path
    "; } } // Urutkan secara menurun berdasarkan tanggal pembaruan terakhir (tanggal terbaru muncul pertama) arsort($filePathsAndDates); // Bangun kembali array dari jalur file yang diurutkan $sortedFilePaths = array(); foreach ($filePathsAndDates as $key => $date) { $sortedFilePaths[$key] = $filePath[$key]; }
  4. Salin kode dan komentar penggantian
    // Array yang menyimpan jumlah unduhan total
    $totalDownloads = array();
    
    // Dapatkan jalur file dan jumlah unduhan totalnya
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $line = file($path);
            $total = 0;
    
            // Jumlahkan jumlah unduhan untuk setiap baris
            foreach ($line as $val) {
                $valArray = explode(',', $val);
                $total += trim($valArray[1]);
            }
    
            // Simpan jumlah unduhan total dalam sebuah array
            $totalDownloads[$key] = $total;
        } else {
            // Output kesalahan ini ke log dan tentukan apakah akan melanjutkan atau menghentikan proses
            echo "Error: File does not exist - $path";
        }
    }
    
    // Sortir berdasarkan jumlah unduhan total secara menurun
    arsort($totalDownloads);
    
    // Bangun kembali array yang disortir dari jalur file
    $sortedFilePaths = array();
    foreach ($totalDownloads as $key => $total) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  5. Pembuatan dan Persiapan File
    1. Saat membuat beberapa halaman, untuk mencegah kesalahan dalam menyetel item saat menambahkan konten secara seragam, buat bagian kode berikut sebagai file eksternal, dan muatkan ke bagian yang saat ini diimplementasikan dengan kode yang berbeda. Buat file eksternal dengan nama seperti "config.php".
    // Konfigurasi file untuk diunduh. Jika ada beberapa file, tambahkan sebagai '2', '3', '4', dll. Juga, '0' valid.
    // Gunakan "http:" atau "https:" untuk protokol.
    $targetFiles = array(
        '1' => 'YourURL/FileName.zip',
        '2' => 'YourURL/FileName.pdf',
        '3' => 'YourURL/FileName.pdf',
        '4' => 'YourURL/FileName.pdf',
    );
  6. Salin contoh bagian yang akan dinamai "config.php"
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>DownloadHistory</title>
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    </head>
    <body>
    <?php
    // Jadikan hanya bagian ini sebuah file eksternal dan muatkan ke halaman yang Anda gunakan dengan "include __DIR__ . '/config.php';"
    // Konfigurasi file untuk diunduh. Jika ada beberapa file, tambahkan sebagai '2', '3', '4', dll. Juga, '0' valid.
    // Gunakan "http:" atau "https:" untuk protokol.
    $targetFiles = array(
        '1' => 'YourURL/FileName.zip',
        '2' => 'YourURL/FileName.pdf',
        '3' => 'YourURL/FileName.pdf',
        '4' => 'YourURL/FileName.pdf',
    );
    ?>
    </body>
    </html>
    
  7. Kode untuk Memuat File Eksternal dan Penempatannya
    1. Sertakan file yang dibuat dengan nama seperti "config.php" di lokasi berikut dengan kode "include __DIR__ . '/config.php';".
    2. Komentari atau hapus bagian berikut dan gantikan dengan kode "include __DIR__ . '/config.php';".
    //$targetFiles = array(
    //    '1' => 'YourURL/FileName.zip',
    //    '2' => 'YourURL/FileName.pdf',
    //    '3' => 'YourURL/FileName.pdf',
    //    '4' => 'YourURL/FileName.pdf',
    //);
  8. Salin kode untuk diganti
    include __DIR__ . '/config.php';
* "font-family" dalam program harus disesuaikan dengan situs Anda jika diperlukan.
《 Kode PHP untuk Membuat Penghitung Unduhan 》
Simpan file dengan ekstensi ".php".

<?php
//***************************************************************************************************
// Program Penghitung Unduhan dan Penampil Riwayat Unduhan PHP
// [Buku Pengetahuan Sedikit Berguna untuk Semua Orang]
//        Minna no Chishiki Chotto Benricho
//        みんなの知識 ちょっと便利帳
// https://www.benricho.org/Tips/download_history/
// Dirilis: 7 Februari 2024
//
// Gambaran Umum:
// Program ini adalah sistem untuk melacak riwayat unduhan file, dilengkapi dengan fungsionalitas otentikasi pengguna.
// Ini termasuk fitur-fitur seperti sanitasi data input, pembuatan file log, dan tampilan statistik unduhan.
// Anda bebas menggunakannya, termasuk memodifikasi kode dan mengubah desain halaman.
//
// Catatan:
// Sebelum mengunggah halaman yang berisi tautan unduhan, pastikan untuk mengonfigurasi bagian "$targetFiles = array()" dari file ini,
// dan unggah halaman ini sebelum halaman dengan tautan unduhan.
// Kegagalan untuk melakukannya dapat menyebabkan pengguna tidak dapat mengunduh saat mencoba, karena halaman ini menetapkan dan merujuk file yang akan diunduh.
//
// Konfigurasi dan Catatan:
// ① Kata sandi diatur menjadi "admin," tetapi harap ubah menjadi string yang diinginkan.
// ② Direktori "log" untuk menyimpan file log secara otomatis dibuat saat pengunggahan pertama.
// Namun, jika Anda mengalami pesan seperti "direktori tidak ditemukan," harap unggah secara terpisah.
// ③ Saat pengunggahan awal, tampilan riwayat menunjukkan "tanggal" dan angka "0."
// Ini karena file log seperti "count_1.log" dengan tanggal pengunggahan secara bersamaan dibuat dalam direktori "log" yang dibuat secara otomatis.
// Jika ini menjadi masalah, akses server jarak jauh, unduh file seperti "count_1.log," hapus data, lalu unggah kembali.
// ④ Saat menampilkan beberapa tabel pada halaman dalam tampilan riwayat, Anda dapat memilih apakah akan menyimpan array yang diatur dalam [$targetFiles = array] atau menampilkannya dalam urutan kronologis.
// ⑤ Dalam tampilan riwayat, Anda dapat memilih apakah akan menyertakan domain dalam 1) menampilkan file atau 2) hanya menampilkan nama file saja.
//
// [Format Tautan pada Halaman dengan Tautan Unduhan]
// [Contoh] <a href="/download_history/count.php?download=Nomor Terdaftar" download="NamaFileYangDiunduh.zip" target="_blank">[String Apapun]</a>
// ① Sesuaikan nomor di "download=1" dengan nomor yang diatur dalam "$targetFiles = array()".
// ② Sesuaikan jalur agar sesuai dengan halaman Anda.
//
// [Kode (JavaScript) untuk menampilkan riwayat dalam satu baris pada halaman tempat tautan unduhan ditempatkan]
// [Contoh] <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
// ① Sesuaikan nomor di "dsp_count=1" dengan nomor yang diatur dalam "$targetFiles = array()".
// ② Jika Anda menghapus "&day_dsp=on," itu akan menampilkan hanya "total" tanpa "hari ini" dan "kemarin".
// ③ Sesuaikan jalur agar sesuai dengan halaman Anda.
//***************************************************************************************************

// Konfigurasi file untuk diunduh. Jika ada beberapa file, tambahkan sebagai '2', '3', '4', dll. Juga, '0' valid.
// Gunakan "http:" atau "https:" untuk protokol.
$targetFiles = array(
    '1' => 'YourURL/FileName.zip',
    '2' => 'YourURL/FileName.pdf',
    '3' => 'YourURL/FileName.pdf',
    '4' => 'YourURL/FileName.pdf',
);

// Atur encoding karakter untuk output HTML
header("Content-Type: text/html; charset=utf-8");

// Encoding karakter pada halaman yang menampilkan riwayat unduhan
$encodingType = 'UTF-8';

// Tentukan informasi otentikasi pengguna dan pengaturan lainnya
$userid = 'admin';   // ID Pengguna (ganti 'admin' dengan string apa pun)
$password = 'admin'; // Kata sandi (ganti 'admin' dengan string apa pun)
$hashedPassword = password_hash($password, PASSWORD_DEFAULT); // Gunakan password_hash() untuk menghasilkan nilai hash
$dataLogDir = 'log/'; // Direktori 'log' secara otomatis dibuat oleh program ini. Jika tidak dibuat, unggah direktori bernama 'log' secara terpisah

// Pilih apakah akan menyertakan domain saat menampilkan nama file atau tidak
$includeDomain = 1;  // 1: Tampilkan termasuk nama domain, 0: Tampilkan hanya nama file

// Pilih apakah akan menggantikan array asli dengan yang baru diurutkan sesuai urutan log baru saat menampilkan beberapa tabel pada halaman
$sortTables = 1;  // 1: Urutkan, 0: Jangan diurutkan

$dir = 'log'; // Direktori untuk menyimpan file log dan riwayat unduhan

// Dapatkan domain situs Anda
$domain = $_SERVER['HTTP_HOST'];

// Manajemen sesi: Cegah peretasan sesi dan gunakan session_set_cookie_params()
session_set_cookie_params(0, '/', $domain, true, true); // Atur flag HttpOnly dan Secure
session_start();
if (!isset($_SESSION['auth'])) {
    $_SESSION['auth'] = FALSE;
}

// Hashing kata sandi: Gunakan password_needs_rehash()
if (password_needs_rehash($hashedPassword, PASSWORD_DEFAULT)) {
    $newHashedPassword = password_hash($password, PASSWORD_DEFAULT);
    // Simpan nilai hash baru di database, dll.
}

// Buat direktori jika tidak ada
if (!is_dir($dir)) {
    if (mkdir($dir, 0755, true)) {
    } else {
        // Tampilkan jika pembuatan direktori gagal
        echo 'Harap buat direktori "' . $dataLogDir . '" dan unggah secara terpisah.';
    }
}

// Periksa apakah direktori log dapat ditulis
if (!is_writable($dataLogDir)) {
    die('Direktori "' . $dataLogDir . '" entah tidak ada atau tidak memiliki izin tulis. Harap buat direktori dan atur izin dengan benar (misalnya, 755).');
}

// Dapatkan tanggal dasar dan tanggal kemarin
$baseDay = date("Y/m/d");
$yesterday = date("Y/m/d", strtotime("-1 day"));

// Fungsi untuk mendapatkan hari dari sebuah tanggal
function getDayOfWeek($date)
{
    $dayOfWeek = date('w', strtotime($date));
    $weekDays = array('Mg', 'Sn', 'Sl', 'Rb', 'Km', 'Jm', 'Sb');
    return $weekDays[$dayOfWeek];
}

// Atur jalur file untuk setiap file target dan buat file log jika tidak ada
foreach ($targetFiles as $key => $val) {
    $filePath[$key] = $dataLogDir . "count_" . $key . ".log";

    // Buat file log jika tidak ada
    if (!file_exists($filePath[$key])) {
        createLogFile($filePath[$key]);
    }
}

// Dapatkan jalur file dan tanggal pembaruan terakhir mereka (diurutkan berdasarkan tanggal secara menurun)
$filePathsAndDates = array();
foreach ($filePath as $key => $path) {
    if (file_exists($path)) {
        $filePathsAndDates[$key] = filemtime($path);
    } else {
        // Output kesalahan ini ke log dan tentukan apakah akan melanjutkan atau menghentikan proses
        echo "Error: File does not exist - $path<br>";
    }
}

// Urutkan secara menurun berdasarkan tanggal pembaruan terakhir (tanggal terbaru muncul pertama)
arsort($filePathsAndDates);

// Bangun kembali array dari jalur file yang diurutkan
$sortedFilePaths = array();
foreach ($filePathsAndDates as $key => $date) {
    $sortedFilePaths[$key] = $filePath[$key];
}

// Pilih secara kondisional apakah akan menggunakan jalur yang diurutkan untuk pengurutan
$filePath = ($sortTables) ? $sortedFilePaths : $filePath;

// Kembalikan kode JavaScript ke klien (menampilkan dinamis jumlah unduhan)
if (isset($_GET['dsp_count'])) {
    header("Content-type: application/x-javascript");

    // Atur header sebagai file JavaScript
    if (!preg_match("/^[0-9]+$/", $_GET['dsp_count'])) {
        echo "document.write(\"Parameter must be a 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]);
        }
    }

    // Jika opsi tampilan tanggal aktif, tampilkan termasuk tanggal
    if (isset($_GET['day_dsp']) && $_GET['day_dsp'] == 'on') {
        $countDsp = <<<EOF
document.write('<div class="counter_inpage">Total unduhan: <strong>{$total}</strong>[<span class="count_today">Hari ini : <strong>{$todayCount}</strong></span>  <span class="count_yesterday">Kemarin : <strong>{$yesterdayCount}</strong></span>]</div>')
EOF;
    } else {
        // Jika opsi tampilan tanggal nonaktif, tampilkan hanya jumlah total unduhan
        $countDsp = <<<EOF
document.write('<p class="counter_inpage">Total unduhan: {$total}</p>')
EOF;
    }

    // Jika encoding karakter bukan UTF-8, konversi
    if ($encodingType != 'UTF-8') $countDsp = mb_convert_encoding($countDsp, "$encodingType", 'UTF-8');
    echo $countDsp;

    exit();
}

// Proses saat permintaan unduhan file
if (isset($_GET['download'])) {
    $fileId = $_GET['download'];

    // Keluar jika ID file bukan angka atau jika ID file tidak ada
    if (!preg_match("/^[0-9]+$/", $fileId) || !isset($filePath[$fileId])) {
        exit('Parameter numerik tidak benar');
    }

    // Buka file dan kunci
    $fp = fopen($filePath[$fileId], "rb+");
    if (!$fp) {
        exit('Gagal membuka file');
    }

    flock($fp, LOCK_EX);

    // Baca file log dan simpan dalam array
    $line = array();
    while (($data = fgets($fp)) !== false) {
        $line[] = $data;
    }

    // Potong file dan tambahkan baris tanggal baru di awal
    ftruncate($fp, 0);
    rewind($fp);

    // Tambahkan baris tanggal baru di awal jika tidak ada
    if (strpos($line[0], $baseDay) === false) {
        $writeLine = $baseDay . ',1' . "\n";
        fwrite($fp, $writeLine);
    }

    // Proses setiap baris dalam file
    foreach ($line as $val) {
        // Tingkatkan jumlah unduhan untuk tanggal saat ini
        if (strpos($val, $baseDay) !== false) {
            $valArray = explode(',', $val);
            $valArray[1] = rtrim($valArray[1], "\n") + 1;
            $val = $valArray[0] . ',' . $valArray[1] . "\n";
        }
        fwrite($fp, $val);
    }

    // Bersihkan buffer output dan lepaskan kunci
    fflush($fp);
    flock($fp, LOCK_UN);

    // Tutup file
    fclose($fp);

    // Bersihkan buffer output
    ob_end_clean();

    // Lakukan unduhan file
    header("Location: {$targetFiles[$fileId]}");
    exit();
} else {
    // Mulai sesi, hancurkan sesi jika logout diminta
    session_start();
    if (isset($_GET['logout'])) {
        $_SESSION = array();
        session_destroy();
    }

    $loginError = '';

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

    // Gunakan fungsi hash password untuk menghasilkan nilai hash
    // Proses login
    if (isset($_POST['userid']) && isset($_POST['password'])) {
        // Bandingkan nilai hash untuk otentikasi
        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 {
            // Proses untuk kegagalan autentikasi
            $_SESSION['auth'] = FALSE;
            $loginError = '<div style="text-align: center; color: crimson;">ID pengguna atau kata sandi salah.</div>';
        }
    }

    // Jika autentikasi tidak berhasil, tampilkan layar login
    if ($_SESSION['auth'] !== TRUE) {
        ?>
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="utf-8">
            <meta name="robots" content="NOINDEX,NOFOLLOW">
            <title>Layar Login Riwayat Unduhan</title>
            <!-- Gaya layar login (dapat dimodifikasi sesuai kebutuhan) -->
            <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">【Lihat Riwayat Unduhan】</p>
                    <?php if (isset($loginError)): ?>
                        <!-- Tampilkan pesan kesalahan jika variabel $loginError diatur -->
                        <p style="color: crimson;"><?php echo $loginError; ?></p>
                    <?php endif; ?>
                    <label for="userid">ID Pengguna:</label>
                    <input type="text" id="userid" name="userid" required>
                    <label for="password">Kata Sandi:</label>
                    <input type="password" id="password" name="password" required>
                    <?php
                        // Mengasumsikan $showPassword adalah variabel PHP yang menentukan apakah awalnya menampilkan kata sandi
                        echo '<label class="passwordshow" for="showPassword">[Tampilkan Kata Sandi]<div class="center-container"><input type="checkbox" id="showPassword" onchange="togglePasswordVisibility()" ' . ($showPassword ? 'checked' : '') . '></div></label>';
                    ?>
                    <button type="submit" name="login_submit">Login</button>
                </form>   
            </div>
            
            <!-- Kendalikan visibilitas kata sandi -->
<script>
  function togglePasswordVisibility() {
    var passwordInput = document.getElementById('password');
    var showPasswordCheckbox = document.getElementById('showPassword');

    if (showPasswordCheckbox.checked) {
      // Jika dicentang, kata sandi akan ditampilkan
      passwordInput.type = 'text';
    } else {
      // Jika tidak dicentang, sembunyikan kata sandi
      passwordInput.type = 'password';
    }
  }
</script>
</body>
</html><?php
exit();
} else {
  // Jika sudah masuk, tampilkan halaman riwayat unduhan
  ?>
  <!DOCTYPE html>
  <html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    <title>Riwayat Unduhan</title>
    <!-- Gaya tampilan riwayat unduhan (dapat dimodifikasi sesuai kebutuhan) -->
    <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">【Riwayat Unduhan】 【<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">Tanggal</th>
            <th class="tableheader">Unduhan</th>
          </tr>
          <?php	  
            $totalDownload = 0;

            // Baca hanya jika file ada
            if (file_exists($val)) {
              $line = file($val);
              foreach ($line as $lineVal) {
                $lineArray = explode(',', $lineVal);

                // Periksa apakah $lineArray[1] adalah nilai numerik
                $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 Unduhan: <?php echo $totalDownload;?></th>
          </tr>
        </table>
      </div>              
    <?php
                }
              }
            }
          ?>
</body>
</html><?php
// Fungsi untuk membersihkan semua elemen dalam sebuah array
function sanitize($arr)
{
  // Jika itu adalah array, terapkan sanitasi secara rekursif
  if (is_array($arr)) {
    return array_map('sanitize', $arr);
  }
  // Hapus karakter NULL dari dalam string
  return str_replace("\0", "", $arr);
}

// Buat file log baru jika tidak ada
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);

    // Atur izin file
    chmod($filePath, 0666);
  } else {
  }
}
Simpan file dengan ekstensi ".php"
Itu adalah pengantar kode PHP untuk "Penghitung Unduhan/Program Pemirsa Riwayat Unduhan." Kami berharap Anda menemukannya bermanfaat.

Mungkin ada kesalahan dalam penulisan karena ini adalah terjemahan dari versi bahasa Jepang. Kami mohon maaf atas ketidaknyamanannya, tetapi jika ada kesalahan dalam penulisan pada kode, harap perbaiki atau sesuaikan sendiri.

Umpan balik Anda tentang penggunaan kode ini sangat dihargai. Harap dicatat bahwa saya tidak dapat menanggapi pertanyaan.

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

Last updated : 2024/02/05