2010-08-02 9 views
9

अपाचे लॉग कॉन्फ़िगरेशन में यह निर्दिष्ट करना संभव है कि HTTP लेखक उपयोगकर्ता नाम लॉग होना चाहिए। अधिकांश PHP स्क्रिप्ट्स का अपना स्वयं का, कुकी-आधारित प्रमाणीकरण होता है। PHP में यह संभव है कि अपाचे को लॉगिंग उद्देश्यों के लिए HTTP औथ उपयोगकर्ता नाम के साथ प्रदान किया जाए, भले ही प्रमाणीकरण कुकी-आधारित है? यदि हां, तो कोड कैसा दिखता है? यदि नहीं, तो विकल्प क्या हैं?PHP के साथ apache access_log में उपयोगकर्ता नाम रखें और बिना HTTP auth

+0

मैं प्रतिक्रिया हेडर), यहाँ यह करने के लिए एक रास्ता है ऐसा मत सोचो कि यह अच्छा विचार है। एक अलग लॉगफाइल का उपयोग क्यों नहीं करें? –

+1

क्योंकि मैं AWStats जैसे टूल के साथ सरल आंकड़े करना चाहता हूं। – chiborg

उत्तर

11

अपाचे नोट्स में मॉड्यूल के बीच डेटा पास करता है। यदि आप एक अपाचे मॉड्यूल के रूप में PHP चलाते हैं, तो आप नोट्स प्राप्त करने और सेट करने के लिए apache_note() का उपयोग कर सकते हैं। इसके बाद आप एक्सेस लॉग में लिखने के लिए the %{note_name}n log format string शामिल कर सकते हैं। यह ग्राहक को किसी भी डेटा को वापस "रिसाव" नहीं करेगा।

PHP में:

apache_note('username', $username); 

अपने सर्वर विन्यास में:

LogFormat "%h %l %{username}n %t \"%r\" %>s %b" common_with_php_username 
CustomLog logs/access_log common_with_php_username 
2

एक संभावना कहीं और उपयोगकर्ता नाम & अतीत session_ids की दुकान है, और आप फिर वापस ट्रेस कर सकते हैं जो लॉग यह (आमतौर पर %{PHPSESSID}C) में कुकी मानों बारे में जाने, के लिए है।

एक अन्य विकल्प एक हैडर उपयोगकर्ता नाम के साथ अधिमानतः सही अपने session_start के बाद, ग्राहक के लिए वापस भेजने के लिए होगा:

पीएचपी:

header('X-Php-Sess-User: '.$username); 

Customlog:

%{X-Php-Sess-User}o 
0

की कमी आंतरिक लेख * डेटा संरचनाओं को स्पर्श करने के लिए अपाचे हैंडलर का उपयोग करके, आपका सर्वोत्तम शर्त पर्यावरण चर का सहारा लेना है। आप अपने PHP कोड

apache_setenv('USERID','jrodriguez',true); 

में apache_setenv का उपयोग कर एक उच्च-स्तरीय वातावरण चर सेट और फिर का उपयोग कर "% {USERID} ई" के बदले "अपने अपाचे config में एक LogFormat प्रवेश के साथ लॉग फ़ाइल के लिए मूल्य लिखते थे % u "

LogFormat "%v:%p %h %l %{USERID}e %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" envuid_combined 
CustomLog /path/to/access.log envuid_combined 
बेशक

, असली साख जब वास्तविक HTTP प्रमाणन प्रदर्शन हमेशा के लिए खो जाएगा, तो यू कहीं और% की बचत पर विचार - या तो एक नए क्षेत्र में या एक समानांतर लॉग फ़ाइल में।

+0

एक पर्यावरण परिवर्तनीय वैश्विक नहीं होगा और इस तरह अविश्वसनीय –

+0

@Esben सुनिश्चित नहीं है कि आपका क्या मतलब है, लेकिन सामान्य रूप से, नहीं - एक envorioment चर वैश्विक नहीं है। उपरोक्त समाधान मेरे लिए पूरी तरह से काम करता है। – rjmunro

7

अपाचे 2.4.7 के बाद से अपाचे आप एक नोट के लिए एक प्रतिक्रिया हेडर कॉपी करने के लिए अनुमति देता है। इसलिए यदि आप एक अपाचे मॉड्यूल के रूप में PHP नहीं चलाते हैं (लेकिन उदाहरण के लिए PHP-FPM का उपयोग करें), और आप यह भी नहीं चाहते कि क्लाइंट को लॉग-मान भेजा जाए (जो आमतौर पर होता है यदि आप इसे सेट करते हैं

php:

header('X-Username: '.$username); 

httpd.conf:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{username}n\"" logfmtname 

vhost.conf:

CustomLog logs/vhost-access_log logfmtname 

# copy response-header value to note 
Header note X-Username username 
# unset response-header so client won't get it 
Header unset X-Username 
संबंधित मुद्दे