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

İndirme Sayacı
İndirme Geçmişi Görüntüleme Programı
= PHP Kodunu İndir ve Kur =
Sample Download Counter

Giriş:

Bu, bir web sayfası kullanıcısı bir programı indirip kullandığında indirme sayısını bilmenizi sağlayan bir programa giriş niteliğindedir. Sayfada indirme sayacı ayarlamak mümkün olup site yöneticileri ayrıca tarayıcıdaki indirme geçmişini de kolaylıkla kontrol edebilir.

[Sayfaya Kurulan Örnek]
Toplam İndirmeler: 1865 [Bugün: 23 Dün: 76]
[Tarayıcıda Açılan Örnek]

Not: Bir indirme bağlantısı içeren sayfa, dosya kaydetmeyi teşvik eden bir mesaj görüntüler ve indirmeyi başlatmadan kapatılırsa, hâlâ bir indirme olarak sayılır. Çünkü bu, bağlantı tıklamalarının sayısını sayar.

İndirme Talimatları:

Bu sayfadan, programın sıkıştırılmış "zip" dosyasını indirin ve kendi sitenize kurun. Dosyanın adı "count.php"dir, ancak değiştirebilirsiniz.

Kodu kullanma ve değiştirme hakkına sahipsiniz, sayfa tasarımını da değiştirme dahil.

Lütfen kodu değiştirerek yeni işlevler ekleyin veya tasarımı değiştirerek anlaşılması ve kullanılması kolay bir sayfa oluşturun.

 PHP Programını İndir:
Kurulum Talimatları:

İndirilen "count.php.zip" dosyasını açın ve "count.php" adında bir dosya oluşturulacaktır. Lütfen "download_history" gibi bir dizin oluşturun ve buraya kaydedin..

"Zip" dosyası sadece bir dosya olan "count.php" ve yönetici için "giriş ekranı"nı otomatik olarak içerir.

Ayarlar:

Bu, ana ayarlama yöntemidir. Bu ana bölümler aynı zamanda PHP dosyasında da listelenmiştir.

  1. Şifre Ayarları:
    1. Yönetici sayfası için bir şifre belirlenmelidir.
    2. Varsayılan şifre "admin"dir, ancak istediğiniz herhangi bir dizeyle değiştirin.
    3. Güvenliği artırmak için güçlü bir şifre belirleyin.
  2. İndirilecek Dosyaların Ayarlanması:
    1. "$targetFiles = array()" için ayarlamaları tamamlayın.
    2. Bu, "'1' => 'Your URL/file name.zip'," gibi bir kısımı içerir.
  3. Günlük Dosyalarını Saklamak İçin Dizin:
    1. Tarihçeyi kaydeden günlük dosyalarını saklamak için uzak sunucuda "log" adlı bir dizin gereklidir.
    2. Bu program, ilk kez yüklediğinizde otomatik olarak "log" adlı bir dizin oluşturur. Ancak "Dizin yok" gibi bir mesaj alırsanız, lütfen ayrıca oluşturup yükleyin.
  4. İlk Yükleme Tarihçesi Görüntüleme:
    1. İlk kez yüklediğinizde, tarihi ve sayıyı "0" olarak görebilirsiniz.
    2. Bu, yüklenme tarihini içeren "count_1.log" gibi günlük dosyalarının otomatik olarak oluşturulan "log" dizininde aynı anda oluşturulması nedeniyledir.
    3. Eğer bu sizi rahatsız ediyorsa, uzak sunucudan "count_1.log" gibi bir dosyayı indirin, verileri silin ve yeniden yükleyin.
    4. Ancak, "tarih" ve "0" durumu aynı zamanda sayacın ne zaman başlatıldığına dair bir geçmiş olabilir. Eğer o gün bir indirme varsa, sayılır.
  5. Yönetici Görüntüleme Sayfası Ekranı:
    1. Yöneticiler sayfayı görüntülediğinde, URL'yi veya sadece dosya adını görüntülemek isteyip istemediğinizi seçebilirsiniz.
    2. Bir sayfada birden fazla tarihçe tablosu yerleştirildiğinde, bunları "$targetFiles = array()" ile belirlenen sırayla tutmayı veya yeni kayıtların tarih sırasına göre sıralamayı seçebilirsiniz.
  6. Sayfa Tasarımı, CSS, vb.:
    1. Sayfayı okunabilir hale getirmek için lütfen sayfa tasarımını, CSS, vb. uygun şekilde ayarlayın.
    2. Bir zamanlar CSS, harici bir dosya olarak yazılmıştı, ancak şimdi aynı sayfada yazılmıştır, böylece CSS'yi değiştirirken etiketlere başvurabilirsiniz.
  7. Sayfadaki İndirme Bağlantısı Kurulumu:
    1. Genellikle indirme <a> etiketi şu şekilde yazılır:
      <a href="/download_history/sample.zip" download="File name when downloading.zip">[Rastgele dize]</a>
    2. Bu programda, indirme <a> etiketini şu şekilde yazın:
    3. [Örnek]Kopyala
      <a href="/download_history/count.php?download=1" download="File name when downloading.zip" target="_blank">[Rastgele dize]</a>
    4. "download=1" içindeki sayıyı, "$targetFiles = array()" içinde belirlenen sayıya eşleştirin. Bu ayar, indirilecek dosyalara başvurur.
    5. Lütfen yolunuzu sayfanıza uydurun.
    6. İndirme bağlantısı olan sayfayı yüklemeden önce "$targetFiles = array()" içindeki dosyayı (bu örnekte "count.php") yükleyin.
  8. Bir Satırda Tarih Geçmişi Gösterme Kodu:
    1. Aşağıdaki JavaScript'i oluşturun ve göstermek istediğiniz sayfaya yerleştirin:
    2. [Örnek]Kopyala
      <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
    3. "dsp_count=1" içindeki sayıyı, "$targetFiles = array()" içinde belirlenen sayıya eşleştirin.
    4. "&day_dsp=on" ifadesini silerseniz, "bugün/dün" görüntüsü olmadan yalnızca "toplam sayı" görüntülenir.
    5. Toplam İndirmeler: 1865 [Bugün: 23 Dün: 76]
      Toplam İndirmeler: 1865
    6. Lütfen yolunuzu sayfanıza uydurun.
Genişletme Ayarları Hakkında

Birden çok tablo görüntülendiğinde, bu programın varsayılan ayarı en son güncelleme zamanına göre sıralamaktır. Toplam indirme sayısına göre sıralamak istiyorsanız, "total_downloads.php" gibi yeni bir dosya oluşturun ve aşağıdaki bölümü değiştirin.

  1. Yorumlardaki Değişiklikler
    Aşağıdaki bölümdeki yorumları değiştirin:
    // Birden çok tabloyu bir sayfada görüntülerken orijinal diziyi yeni günlük sırasına göre sıralanmış biriyle değiştirip değiştirmemeyi seç
  2. Değiştirilecek yorumu kopyala
    // Sayfada birden fazla tablo görüntüleniyorsa, orijinal dizinin değiştirilip değiştirilmeyeceğini seçin/ayarlayın ve toplam indirme sayısına göre azalan düzende sıralayın.
  3. Kod ve Yorumlardaki Değişiklikler
    Aşağıdaki bölümdeki kodu ve yorumları değiştirin. Bir blok olarak düşünün.
    // Dosya yollarını ve en son güncelleme tarihlerini al (tarih sırasına göre azalan sırayla)
    $filePathsAndDates = array();
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $filePathsAndDates[$key] = filemtime($path);
        } else {
            // Bu hatayı loga yaz ve işlemeye devam edip etmemeye karar ver
            echo "Hata: Dosya mevcut değil - $path<br>";
        }
    }
    
    // En son güncelleme tarihine göre azalan sırala (en yeni tarih önce gelir)
    arsort($filePathsAndDates);
    
    // Sıralanmış dosya yolları dizisini yeniden oluştur
    $sortedFilePaths = array();
    foreach ($filePathsAndDates as $key => $date) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  4. Değiştirme kodunu ve yorumları kopyalayın
    // Toplam indirme sayısını saklayan dizi
    $totalDownloads = array();
    
    // Dosya yolunu ve toplam indirme sayısını alın
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $line = file($path);
            $total = 0;
    
            // Her satırdaki indirme sayısını topla
            foreach ($line as $val) {
                $valArray = explode(',', $val);
                $total += trim($valArray[1]);
            }
    
            // Toplam indirme sayısını bir dizide saklıyoruz
            $totalDownloads[$key] = $total;
        } else {
            // Bu hatayı günlüğe yazdırın ve işlemin devam edip etmeyeceğine veya iptal edilip edilmeyeceğine karar verin
            echo "Hata: Dosya mevcut değil - $path<br>";
        }
    }
    
    // Toplam indirme sayısına göre azalan sırada sırala
    arsort($totalDownloads);
    
    // Sıralanmış dosya yolları dizisini yeniden oluştur
    $sortedFilePaths = array();
    foreach ($totalDownloads as $key => $total) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  5. Dosya oluşturma ve kurulum
    1. Çoklu sayfa oluştururken içerik eklerken öğelerin ayarlarında hata oluşmaması için, aşağıdaki kod parçasını harici bir dosya olarak oluşturun ve şu anda uygulanan bölüme başka bir kodla yükleyin. "config.php" gibi bir isimle harici bir dosya oluşturun.
    // İndirilecek dosyaların yapılandırması. Birden fazla dosya varsa, bunları '2', '3', '4', vb. olarak ekleyin. Ayrıca, '0' geçerlidir.
    // Protokol için "http:" veya "https:" kullanın.
    $targetFiles = array(
        '1' => 'YourURL/FileName.zip',
        '2' => 'YourURL/FileName.pdf',
        '3' => 'YourURL/FileName.pdf',
        '4' => 'YourURL/FileName.pdf',
    );
  6. "config.php" olarak adlandırılacak kısmın örneğini kopyalayın
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>DownloadHistory</title>
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    </head>
    <body>
    <?php
    // Bu bölümü harici bir dosya haline getirin ve kullandığınız sayfaya ``include __DIR__ .'/config.php';'' olarak yükleyin.
    // İndirilecek dosyaların yapılandırması. Birden fazla dosya varsa, bunları '2', '3', '4', vb. olarak ekleyin. Ayrıca, '0' geçerlidir.
    // Protokol için "http:" veya "https:" kullanın.
    $targetFiles = array(
        '1' => 'YourURL/FileName.zip',
        '2' => 'YourURL/FileName.pdf',
        '3' => 'YourURL/FileName.pdf',
        '4' => 'YourURL/FileName.pdf',
    );
    ?>
    </body>
    </html>
    
  7. Harici dosyaları okumak ve bunların nereye yerleştirileceği kodu
    1. Aşağıdaki konumda "config.php" gibi bir adla oluşturulan dosyayı şu kodla ekleyin: "include __DIR__ . '/config.php';".
    2. Aşağıdaki bölümü yorum satırına alın veya silin ve yerine şu kodu ekleyin: "include __DIR__ . '/config.php';".
    //$targetFiles = array(
    //    '1' => 'YourURL/FileName.zip',
    //    '2' => 'YourURL/FileName.pdf',
    //    '3' => 'YourURL/FileName.pdf',
    //    '4' => 'YourURL/FileName.pdf',
    //);
  8. Değiştirilecek kodu kopyalayın
    include __DIR__ . '/config.php';
* Programdaki "font-family", gerekli ise kendi sitenize uyacak şekilde ayarlanmalıdır.
《 PHP Kodu İle İndirme Sayacı Oluşturma 》
Dosyayı ".php" uzantısıyla kaydet.

<?php
//***************************************************************************************************
// İndirme Sayacı ve İndirme Geçmişi Görüntüleyici PHP Programı
// [Herkesin Bilgisi Biraz Faydalı Kitap]
// [みんなの知識 ちょっと便利帳]
// https://www.benricho.org/Tips/download_history/
// Yayınlanma Tarihi: 29 Ocak 2024
//
// Genel Bakış:
// Bu program, dosya indirmelerinin geçmişini takip etmek için bir sistemdir ve kullanıcı kimlik doğrulama işlevselliği ile donatılmıştır.
// Giriş verisi düzenleme, log dosyası oluşturma ve indirme istatistiklerinin görüntülenmesi gibi özellikleri içerir.
// Kodu değiştirme ve sayfa tasarımını değiştirme dahil olmak üzere özgürce kullanabilirsiniz.
//
// Not:
// İndirme bağlantılarını içeren sayfayı yüklemeye geçmeden önce, bu dosyanın "$targetFiles = array()" bölümünü yapılandırmayı ve bu sayfayı indirme bağlantıları olan sayfadan önce yüklemeyi unutmayın.
// Bunu yapmamak, bu sayfa dosyaların indirilecek dosyaları ayarladığı ve referans verdiği için kullanıcıların indirme yapamamasına neden olabilir.
//
// Yapılandırma ve Notlar:
// ① Şifre "admin" olarak ayarlanmıştır, ancak istediğiniz dizeye değiştirin.
// ② Log dosyalarını depolamak için "log" dizini ilk yüklemede otomatik olarak oluşturulur.
// Ancak, "dizin bulunamadı" gibi mesajlarla karşılaşırsanız, ayrıca yükleyin.
// ③ İlk yüklemede, geçmiş görüntüleme "tarih" ve "0" numarasını gösterir.
// Bu, yüklemenin tarihi olan "count_1.log" gibi log dosyalarının otomatik olarak oluşturulan "log" dizininde aynı anda oluşturulması nedeniyledir.
// Eğer bu endişe kaynağıysa, uzaktaki sunucuya erişin, "count_1.log" gibi dosyaları indirin, verileri silin ve ardından yükleyin.
// ④ Geçmiş görüntülemede sayfada birden çok tablo görüntülenirken, [$targetFiles = array] içindeki diziyi korumak veya bunları kronolojik sırayla görüntülemek isteyebilirsiniz.
// ⑤ Geçmiş görüntülemede, dosyayı göstermede alanı dahil etmeyi veya sadece dosya adını göstermeyi seçebilirsiniz.
//
// [İndirme Bağlantıları Bulunan Sayfadaki Bağlantı Formatı]
// [Örnek] <a href="/download_history/count.php?download=Kayıt Numarası" download="İndirilenDosyaAdı.zip" target="_blank">[Herhangi Bir Dize]</a>
// ① "download=1" içindeki numarayı "$targetFiles = array()" içinde ayarlanan numaraya ayarlayın.
// ② Sayfanızla eşleşmesi için yolu ayarlayın.
//
// [İndirme Bağlantısı Konulmuş Sayfadaki Geçmişi Tek Satırda Gösteren Kod (JavaScript)]
// [Örnek] <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
// ① "dsp_count=1" içindeki numarayı "$targetFiles = array()" içinde ayarlanan numaraya ayarlayın.
// ② "&day_dsp=on" ifadesini kaldırırsanız, sadece "bugün" ve "dün" olmadan "toplam"ı görüntüler.
// ③ Sayfanızla eşleşmesi için yolu ayarlayın.
//***************************************************************************************************

// İndirilecek dosyaların yapılandırması. Birden fazla dosya varsa, bunları '2', '3', '4', vb. olarak ekleyin. Ayrıca, '0' geçerlidir.
// Protokol için "http:" veya "https:" kullanın.
$targetFiles = array(
    '1' => 'YourURL/FileName.zip',
    '2' => 'YourURL/FileName.pdf',
    '3' => 'YourURL/FileName.pdf',
    '4' => 'YourURL/FileName.pdf',
);

// HTML çıkışı için karakter kodlamasını ayarla
header("Content-Type: text/html; charset=utf-8");

// İndirme geçmişini gösteren sayfadaki karakter kodlaması
$encodingType = 'UTF-8';

// Kullanıcı kimlik doğrulama bilgilerini ve diğer ayarları tanımla
$userid = 'admin';   // Kullanıcı Kimliği ( 'admin' yerine istediğiniz bir dizeyle değiştirin)
$password = 'admin'; // Şifre ('admin' yerine istediğiniz bir dizeyle değiştirin)
$hashedPassword = password_hash($password, PASSWORD_DEFAULT); // password_hash() kullanarak bir hash değeri oluşturun
$dataLogDir = 'log/'; // 'log' dizini bu program tarafından otomatik olarak oluşturulur. Oluşturulmazsa 'log' adında bir dizin yükleyin

// Dosya adını görüntülerken etki alanını dahil edip etmemeyi seç
$includeDomain = 1;  // 1: Etki alanını içererek görüntüle, 0: Sadece dosya adını görüntüle

// Birden çok tabloyu bir sayfada görüntülerken orijinal diziyi yeni günlük sırasına göre sıralanmış biriyle değiştirip değiştirmemeyi seç
$sortTables = 1;  // 1: Sırala, 0: Sıralama

$dir = 'log'; // Log dosyalarını ve indirme geçmişini depolamak için dizin

// Sitenizin etki alanını alın
$domain = $_SERVER['HTTP_HOST'];

// Oturum yönetimi: Oturum kaçırılmasını önle ve session_set_cookie_params() kullanın
session_set_cookie_params(0, '/', $domain, true, true); // HttpOnly ve Güvenli bayrakları ayarla
session_start();
if (!isset($_SESSION['auth'])) {
    $_SESSION['auth'] = FALSE;
}

// Şifre hashleme: password_needs_rehash() kullanın
if (password_needs_rehash($hashedPassword, PASSWORD_DEFAULT)) {
    $newHashedPassword = password_hash($password, PASSWORD_DEFAULT);
    // Yeni hash değerini bir veritabanında saklayın, vb.
}

// Dizin yoksa oluşturun
if (!is_dir($dir)) {
    if (mkdir($dir, 0755, true)) {
    } else {
        // Dizin oluşturma başarısız olursa görüntüle
        echo 'Lütfen "' . $dataLogDir . '" dizinini oluşturup ayrıca yükleyin.';
    }
}

// Log dizininin yazılabilir olup olmadığını kontrol edin
if (!is_writable($dataLogDir)) {
    die('"' . $dataLogDir . '" dizini ya mevcut değil ya da yazma izinlerine sahip değil. Lütfen dizini oluşturun ve izinleri düzgün bir şekilde ayarlayın (örneğin, 755).');
}

// Temel tarihi ve dünün tarihini al
$baseDay = date("Y/m/d");
$yesterday = date("Y/m/d", strtotime("-1 day"));

// Bir tarihten haftanın gününü almak için bir fonksiyon
function getDayOfWeek($date)
{
    $dayOfWeek = date('w', strtotime($date));
    $weekDays = array('Paz', 'Pzt', 'Sal', 'Çar', 'Per', 'Cum', 'Cmt');
    return $weekDays[$dayOfWeek];
}

// Her bir hedef dosya için dosya yolu belirle ve varsa log dosyası oluştur
foreach ($targetFiles as $key => $val) {
    $filePath[$key] = $dataLogDir . "count_" . $key . ".log";

    // Dosya yoksa log dosyasını oluştur
    if (!file_exists($filePath[$key])) {
        createLogFile($filePath[$key]);
    }
}

// Dosya yollarını ve en son güncelleme tarihlerini al (tarih sırasına göre azalan sırayla)
$filePathsAndDates = array();
foreach ($filePath as $key => $path) {
    if (file_exists($path)) {
        $filePathsAndDates[$key] = filemtime($path);
    } else {
        // Bu hatayı loga yaz ve işlemeye devam edip etmemeye karar ver
        echo "Hata: Dosya mevcut değil - $path<br>";
    }
}

// En son güncelleme tarihine göre azalan sırala (en yeni tarih önce gelir)
arsort($filePathsAndDates);

// Sıralanmış dosya yolları dizisini yeniden oluştur
$sortedFilePaths = array();
foreach ($filePathsAndDates as $key => $date) {
    $sortedFilePaths[$key] = $filePath[$key];
}

// Koşullu olarak sıralama için sıralanmış yolları kullanıp kullanmamayı seç
$filePath = ($sortTables) ? $sortedFilePaths : $filePath;

// İstemciye JavaScript kodunu döndür (indirme sayılarını dinamik olarak görüntüleme)
if (isset($_GET['dsp_count'])) {
    header("Content-type: application/x-javascript");

    // Başlığı bir JavaScript dosyası olarak ayarla
    if (!preg_match("/^[0-9]+$/", $_GET['dsp_count'])) {
        echo "document.write(\"Parametre yarı genişlikte bir sayı olmalı\")";
        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]);
        }
    }

    // Tarih görüntüleme seçeneği AÇIKsa, tarihi içererek görüntüle
    if (isset($_GET['day_dsp']) && $_GET['day_dsp'] == 'on') {
        $countDsp = <<<EOF
document.write('<div class="counter_inpage">Toplam indirmeler: <strong>{$total}</strong>[<span class="count_today">Bugün : <strong>{$todayCount}</strong></span>  <span class="count_yesterday">Dün : <strong>{$yesterdayCount}</strong></span>]</div>')
EOF;
    } else {
        // Tarih görüntüleme seçeneği KAPALIysa, sadece toplam indirme sayısını görüntüle
        $countDsp = <<<EOF
document.write('<p class="counter_inpage">Toplam indirmeler: {$total}</p>')
EOF;
    }

    // Karakter kodlaması UTF-8 değilse dönüştür
    if ($encodingType != 'UTF-8') $countDsp = mb_convert_encoding($countDsp, "$encodingType", 'UTF-8');
    echo $countDsp;

    exit();
}

// Dosya indirme isteği yapıldığında işleme al
if (isset($_GET['download'])) {
    $fileId = $_GET['download'];

    // Dosya kimliği bir sayı değilse veya dosya kimliği mevcut değilse çık
    if (!preg_match("/^[0-9]+$/", $fileId) || !isset($filePath[$fileId])) {
        exit('Yanlış sayısal parametre');
    }

    // Dosyayı aç ve kilit
    $fp = fopen($filePath[$fileId], "rb+");
    if (!$fp) {
        exit('Dosya açılamadı');
    }

    flock($fp, LOCK_EX);

    // Log dosyasını oku ve bir diziye kaydet
    $line = array();
    while (($data = fgets($fp)) !== false) {
        $line[] = $data;
    }

    // Dosyayı kırp ve başlangıçta yeni bir tarih satırı ekle
    ftruncate($fp, 0);
    rewind($fp);

    // Yeni bir tarih satırı eklemezse başlangıçta
    if (strpos($line[0], $baseDay) === false) {
        $writeLine = $baseDay . ',1' . "\n";
        fwrite($fp, $writeLine);
    }

    // Dosyadaki her satırı işle
    foreach ($line as $val) {
        // Geçerli tarih için indirme sayısını artır
        if (strpos($val, $baseDay) !== false) {
            $valArray = explode(',', $val);
            $valArray[1] = rtrim($valArray[1], "\n") + 1;
            $val = $valArray[0] . ',' . $valArray[1] . "\n";
        }
        fwrite($fp, $val);
    }

    // Tamponu boşalt ve kilidi serbest bırak
    fflush($fp);
    flock($fp, LOCK_UN);

    // Dosyayı kapat
    fclose($fp);

    // Çıkış tamponunu temizle
    ob_end_clean();

    // Dosya indirmeyi gerçekleştir
    header("Location: {$targetFiles[$fileId]}");
    exit();
} else {
    // Oturumu başlat, oturumu yok etme isteği varsa oturumu yok et
    session_start();
    if (isset($_GET['logout'])) {
        $_SESSION = array();
        session_destroy();
    }

    $loginError = '';

    if (!isset($_SESSION['auth'])) {
        $_SESSION['auth'] = FALSE;
    }
    
// Şifre hash fonksiyonunu kullanarak bir hash değeri oluştur
// Giriş işlemleri
if (isset($_POST['userid']) && isset($_POST['password'])) {
    // Kimlik doğrulama için hash değerlerini karşılaştır
    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 {
        // Kimlik doğrulama başarısız olduğunda işleme al
        $_SESSION['auth'] = FALSE;
        $loginError = '<div style="text-align: center; color: crimson;">Yanlış kullanıcı kimliği veya şifre.</div>';
    }
}

// Kimlik doğrulama başarısız ise, giriş ekranını görüntüle
if ($_SESSION['auth'] !== TRUE) {
    ?>
    <!DOCTYPE html>
    <html lang="tr">
    <head>
        <meta charset="utf-8">
        <meta name="robots" content="NOINDEX,NOFOLLOW">
        <title>İndirme Geçmişi Giriş Ekranı</title>
        <!-- Giriş ekranı stilleri (gerektiğinde düzenlenebilir)-->
        <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">【İndirme Geçmişini Görüntüle】</p>
                <?php if (isset($loginError)): ?>
                    <!-- $loginError değişkeni ayarlanmışsa hata mesajını görüntüle -->
                    <p style="color: crimson;"><?php echo $loginError; ?></p>
                <?php endif; ?>
                <label for="userid">Kullanıcı ID:</label>
                <input type="text" id="userid" name="userid" required>
                <label for="password">Şifre:</label>
                <input type="password" id="password" name="password" required>
                <?php
                    // $showPassword, başlangıçta şifreyi gösterip göstermeme durumunu belirleyen bir PHP değişkeniyse
                    echo '<label class="passwordshow" for="showPassword">[Şifreyi Göster]<div class="center-container"><input type="checkbox" id="showPassword" onchange="togglePasswordVisibility()" ' . ($showPassword ? 'checked' : '') . '></div></label>';
                ?>
                <button type="submit" name="login_submit">Giriş</button>
            </form>   
        </div>

        <!-- Şifrenin görünürlüğünü kontrol et -->
        <script>
            function togglePasswordVisibility() {
                var passwordInput = document.getElementById('password');
                var showPasswordCheckbox = document.getElementById('showPassword');

                if (showPasswordCheckbox.checked) {
                    // İşaretli ise şifre görüntülenecek
                    passwordInput.type = 'text';
                } else {
                    // İşareti kaldırınca şifre gizlenecek
                    passwordInput.type = 'password';
                }
            }
        </script>
    </body>
    </html><?php
    exit();
    } else {
    // Giriş yapılmışsa, indirme geçmişi sayfasını görüntüle
    ?>
    <!DOCTYPE html>
    <html lang="tr">
    <head>
        <meta charset="utf-8">
        <meta name="robots" content="NOINDEX,NOFOLLOW">
        <title>İndirme Geçmişi</title>
        <!-- İndirme geçmişi görüntüleme stili (gerektiğinde düzenlenebilir) -->
        <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">【İndirme Geçmişi】 【<a href="?logout=true">Çıkış</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">Tarih</th>
                        <th class="tableheader">İndirmeler</th>
                    </tr>
                    <?php	  
                    $totalDownload = 0;

                    // Dosya varsa sadece o zaman oku
                    if (file_exists($val)) {
                        $line = file($val);
                        foreach ($line as $lineVal) {
                            $lineArray = explode(',', $lineVal);

                            // $lineArray[1]'in sayısal bir değer olup olmadığını kontrol et
                            $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">Toplam sayı: <?php echo $totalDownload;?></th>
                    </tr>
                </table>
            </div>              
        <?php
        }
    }
}
    ?>
    </body>
    </html><?php
    // Tüm öğeleri temizlemek için bir dizi
    function sanitize($arr)
    {
      // Bir dizi ise, temizleme işlemini özyinelemeli olarak uygula
      if (is_array($arr)) {
        return array_map('sanitize', $arr);
      }
      // Dizeler içindeki NULL karakterlerini kaldır
      return str_replace("\0", "", $arr);
    }

    // Dosya varsa yeni bir log dosyası oluştur
    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);

        // Dosya izinlerini ayarla
        chmod($filePath, 0666);
      } else {
      }
    }
Bu, "İndirme Sayacı/İndirme Geçmişi Görüntüleme Programı" için PHP kodu tanıtımını sona erdiririz. Faydalı bulacağınızı umuyoruz.

Japonca sürümünden çevrildiği için ifade hataları olabilir. Rahatsızlık için özür dileriz, ancak kodun ifadesinde hata varsa, lütfen kendiniz düzeltme veya ayarlama yapın.

Bu kodu kullanma hakkındaki geri bildiriminiz takdir edilir. Sorulara cevap verememeyi lütfen unutmayın.

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

Last updated : 2024/06/29