जब से तुम ने कहा कि आप अपाचे पर हैं, यहाँ 2 विचार कर रहे हैं।
पहले विचार (तथा इसलिए यह विचार लेकिन मज़ा के बारे में सोचना ...):
कुकीज़ (सभी छवियों आदि सहित) सर्वर पर प्रत्येक अनुरोध के साथ भेजा जाता है। जब उपयोगकर्ता PHP के साथ एक कुकी सेट करने में लॉग इन करता है और इसे USERTOKEN
नाम देता है तो उसके मान को उस उपयोगकर्ता की आईडी के md5 + नमक पर सेट करें।
कस्टम LogFormat
निर्देश में %{USERTOKEN}C
और %B
डालें।
LogFormat "%B %{USERTOKEN}C" php_bandwidth_log
CustomLog "logs/php_bandwidth_log" php_bandwidth_log
उसके बाद, आप php_bandwidth_log पार्स और मूल उपयोगकर्ता के आईडी से मैप करने के लिए करने के लिए एक स्क्रिप्ट बनाने:
%{Foobar}C The contents of cookie Foobar in the request sent to the server.
Only version 0 cookies are fully supported.
%B Size of response in bytes, excluding HTTP headers.
अब, आपको लगता है कि इस तरह दिखता है एक कस्टम लॉग प्रारूप पैदा करते हैं।
दुर्भाग्यवश यह विचार मूर्खतापूर्ण नहीं है क्योंकि कोई भी कुकी (शायद) को पारित करके साइट सामग्री का अनुमान लगा सकता है। वैसे भी, आपकी स्थिति के आधार पर यह आपके लिए काम कर सकता है, यदि नहीं, तो वैकल्पिक और बेहतर विचार मूल रूप से सभी सामग्री को PHP स्क्रिप्ट के माध्यम से रूट करना है ताकि आप किसी भी तरह की लॉगिंग कर सकें।
दूसरा विचार (बेहतर):
तो, एक PHP फ़ाइल है कि इस प्रकार /files.php?path=/blah/blah.jpg
(इस उदाहरण के लिए oversimplified, एक mod_rewrite नियम के साथ prettied जा सकता है) कहा जा सकता है बनाने के तो आप इसके अंदर उस उपयोगकर्ता की आईडी लॉग कर सकते हैं और एक्सेस की गई फ़ाइलों को ट्रैक कर सकते हैं। यह माना जाता है कि आप केवल फाइलों को ट्रैक करना चाहते हैं। यह पृष्ठ पर जेनरेट किए गए HTML का ट्रैक नहीं रखेगा - आप शायद पहले निर्दिष्ट कस्टम अपाचे लॉगिंग विचार का उपयोग कर सकते हैं लेकिन उस जानकारी को प्राप्त करने के लिए इसे थोड़ा सा संशोधित कर सकते हैं।
यहाँ आप विचार प्राप्त करने में मदद करने के लिए कुछ छद्म कोड है:
if (!$hasSession) {
die("Invalid session");
}
$size = filesize($path);
insert_into_bandwidth_table($userId, $size);
header("Content-Type: ...");
readfile($path);
निम्नलिखित कैसे आप निष्पादित PHP स्क्रिप्ट के लिए सिर्फ प्रतिक्रिया आकार ट्रैक कर सकते हैं, लेकिन यह केवल आप के रूप में पीएचपी चला रहे हैं काम करेंगे है एक मॉड्यूल
आपके PHP में ऐसा कुछ जोड़ें। मूल रूप से इस लॉग लेखन प्रयोजनों के लिए इस चर को पढ़ने के लिए अपाचे अनुमति देता है:
apache_note("PHP_USER_ID", 1234);
apache_note - apache_note - जाओ और सेट अपाचे अनुरोध नोट
विवरण: यह समारोह अपाचे के table_get और table_set के लिए एक आवरण है। यह नोट्स की तालिका को संपादित करता है जो अनुरोध के दौरान मौजूद होता है। तालिका का उद्देश्य अपाचे मॉड्यूल को संवाद करने की अनुमति देना है। डॉक्स से नोट पर
LogFormat "%B %{PHP_USER_ID}n" php_bandwidth_log
CustomLog "logs/php_bandwidth_log" php_bandwidth_log
जानकारी::
Read more here
अपने httpd.conf लॉग विन्यास में
फिर कुछ इस तरह करते हैं
%{Foobar}n The contents of note Foobar from another module.
और ... बस एहसास हुआ कि अगर आप इसे मॉड्यूल के रूप में नहीं चला रहे हैं तो apache_note का एक विकल्प है। आपका PHP कोड के बजाय इस करना होगा:
LogFormat "%B %{PHP_USER_ID}e" php_bandwidth_log
एक ही सर्वर पर सब कुछ है:
तो फिर तुम इस LogFormat निर्देश का प्रयोग करेंगे लॉग इन करने की? – Clay
और, आप किस वेब सर्वर पर चल रहे हैं? अमरीका की एक मूल जनजाति? या दूसरा एक? देर से प्रतिक्रिया के लिए – Clay
@Clayton क्षमा करें। हां सब कुछ एक ही सर्वर पर है और अपाचे –