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

डाउनलोड काउंटर
डाउनलोड हिस्ट्री व्यूइंग प्रोग्राम
= PHP कोड डाउनलोड और स्थापित करें =
Sample Download Counter

परिचय:

यह एक प्रोग्राम का परिचय है जो आपको एक वेब पेज उपयोगकर्ता द्वारा किसी प्रोग्राम को डाउनलोड और उपयोग करने पर डाउनलोड की संख्या जानने की अनुमति देता है। पृष्ठ पर एक डाउनलोड काउंटर स्थापित करना संभव है, और साइट प्रशासक ब्राउज़र पर डाउनलोड इतिहास भी आसानी से देख सकते हैं।

[पृष्ठ पर स्थापित नमूना]
कुल डाउनलोड: 1865 [आज: 23 कल: 76]
[ब्राउज़र में खोला नमूना]

नोट: यदि एक डाउनलोड लिंक के साथ एक फ़ाइल सहेजने का संकेत दिखाई देता है और डाउनलोड शुरू किए बिना बंद किया जाता है, तो यह एक डाउनलोड के रूप में गिना जाएगा। इसका कारण यह लिंक क्लिक की संख्या को गिनती जाती है।

डाउनलोड निर्देश:

इस पृष्ठ से कार्यक्रम की संक्षेपित "zip" फ़ाइल डाउनलोड करें और इसे अपनी साइट पर स्थापित करें। फ़ाइल का नाम "count.php" है, लेकिन आप इसे बदल सकते हैं।.

आप कोड का उपयोग और संशोधन करने में स्वतंत्र हैं, इसमें पृष्ठ डिज़ाइन बदलने सहित।

कृपया कोड को संशोधित करें ताकि नए कार्यों को जोड़ने या डिज़ाइन को परिवर्तित करने के लिए एक समझने और उपयोग करने के लिए सरल पृष्ठ बना सकें।

 PHP कार्यक्रम डाउनलोड:
स्थापना निर्देश:

डाउनलोड की गई "count.php.zip" फ़ाइल को अनज़िप करें, और एक "count.php" नामक फ़ाइल बनेगी। कृपया "download_history" जैसा एक निर्देशिका बनाएं और इसे वहां सहेजें।

"zip" फ़ाइल में केवल एक फ़ाइल, "count.php," और "प्रशासक की लॉगिन स्क्रीन" स्वचालित रूप से उत्पन्न होती है।

Settings:

यह मुख्य सेटिंग विधि है. ये मुख्य भाग PHP फ़ाइल में भी सूचीबद्ध हैं।

  1. पासवर्ड सेटिंग्स:
    1. प्रशासक पृष्ठ के लिए पासवर्ड सेट करना अनिवार्य है।
    2. डिफ़ॉल्ट पासवर्ड "admin" है, लेकिन आप इसे अपनी पसंद के किसी भी स्ट्रिंग पर बदलें।
    3. सुरक्षा को बढ़ाने के लिए, एक मजबूत पासवर्ड सेट करें।.
  2. डाउनलोड के लिए फ़ाइलों को सेट करना:
    1. "$targetFiles = array()" के लिए सेटिंग्स पूर्ण करें।
    2. यह वह हिस्सा है जैसे "'1' => 'आपका URL/फ़ाइल का नाम.zip',".
  3. लॉग फ़ाइलें सहेजने के लिए निर्देशिका:
    1. इतिहास रिकॉर्ड करने वाली लॉग फ़ाइलें सहेजने के लिए रिमोट सर्वर पर "log" नामक एक निर्देशिका आवश्यक है।
    2. यह कार्यक्रम आपकी पहली बार अपलोड करते समय स्वच्छता के लिए एक "log" नामक निर्देशिका स्वचालित रूप से बनाता है। हालांकि, यदि आप "कोई निर्देशिका नहीं" जैसा संदेश प्राप्त करते हैं, कृपया इसे अलग से बनाएं और अपलोड करें।
  4. पहली बार अपलोड इतिहास प्रदर्शन:
    1. पहली बार अपलोड करते समय, "तारीख" और संख्या "0" इतिहास में प्रदर्शित हो सकती हैं।
    2. यह इसलिए है क्योंकि अपने आप उत्पन्न होने वाले "log" निर्देशिका में अपलोड तिथि को समाहित "count_1.log" जैसी लॉग फ़ाइलें भी बनाई जाती हैं।
    3. यदि यह आपको परेशान करता है, तो कृपया रिमोट सर्वर से "count_1.log" जैसी फ़ाइल डाउनलोड करें, डेटा हटाएं, और इसे फिर से अपलोड करें।
    4. हालांकि, "तारीख" और "0" स्थिति यह भी हो सकती है कि कब काउंटर शुरू हुआ था का इतिहास है। यदि उस दिन कोई डाउनलोड है, तो यह गिना जाएगा।
  5. प्रशासक दृष्टिकोण पृष्ठ प्रदर्शन:
    1. जब प्रशासक पृष्ठ देखते हैं, आप यह चुन सकते हैं कि URL दिखाएँ या केवल फ़ाइल का नाम।
    2. यदि एक पृष्ठ पर कई इतिहास तालिकाएँ हैं, तो आप "$targetFiles = array()" द्वारा सेट किए गए क्रम में रखें या उन्हें नए लॉग होने की तिथि के क्रम में क्रमबद्ध करने का विकल्प चुन सकते हैं।
  6. पृष्ठ डिज़ाइन, CSS, आदि:
    1. कृपया पृष्ठ डिज़ाइन, CSS, आदि को उचित रूप से समायोजित करें ताकि पृष्ठ को पढ़ने में सुविधा हो।
    2. एक समय में, CSS को एक बाह्यिक फ़ाइल के रूप में लिखा गया था, लेकिन अब यह इसी पृष्ठ पर लिखा गया है ताकि आप CSS को बदलते समय टैग का संदर्भ कर सकें।
  7. पृष्ठ पर डाउनलोड लिंक सेटअप:
    1. सामान्यत: डाउनलोड <a> टैग निम्नलिखित रूप में लिखा जाता है:
      <a href="/download_history/sample.zip" download="File name when downloading.zip">[कोई भी स्ट्रिंग]</a>
    2. इस कार्यक्रम में, डाउनलोड <a> टैग निम्नलिखित रूप से लिखें:
    3. [उदाहरण]कॉपी
      <a href="/download_history/count.php?download=1" download="File name when downloading.zip" target="_blank">[कोई भी स्ट्रिंग]</a>
    4. "download=1" में संख्या को "$targetFiles = array()" में सेट की गई संख्या के साथ मेलाना। इस सेटिंग का संदर्भ डाउनलोड की जाने वाली फ़ाइलों के लिए है।
    5. कृपया अपने पृष्ठ के पथ को मैच करें।
    6. कृपया फ़ाइल को "$targetFiles = array()" के साथ अपलोड करने के बाद डाउनलोड लिंक के साथ पृष्ठ को अपलोड करें (इस उदाहरण में, "count.php").
  8. एक पंक्ति में इतिहास प्रदर्शित करने के लिए कोड:
    1. नीचे दिए गए जावास्क्रिप्ट को बनाएं और उसे उस पृष्ठ पर रखें जहां आप प्रदर्शित करना चाहते हैं:
    2. [उदाहरण]कॉपी
      <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
    3. "dsp_count=1" में नंबर को "$targetFiles = array()" में सेट किए गए नंबर के साथ मेल करें।
    4. यदि आप "&day_dsp=on," को हटा देते हैं, तो केवल "कुल संख्या" को "आज/कल" प्रदर्शन के बिना प्रदर्शित किया जाएगा।
    5. कुल डाउनलोड: 1865 [आज: 23 कल: 76]
      कुल डाउनलोड: 1865
    6. कृपया अपने पृष्ठ के पथ को मैच करें।
एक्सटेंशन सेटिंग्स के बारे में

जब कई तालिकाएँ दिखाई जाती हैं, इस प्रोग्राम की डिफ़ॉल्ट सेटिंग है कि वे नवीनतम अपडेट के समय के आधार पर क्रमबद्ध की जाती हैं। यदि आप कुल डाउनलोड संख्या के आधार पर क्रमबद्ध करना चाहते हैं, तो "total_downloads.php" जैसा एक नया फ़ाइल बनाएं और नीचे दिए गए हिस्से को बदलें।

  1. टिप्पणियों में परिवर्तन
    नीचे दिए गए खंड में टिप्पणियाँ बदलें:
    // पृष्ठ पर एक साथ मल्टीपल तालिकाएँ प्रदर्शित करते समय नए लॉगों के क्रम में मूल एरे को एक नए से बदलने का विकल्प चुनें
  2. बदलने के लिए टिप्पणी की कॉपी
    // यदि पृष्ठ पर एकाधिक तालिकाएँ प्रदर्शित होती हैं, तो चुनें/सेट करें कि मूल सरणी को प्रतिस्थापित करना है या नहीं और डाउनलोड की कुल संख्या के अवरोही क्रम में क्रमबद्ध करें।
  3. कोड और टिप्पणियों में परिवर्तन
    नीचे दिए गए खंड में कोड और टिप्पणियों को बदलें। इसे एक ही ब्लॉक के रूप में विचार करें।
    // फ़ाइल पथ और उनकी अंतिम अपडेट तिथियों को प्राप्त करें (तिथियों के अवरोही क्रम में क्रमबद्ध)
    $filePathsAndDates = array();
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $filePathsAndDates[$key] = filemtime($path);
        } else {
            // इस त्रुटि को लॉग में लिखें और जारी करने या प्रसंस्करण को या नकारात्मक करने का निर्णय लें
            echo "त्रुटि: फ़ाइल मौजूद नहीं है - $path<br>";
        }
    }
    
    // अंतिम अद्यतन तिथि के अवरोही क्रम में क्रमबद्ध करें (नवीनतम तिथि पहले आती है)
    arsort($filePathsAndDates);
    
    // क्रमबद्ध फ़ाइल पथों का एरे पुनर्निर्माण करें
    $sortedFilePaths = array();
    foreach ($filePathsAndDates as $key => $date) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  4. प्रतिस्थापन कोड और टिप्पणियाँ कॉपी करें
    // सारणी जो डाउनलोड की कुल संख्या संग्रहीत करती है
    $totalDownloads = array();
    
    // फ़ाइल पथ और उसके डाउनलोड की कुल संख्या प्राप्त करें
    foreach ($filePath as $key => $path) {
        if (file_exists($path)) {
            $line = file($path);
            $total = 0;
    
           // प्रत्येक पंक्ति के लिए डाउनलोड की संख्या का योग करें
            foreach ($line as $val) {
                $valArray = explode(',', $val);
                $total += trim($valArray[1]);
            }
    
            // डाउनलोड की कुल संख्या को एक सरणी में संग्रहीत करें
            $totalDownloads[$key] = $total;
        } else {
            // इस त्रुटि को लॉग में आउटपुट करें और तय करें कि प्रक्रिया को जारी रखना है या रद्द करना है
            echo "त्रुटि: फ़ाइल मौजूद नहीं है - $path<br>";
        }
    }
    
    // डाउनलोड की कुल संख्या के आधार पर अवरोही क्रम में क्रमबद्ध करें
    arsort($totalDownloads);
    
    // फ़ाइल पथों की क्रमबद्ध सरणी का पुनर्निर्माण करें
    $sortedFilePaths = array();
    foreach ($totalDownloads as $key => $total) {
        $sortedFilePaths[$key] = $filePath[$key];
    }
  5. फ़ाइल निर्माण और सेटअप
    1. जब एक से अधिक पृष्ठ बनाए जा रहे होते हैं, सामग्री जोड़ते समय वस्तुओं की सेटिंग में गड़बड़ी रोकने के लिए, निम्नलिखित कोड का टुकड़ा बाह्यिक फ़ाइल के रूप में बनाएं और इसे वर्तमान में अनुस्थित भाग में एक और कोड के साथ लोड करें। "config.php" जैसे एक नाम से बाह्यिक फ़ाइल बनाएं।
    // डाउनलोड करने की फाइलें कॉन्फ़िगरेशन। यदि एक से अधिक फ़ाइलें हैं, तो उन्हें '2', '3', '4' आदि के रूप में जोड़ें। यहाँ, '0' भी मान्य है।
    // पूर्ति के लिए प्रोटोकॉल के लिए "http:" या "https:" का उपयोग करें।
    $targetFiles = array(
        '1' => 'आपकाURL/फ़ाइलनाम.zip',
        '2' => 'आपकाURL/फ़ाइलनाम.pdf',
        '3' => 'आपकाURL/फ़ाइलनाम.pdf',
        '4' => 'आपकाURL/फ़ाइलनाम.pdf',
    );
  6. "config.php" कहे गए हिस्से का नमूना कॉपी करें
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>DownloadHistory</title>
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    </head>
    <body>
    <?php
    // केवल इस भाग को एक बाहरी फ़ाइल बनाएं और इसे उस पृष्ठ पर लोड करें जिसका उपयोग आप "include __DIR__ . '/config.php';" के साथ करते हैं।
    // डाउनलोड करने की फाइलें कॉन्फ़िगरेशन। यदि एक से अधिक फ़ाइलें हैं, तो उन्हें '2', '3', '4' आदि के रूप में जोड़ें। यहाँ, '0' भी मान्य है।
    // पूर्ति के लिए प्रोटोकॉल के लिए "http:" या "https:" का उपयोग करें।
    $targetFiles = array(
        '1' => 'आपकाURL/फ़ाइलनाम.zip',
        '2' => 'आपकाURL/फ़ाइलनाम.pdf',
        '3' => 'आपकाURL/फ़ाइलनाम.pdf',
        '4' => 'आपकाURL/फ़ाइलनाम.pdf',
    );
    ?>
    </body>
    </html>
    
  7. बाहरी फ़ाइल को पढ़ने के लिए कोड और उसे कहां रखना है
    1. "config.php" जैसे एक नाम के साथ बनाए गए फ़ाइल को निम्नलिखित स्थान पर इस कोड से शामिल करें: "include __DIR__ . '/config.php';"।
    2. निम्नलिखित खंड को टिप्पणी या हटाएं और इसे इस कोड से बदलें: "include __DIR__ . '/config.php';"।
    //$targetFiles = array(
    //    '1' => 'आपकाURL/फ़ाइलनाम.zip',
    //    '2' => 'आपकाURL/फ़ाइलनाम.pdf',
    //    '3' => 'आपकाURL/फ़ाइलनाम.pdf',
    //    '4' => 'आपकाURL/फ़ाइलनाम.pdf',
    //);
  8. बदलने के लिए कोड की प्रतिलिपि
    include __DIR__ . '/config.php';
* प्रोग्राम में "font-family" को आवश्यकतानुसार अपनी साइट के अनुसार समायोजित करें।
《 PHP कोड डाउनलोड करेंगे एक डाउनलोड गिनती बनाने के लिए 》
फ़ाइल को ".php" एक्सटेंशन के साथ सहेजें।.

<?php
//***************************************************************************************************
// डाउनलोड काउंटर और डाउनलोड इतिहास व्यूअर PHP प्रोग्राम
// [एव्रीवन्स नॉलेज ए लिटिल यूजफुल बुक]
// [みんなの知識 ちょっと便利帳]
// https://www.benricho.org/Tips/download_history/
// जारी किया गया: जनवरी 29, 2024
//
// अवलोकन:
// यह प्रोग्राम एक फ़ाइल डाउनलोड के इतिहास को ट्रैक करने के लिए एक सिस्टम है, जिसमें उपयोगकर्ता प्रमाणीकरण कार्यक्षमता से सुसज्जित है।
// इसमें इनपुट डेटा सैनिटाइज़ेशन, लॉग फ़ाइल बनाने और डाउनलोड सांख्यिकी का प्रदर्शन जैसी विशेषताएँ शामिल हैं।
// आप इसे उपयोग कर सकते हैं, कोड को संशोधित करने और पृष्ठ डिज़ाइन बदलने सहित।
//
// ध्यान दें:
// डाउनलोड लिंक्स वाले पृष्ठ को अपलोड करने से पहले, इस फ़ाइल के "$targetFiles = array()" खंड को कॉन्फ़िगर करने की सुनिश्चित करें,
// और डाउनलोड लिंक्स वाले पृष्ठ से पहले इस पृष्ठ को अपलोड करें।
// इसे न करने पर उपयोगकर्ता डाउनलोड करने में असमर्थ हो सकते हैं, क्योंकि यह पृष्ठ डाउनलोड होने वाली फ़ाइलें सेट और संदर्भित करता है।
//
// कॉन्फ़िगरेशन और नोट्स:
// ① पासवर्ड "admin" पर सेट है, लेकिन कृपया इसे किसी भी इच्छित स्ट्रिंग में बदलें।
// ② "लॉग" निर्देशिका जिसमें लॉग फ़ाइलें संग्रहित की जाती हैं, पहले अपलोड पर स्वचालित रूप से उत्पन्न होती है।
// हालांकि, यदि आप "निर्देशिका नहीं मिला" जैसे संदेशों का सामना करें, तो कृपया इसे अलग से अपलोड करें।
// ③ प्रारंभिक अपलोड पर, इतिहास प्रदर्शन में "तारीख" और संख्या "0" दिखाई देती है।
// यह इसलिए है क्योंकि अपलोड तिथि के साथ जैसे "count_1.log" की तरह की लॉग फ़ाइलें स्वचालित रूप से उत्पन्न होती हैं।
// यदि यह एक चिंता है, तो दूरस्थ सर्वर तक पहुँचें, फ़ाइलें जैसे "count_1.log" डाउनलोड करें, डेटा को हटाएं, और फिर अपलोड करें।
// ④ इतिहास प्रदर्शन में पृष्ठ पर एक साथ मल्टीपल तालिकाएँ प्र दर्शित करते समय, आप [$targetFiles = array] में सेट किए गए एरे को बनाए रखने या क्रमबद्ध करने का विकल्प चुन सकते हैं।
// ⑤ इतिहास प्रदर्शन में, आप 1) फ़ाइल दिखा रहे हैं या 2) केवल फ़ाइल का नाम दिखा रहे हैं, इसमें डोमेन शामिल करने का विकल्प चुन सकते हैं।
//
// [डाउनलोड लिंक्स वाले पृष्ठ पर लिंक का प्रारूप]
// [उदाहरण] <a href="/download_history/count.php?download=Registered Number" download="DownloadedFileName.zip" target="_blank">[Any String]</a>
// ① "download=1" में नंबर को "$targetFiles = array()" में सेट किए गए नंबर के साथ मेल करें।
// ② अपने पृष्ठ से मेल खाता है, उसे मेल खाता है।
//
// [पृष्ठ पर एक रेखा में इतिहास प्रदर्शन करने के लिए कोड (जावास्क्रिप्ट)]
// [उदाहरण] <script type="text/javascript" src="/download_history/count.php?dsp_count=1&day_dsp=on"></script>
// ① "dsp_count=1" में नंबर को "$targetFiles = array()" में सेट किए गए नंबर के साथ मेल करें।
// ② यदि आप "&day_dsp=on" को हटा दें, तो यह केवल "टोटल" को बिना "आज" और "कल" के साथ प्रदर्शित करेगा।
// ③ अपने पृष्ठ से मेल खाता है, उसे मेल खाता है।
//***************************************************************************************************

// डाउनलोड करने की फाइलें कॉन्फ़िगरेशन। यदि एक से अधिक फ़ाइलें हैं, तो उन्हें '2', '3', '4' आदि के रूप में जोड़ें। यहाँ, '0' भी मान्य है।
// पूर्ति के लिए प्रोटोकॉल के लिए "http:" या "https:" का उपयोग करें।
$targetFiles = array(
    '1' => 'आपकाURL/फ़ाइलनाम.zip',
    '2' => 'आपकाURL/फ़ाइलनाम.pdf',
    '3' => 'आपकाURL/फ़ाइलनाम.pdf',
    '4' => 'आपकाURL/फ़ाइलनाम.pdf',
);

// HTML आउटपुट के लिए वर्ण संकोडित करें
header("Content-Type: text/html; charset=utf-8");

// डाउनलोड इतिहास प्रदर्शन करने वाले पृष्ठ पर वर्ण संकोडन
$encodingType = 'UTF-8';

// उपयोगकर्ता प्रमाणीकरण जानकारी और अन्य सेटिंग्स को परिभाषित करें
$userid = 'admin';   // उपयोगकर्ता आईडी (इसे किसी भी स्ट्रिंग से बदलें)
$password = 'admin'; // पासवर्ड (इसे किसी भी स्ट्रिंग से बदलें)
$hashedPassword = password_hash($password, PASSWORD_DEFAULT); // हैश मूल्य उत्पन्न करने के लिए password_hash() का उपयोग करें
$dataLogDir = 'log/'; // यह प्रोग्राम द्वारा स्वचालित रूप से उत्पन्न 'लॉग' निर्देशिका है। यदि नहीं बनाई गई है, तो एक अलग से नामित 'लॉग' नामक निर्देशिका अपलोड करें

// फ़ाइल का नाम प्रदर्शित करते समय डोमेन शामिल करना है या नहीं, इसे चुनें
$includeDomain = 1;  // 1: डोमेन नाम सहित प्रदर्शित करें, 0: केवल फ़ाइल का नाम प्रदर्शित करें

// पृष्ठ पर एक साथ मल्टीपल तालिकाएँ प्रदर्शित करते समय नए लॉगों के क्रम में मूल एरे को एक नए से बदलने का विकल्प चुनें
$sortTables = 1;  // 1: क्रमबद्ध करें, 0: क्रमबद्ध न करें

$dir = 'log'; // लॉग फ़ाइलें और डाउनलोड इतिहास संग्रहित करने के लिए निर्देशिका

// अपनी साइट का डोमेन प्राप्त करें
$domain = $_SERVER['HTTP_HOST'];

// सत्र प्रबंधन: सत्र हाइजैकिंग को रोकें और session_set_cookie_params() का उपयोग करें
session_set_cookie_params(0, '/', $domain, true, true); // HttpOnly और Secure फ़्लैग सेट करें
session_start();
if (!isset($_SESSION['auth'])) {
    $_SESSION['auth'] = FALSE;
}

// पासवर्ड हैशिंग: password_needs_rehash() का उपयोग करें
if (password_needs_rehash($hashedPassword, PASSWORD_DEFAULT)) {
    $newHashedPassword = password_hash($password, PASSWORD_DEFAULT);
    // एक डेटाबेस आदि में नए हैश मूल्य को सहेजें
}

// यदि यह मौजूद नहीं है, तो निर्देशिका बनाएं
if (!is_dir($dir)) {
    if (mkdir($dir, 0755, true)) {
    } else {
        // निर्देशिका बनाने में असफलता होने पर प्रदर्शित करें
        echo 'कृपया "' . $dataLogDir . '" निर्देशिका बनाएं और इसे अलग से अपलोड करें।';
    }
}

// यह सुनिश्चित करने के लिए कि लॉग निर्देशिका लेखनी योग्य है
if (!is_writable($dataLogDir)) {
    die('"' . $dataLogDir . '" निर्देशिका या तो मौजूद नहीं है या उसमें लेखन की अनुमति नहीं है। कृपया निर्देशिका बनाएं और अनुमतियाँ सही से सेट करें (उदाहरण के लिए, 755)।');
}

// आपकी साइट की मूल तिथि और कल की तिथि प्राप्त करें
$baseDay = date("Y/m/d");
$yesterday = date("Y/m/d", strtotime("-1 day"));

// एक तिथि से सप्ताह के दिन प्राप्त करने के लिए एक फ़ंक्शन
function getDayOfWeek($date)
{
    $dayOfWeek = date('w', strtotime($date));
    $weekDays = array('Rav', 'Som', 'Mangal', 'Budh', 'Guru', 'Shukr', 'Shani' );
    return $weekDays[$dayOfWeek];
}

// प्रत्येक लक्ष्य फ़ाइल के लिए फ़ाइल पथ सेट करें और एक लॉग फ़ाइल बनाएं अगर यह मौजूद नहीं है
foreach ($targetFiles as $key => $val) {
    $filePath[$key] = $dataLogDir . "count_" . $key . ".log";

    // यदि यह मौजूद नहीं है, तो लॉग फ़ाइल बनाएं
    if (!file_exists($filePath[$key])) {
        createLogFile($filePath[$key]);
    }
}

// फ़ाइल पथ और उनकी अंतिम अपडेट तिथियों को प्राप्त करें (तिथियों के अवरोही क्रम में क्रमबद्ध)
$filePathsAndDates = array();
foreach ($filePath as $key => $path) {
    if (file_exists($path)) {
        $filePathsAndDates[$key] = filemtime($path);
    } else {
        // इस त्रुटि को लॉग में लिखें और जारी करने या प्रसंस्करण को या नकारात्मक करने का निर्णय लें
        echo "त्रुटि: फ़ाइल मौजूद नहीं है - $path<br>";
    }
}

// अंतिम अद्यतन तिथि के अवरोही क्रम में क्रमबद्ध करें (नवीनतम तिथि पहले आती है)
arsort($filePathsAndDates);

// क्रमबद्ध फ़ाइल पथों का एरे पुनर्निर्माण करें
$sortedFilePaths = array();
foreach ($filePathsAndDates as $key => $date) {
    $sortedFilePaths[$key] = $filePath[$key];
}

// क्रमबद्ध पथों का उपयोग करने के लिए क्या उपयोग करना है, इसे शर्तानुसार चयन करें
$filePath = ($sortTables) ? $sortedFilePaths : $filePath;

// क्लाइंट के लिए JavaScript कोड लौटाएं (डाउनलोड गिनती को गतिशीलता से प्रदर्शित करना)
if (isset($_GET['dsp_count'])) {
    header("Content-type: application/x-javascript");

    // वाणिज्यिक रूप से हैडर सेट करें जैसा कि जावास्क्रिप्ट फ़ाइल
    if (!preg_match("/^[0-9]+$/", $_GET['dsp_count'])) {
        echo "document.write(\"पैरामीटर एक हाफ़-विड्थ नंबर होना चाहिए\")";
        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]);
        }
    }

    // यदि तिथि प्रदर्शन विकल्प चालू है, तो तिथि को सहित प्रदर्शित करें
    if (isset($_GET['day_dsp']) && $_GET['day_dsp'] == 'on') {
        $countDsp = <<<EOF
document.write('<div class="counter_inpage">कुल डाउनलोड: <strong>{$total}</strong>[<span class="count_today">आज : <strong>{$todayCount}</strong></span>  <span class="count_yesterday">कल : <strong>{$yesterdayCount}</strong></span>]</div>')
EOF;
    } else {
        // यदि तिथि प्रदर्शन विकल्प बंद है, तो केवल कुल डाउनलोड गिनती प्रदर्शित करें
        $countDsp = <<<EOF
document.write('<p class="counter_inpage">कुल डाउनलोड: {$total}</p>')
EOF;
    }

    // यदि वर्ण संकोडन प्रकार UTF-8 नहीं है, तो कनवर्ट करें
    if ($encodingType != 'UTF-8') $countDsp = mb_convert_encoding($countDsp, "$encodingType", 'UTF-8');
    echo $countDsp;

    exit();
}

// जब एक फ़ाइल डाउनलोड का अनुरोध हो
if (isset($_GET['download'])) {
    $fileId = $_GET['download'];

    // यदि फ़ाइल आईडी एक नंबर नहीं है या यदि फ़ाइल आईडी मौजूद नहीं है, तो बाहर निकलें
    if (!preg_match("/^[0-9]+$/", $fileId) || !isset($filePath[$fileId])) {
        exit('गलत संख्यात्मक पैरामीटर');
    }

    // फ़ाइल खोलें और इसे लॉक करें
    $fp = fopen($filePath[$fileId], "rb+");
    if (!$fp) {
        exit('फ़ाइल खोलने में असफल');
    }

    flock($fp, LOCK_EX);

    // लॉग फ़ाइल पढ़ें और इसे एक एरे में सहेजें
    $line = array();
    while (($data = fgets($fp)) !== false) {
        $line[] = $data;
    }

    // फ़ाइल को कट करें और उसके शुरू में एक नई तिथि रेखा जोड़ें
    ftruncate($fp, 0);
    rewind($fp);

    // यदि यह मौजूद नहीं है, तो एक नई तिथि रेखा जोड़ें
    if (strpos($line[0], $baseDay) === false) {
        $writeLine = $baseDay . ',1' . "\n";
        fwrite($fp, $writeLine);
    }

    // फ  ाइल में प्रत्येक पंक्ति को प्रस्तुत करें
    foreach ($line as $val) {
        // मौजूद तिथि के लिए डाउनलोड गिनती बढ़ाएं
        if (strpos($val, $baseDay) !== false) {
            $valArray = explode(',', $val);
            $valArray[1] = rtrim($valArray[1], "\n") + 1;
            $val = $valArray[0] . ',' . $valArray[1] . "\n";
        }
        fwrite($fp, $val);
    }

    // बफ़र फ्लश करें और लॉक रिलीज़ करें
    fflush($fp);
    flock($fp, LOCK_UN);

    // फ़ाइल बंद करें
    fclose($fp);

    // आउटपुट बफ़र साफ़ करें
    ob_end_clean();

    // फ़ाइल डाउनलोड करें
    header("Location: {$targetFiles[$fileId]}");
    exit();
} else {
    // सत्र शुरू करें, यदि लॉगआउट का अनुरोध किया गया है, सत्र नष्ट करें
    session_start();
    if (isset($_GET['logout'])) {
        $_SESSION = array();
        session_destroy();
    }

    $loginError = '';

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

    // पासवर्ड हैश फ़ंक्शन का उपयोग करके हैश मूल्य उत्पन्न करें
    // लॉगिन प्रोसेसिंग
    if (isset($_POST['userid']) && isset($_POST['password'])) {
        // प्रमाणीकरण के लिए हैश मूल्यों की तुलना करें
        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 {
            // प्रमाणीकरण असफलता के लिए प्रोसेसिंग
            $_SESSION['auth'] = FALSE;
            $loginError = '<div style="text-align: center; color: crimson;">गलत उपयोगकर्ता आईडी या पासवर्ड।</div>';
        }
    }

  // यदि प्रमाणीकरण सफल नहीं है, तो लॉगिन स्क्रीन प्रदर्शित करें
    if ($_SESSION['auth'] !== TRUE) {
        ?>
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="utf-8">
            <meta name="robots" content="NOINDEX,NOFOLLOW">
            <title>डाउनलोड इतिहास लॉगिन स्क्रीन</title>
            <!-- लॉगिन स्क्रीन स्टाइल (आवश्यकतानुसार संशोधित किया जा सकता है)-->
            <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">【डाउनलोड इतिहास देखें】</p>
            <?php if (isset($loginError)): ?>
                <!-- यदि $loginError चर प्रतिस्थापित है, तो एक त्रुटि संदेश प्रदर्शित करें -->
                <p style="color: crimson;"><?php echo $loginError; ?></p>
            <?php endif; ?>
            <label for="userid">उपयोगकर्ता आईडी:</label>
            <input type="text" id="userid" name="userid" required>
            <label for="password">पासवर्ड:</label>
            <input type="password" id="password" name="password" required>
            <?php
                // $showPassword को प्रारंभ में पासवर्ड प्रदर्शित करने का निर्धारण करने वाली PHP चर मानके रूप में मानते हुए
                echo '<label class="passwordshow" for="showPassword">[पासवर्ड दिखाएं]<div class="center-container"><input type="checkbox" id="showPassword" onchange="togglePasswordVisibility()" ' . ($showPassword ? 'checked' : '') . '></div></label>';
            ?>
            <button type="submit" name="login_submit">लॉगिन</button>
        </form>   
    </div>

    <!-- पासवर्ड की दृश्यता को नियंत्रित करें -->
    <script>
        function togglePasswordVisibility() {
            var passwordInput = document.getElementById('password');
            var showPasswordCheckbox = document.getElementById('showPassword');

            if (showPasswordCheckbox.checked) {
                // यदि चेक किया गया है, तो पासवर्ड प्रदर्शित किया जाएगा
                passwordInput.type = 'text';
            } else {
                // चेक को हाइड करने के लिए
                passwordInput.type = 'password';
            }
        }
    </script>
</body>
</html><?php
exit();
} else {
  // यदि लॉगिन हुआ है, तो डाउनलोड इतिहास पृष्ठ प्रदर्शित करें
  ?>
  <!DOCTYPE html>
  <html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    <title>डाउनलोड इतिहास</title>
    <!-- डाउनलोड इतिहास दृश्य स्टाइल (आवश्यकतानुसार संशोधित किया जा सकता है) -->
    <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">【डाउनलोड इतिहास】 【<a href="?logout=true">लॉगआउट</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">तारीख</th>
            <th class="tableheader">डाउनलोड</th>
          </tr>
          <?php	  
            $totalDownload = 0;

            // केवल यदि फ़ाइल मौजूद है तो पढ़ें
            if (file_exists($val)) {
              $line = file($val);
              foreach ($line as $lineVal) {
                $lineArray = explode(',', $lineVal);

                // जांचें कि क्या $lineArray[1] एक संख्यात्मक मूल्य है
                $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">कुल डाउनलोड: <?php echo $totalDownload;?></th>
          </tr>
        </table>
      </div>              
    <?php
            }
          }
        ?>
</body>
</html><?php
// सभी तत्वों को सैनिटाइज़ करने के लिए एक नई लॉग फ़ाइल बनाएं
function sanitize($arr)
{
  // यदि यह एक ऐरे है, तो सैनिटाइज़े को लागू करें
  if (is_array($arr)) {
    return array_map('sanitize', $arr);
  }
  // स्ट्रिंग्स के भीतर से NULL वर्ण हटाएं
  return str_replace("\0", "", $arr);
}

// यदि यह मौजूद नहीं है तो एक नई लॉग फ़ाइल बनाएं
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);

    // फ़ाइल अनुमतियां सेट करें
    chmod($filePath, 0666);
  } else {
  }
}
फ़ाइल को ".php" एक्सटेंशन के साथ सहेजें।
यह "डाउनलोड काउंटर/डाउनलोड इतिहास देखने कार्यक्रम" के PHP कोड का परिचय समाप्त होता है। हम आशा करते हैं कि यह आपके लिए उपयोगी होगा।

यह शब्दों में त्रुटियां हो सकती हैं क्योंकि यह जापानी संस्करण से अनुवाद है। कोड में शब्दों में त्रुटि होने की क्षमा करें, लेकिन यदि आपको कोड में शब्दों में त्रुटि दिखाई दे रही है, तो कृपया खुद सुधार या समायोजन करें।

आपके इस कोड का उपयोग करने पर आपकी प्रतिक्रिया का स्वागत है। कृपया ध्यान दें कि मैं प्रश्नों का उत्तर नहीं दे सकता हूं।

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

Last updated : 2024/06/29