PHP का $_SERVER सुपरग्लोबल ऐरे ($HTTP_SERVER_VARS)। $_SERVER - $_SERVER सरणी के तत्वों का उपयोग करके सर्वर और रनटाइम वातावरण के बारे में जानकारी

$_SERVER["DOCUMENT_ROOT"] तत्व में सर्वर की रूट निर्देशिका का पथ होता है; यदि स्क्रिप्ट को वर्चुअल होस्ट में निष्पादित किया जाता है, तो यह तत्व वर्चुअल होस्ट की रूट निर्देशिका का पथ निर्दिष्ट करता है। वे। httpd.conf कॉन्फ़िगरेशन फ़ाइल में, वर्चुअल होस्ट के पास "D:/main" पर DocumentRoot निर्देश सेट है, $_SERVER["DOCUMENT_ROOT"] तत्व में "D:main" मान होगा।

$_SERVER["HTTP_ACCEPT"] तत्व

$_SERVER["HTTP_ACCEPT"] तत्व दस्तावेज़ प्रकार के संबंध में क्लाइंट की वरीयता का वर्णन करता है। इस तत्व की सामग्री क्लाइंट से सर्वर पर भेजे गए एक्सेप्ट एचटीटीपी हेडर से प्राप्त की जाती है। इस हेडर की सामग्री इस तरह दिख सकती है

इमेज/जीआईएफ, इमेज/एक्स-एक्सबिटमैप, इमेज/जेपीईजी, इमेज/पीजेपीईजी, एप्लिकेशन/एक्स-शॉकवेव-फ्लैश, एप्लिकेशन/वीएनडी.एमएस-एक्सेल, एप्लिकेशन/एमएसवर्ड, */*

एक्सेप्ट हेडर आपको उस मीडिया प्रकार को निर्दिष्ट करने की अनुमति देता है जिसे क्लाइंट अपने अनुरोध के जवाब में प्राप्त करना पसंद करता है। यह हेडर आपको सर्वर को यह बताने की अनुमति देता है कि प्रतिक्रिया पसंदीदा प्रकारों के एक छोटे से सेट तक सीमित है।

मीडिया पंक्ति में समूह प्रकारों के लिए * प्रतीक का उपयोग किया जाता है। उदाहरण के लिए, प्रतीक */* सभी प्रकार के उपयोग को निर्दिष्ट करता है, और संकेतन प्रकार/* चयनित प्रकार के सभी उपप्रकारों के उपयोग को निर्दिष्ट करता है।

टिप्पणी

मीडिया प्रकारों को अल्पविराम द्वारा एक दूसरे से अलग किया जाता है।

प्रत्येक मीडिया पंक्ति को मापदंडों के एक अतिरिक्त सेट की विशेषता है। उनमें से एक तथाकथित सापेक्ष वरीयता गुणांक q है, जो क्रमशः 0 से 1 तक मान लेता है, कम पसंदीदा प्रकारों से अधिक पसंदीदा लोगों तक। एकाधिक q पैरामीटर का उपयोग करने से क्लाइंट सर्वर को किसी दिए गए मीडिया प्रकार के लिए वरीयता की सापेक्ष डिग्री बता सकता है।

टिप्पणी

q पैरामीटर डिफ़ॉल्ट रूप से 1 हो जाता है। इसे अर्धविराम द्वारा मीडिया प्रकार से भी अलग किया जाता है।

हेडर उदाहरण स्वीकार करें:

स्वीकार करें: ऑडियो/*; क्यू=0.2, ऑडियो/बेसिक

इस शीर्षलेख में, पहला प्रकार ऑडियो/* है, जिसमें सभी संगीत दस्तावेज़ शामिल हैं और 0.2 के वरीयता गुणांक की विशेषता है। एक अल्पविराम से अलग ऑडियो/मूल प्रकार निर्दिष्ट है, जिसके लिए वरीयता गुणांक निर्दिष्ट नहीं है और एक का डिफ़ॉल्ट मान मानता है। इस शीर्षक को उद्धृत करते हुए इस प्रकार व्याख्या की जा सकती है: "मैं ऑडियो / मूल प्रकार पसंद करता हूं, लेकिन मैं किसी अन्य ऑडियो प्रकार के दस्तावेज़ भी भेज सकता हूं, यदि उपलब्ध हो, वरीयता गुणांक को 80% से अधिक कम करने के बाद।"

उदाहरण अधिक जटिल हो सकता है।

स्वीकार करें: पाठ/सादा; क्यू = 0.5, टेक्स्ट/एचटीएमएल,
टेक्स्ट/एक्स-डीवीआई; क्यू=0.8, टेक्स्ट/एक्स-सी

टिप्पणी

ध्यान दें कि $_SERVER["HTTP_ACCEPT"] तत्व में बिल्कुल वही जानकारी है, लेकिन प्रारंभिक स्वीकृति शीर्षलेख के बिना।

इस हेडर की व्याख्या इस प्रकार की गई है: दस्तावेज़ प्रकार टेक्स्ट/एचटीएमएल और टेक्स्ट/एक्स-सी को प्राथमिकता दी जाती है, लेकिन यदि वे उपलब्ध नहीं हैं, तो यह अनुरोध करने वाला क्लाइंट टेक्स्ट/एक्स-डीवीआई पसंद करेगा, और यदि नहीं, तो यह टेक्स्ट/प्लेन स्वीकार कर सकता है .

$_SERVER["HTTP_ACCEPT_LANGUAGE"] तत्व

$_SERVER["HTTP_ACCEPT_LANGUAGE"] तत्व क्लाइंट की भाषा प्राथमिकताओं का वर्णन करता है। यह जानकारी क्लाइंट से सर्वर पर भेजे गए एक्सेप्ट-लैंग्वेज HTTP हेडर से प्राप्त की जाती है। निम्नलिखित उदाहरण दिया जा सकता है:

स्वीकार-भाषा: आरयू, एन; क्यू = 0.7

जिसकी व्याख्या इस प्रकार की जा सकती है: ग्राहक रूसी भाषा पसंद करता है, लेकिन यदि यह उपलब्ध नहीं है, तो वह अंग्रेजी में दस्तावेजों को स्वीकार करने के लिए सहमत है। $_SERVER["HTTP_ACCEPT_LANGUAGE"] तत्व में बिल्कुल वही जानकारी होगी, लेकिन स्वीकृति-भाषा शीर्षलेख के बिना:

आरयू, एन; क्यू = 0.7

$_SERVER["HTTP_ACCEPT_LANGUAGE"] तत्व की सामग्री का उपयोग आगंतुकों की राष्ट्रीयता निर्धारित करने के लिए किया जा सकता है। हालांकि, परिणाम अनुमानित होंगे, क्योंकि कई उपयोगकर्ता ब्राउज़र के अंग्रेजी संस्करणों का उपयोग करते हैं, जो सर्वर को सूचित करेगा कि आगंतुक केवल एक भाषा - अंग्रेजी पसंद करता है।

$_SERVER["HTTP_HOST"] तत्व

$_SERVER["HTTP_HOST"] तत्व में सर्वर का नाम होता है, जो आमतौर पर सर्वर पर होस्ट की गई साइट के डोमेन नाम के समान होता है। आमतौर पर, इस पैरामीटर में निर्दिष्ट नाम $_SERVER["SERVER_NAME"] जैसा ही होता है। पैरामीटर में प्रोटोकॉल नाम (http://) के बिना केवल डोमेन नाम होता है, अर्थात।

www.sofftime.ru

$_SERVER["HTTP_REFERER"] तत्व

$_SERVER["HTTP_REFERER"] तत्व में उस पृष्ठ का पता होता है जिससे आगंतुक इस पृष्ठ पर आया था। संक्रमण एक लिंक के माध्यम से होना चाहिए। चलिए दो पेज index.php और page.php बनाते हैं।

index.php पेज

गूंज "पीएचपी पेज से लिंक करें
"
;
$_SERVER["HTTP_REFERER"]
?>

page.php पेज में समान सामग्री होगी, लेकिन लिंक index.php पेज की ओर इशारा करेगा।

पेज पेज.php

गूंज "पीएचपी पेज से लिंक करें
"
;
इको "$_SERVER ["HTTP_REFERER"] की सामग्री "है।
$_SERVER["HTTP_REFERER"]
?>

एक पृष्ठ से दूसरे पृष्ठ पर जाने पर, उस पृष्ठ का पता जिससे संक्रमण किया गया था, लिंक के नीचे प्रदर्शित होगा।

$_SERVER["HTTP_USER_AGENT"] तत्व

$_SERVER["HTTP_USER_AGENT"] तत्व में विज़िटर के ब्राउज़र और ऑपरेटिंग सिस्टम के प्रकार और संस्करण के बारे में जानकारी होती है।

इस लाइन की विशिष्ट सामग्री यहां दी गई है: "मोज़िला/4.0 (संगत; एमएसआईई 6.0; विंडोज एनटी 5.1)"। सबस्ट्रिंग "MSIE 6.0" की उपस्थिति इंगित करती है कि आगंतुक इंटरनेट एक्सप्लोरर संस्करण 6.0 का उपयोग करके पृष्ठ देख रहा है। स्ट्रिंग "विंडोज एनटी 5.1" इंगित करता है कि ऑपरेटिंग सिस्टम विंडोज एक्सपी है।

टिप्पणी

विंडोज 2000 के लिए, $_SERVER["HTTP_USER_AGENT"] तत्व इस तरह दिखता है: "मोज़िला/4.0 (संगत; एमएसआईई 5.01; विंडोज एनटी 5.0)")", जबकि विंडोज एक्सपी के लिए यह "मोज़िला/4.0 (संगत; एमएसआईई) जैसा दिखता है। 6.0); विंडोज एनटी 5.1)"।

यदि आगंतुक ओपेरा ब्राउज़र का उपयोग कर रहा है, तो $_SERVER["HTTP_USER_AGENT"] की सामग्री इस तरह दिख सकती है: "मोज़िला/4.0 (संगत; एमएसआईई 5.0; विंडोज 98) ओपेरा 6.04 "। सबस्ट्रिंग "एमएसआईई 6.0" भी यहां मौजूद है, यह दर्शाता है कि ओपेरा ब्राउज़र इंटरनेट एक्सप्लोरर ब्राउज़र के साथ संगत है और उसी विंडोज डीएलएल का उपयोग करता है। इसलिए, ब्राउज़र द्वारा लौटाए गए स्ट्रिंग को पार्स करते समय, ध्यान रखें कि इंटरनेट एक्सप्लोरर एक स्ट्रिंग को संदर्भित करता है जिसमें "MSIE 6.0" विकल्प होता है और इसमें "ओपेरा" विकल्प नहीं होता है। इस लाइन से यह भी निष्कर्ष निकाला जा सकता है कि उपयोगकर्ता विंडोज 98 ऑपरेटिंग सिस्टम का उपयोग कर रहा है।

टिप्पणी

फ़ायरफ़ॉक्स ब्राउज़र उपयोगकर्ता एजेंट इस तरह दिख सकता है Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5.

नेटस्केप ब्राउज़र का उपयोग करते समय, $_SERVER["HTTP_USER_AGENT"] तत्व की सामग्री इस तरह दिख सकती है: "मोज़िला/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1" . इस ब्राउज़र को "नेटस्केप" सबस्ट्रिंग की उपस्थिति से पहचाना जा सकता है। इसके अलावा, आप एक्स-विंडो जीयूआई में रहते हुए यह पता लगा सकते हैं कि आगंतुक पेंटियम IV-अनुकूलित कर्नेल के साथ लिनक्स ऑपरेटिंग सिस्टम का उपयोग करके इंटरनेट का उपयोग करता है। यह तंत्र सांख्यिकीय जानकारी एकत्र करने के लिए उपयोगी है जो डिजाइनरों को सबसे सामान्य ब्राउज़रों के लिए पृष्ठों को अनुकूलित करने की अनुमति देता है।

तत्व $_SERVER["REMOTE_ADDR"]

$_SERVER["REMOTE_ADDR"] तत्व में क्लाइंट का IP पता होता है। स्थानीय मशीन पर परीक्षण करते समय, यह पता 127.0.0.1 होगा। हालांकि, नेटवर्क पर परीक्षण करते समय, चर क्लाइंट का आईपी पता या अंतिम प्रॉक्सी सर्वर लौटाएगा जिसके माध्यम से क्लाइंट सर्वर तक पहुंचा। यदि क्लाइंट प्रॉक्सी सर्वर का उपयोग करता है, तो आप HTTP_X_FORWARDED_FOR पर्यावरण चर का उपयोग करके उसका आईपी पता ढूंढ सकते हैं, जिसका मूल्य getenv() फ़ंक्शन का उपयोग करके प्राप्त किया जा सकता है।

टिप्पणी

प्रॉक्सी सर्वर विशेष मध्यवर्ती सर्वर हैं जो एक विशेष प्रकार की सेवा प्रदान करते हैं: यातायात संपीड़न, डेटा एन्कोडिंग, मोबाइल उपकरणों के अनुकूलन आदि। कई प्रॉक्सी सर्वरों में, तथाकथित अनाम प्रॉक्सी सर्वर हैं जो आपको क्लाइंट के सही आईपी पते को छिपाने की अनुमति देते हैं; ऐसे सर्वर HTTP_X_FORWARDED_FOR पर्यावरण चर वापस नहीं करते हैं।

HTTP_X_FORWARDED_FOR पर्यावरण चर को पुनः प्राप्त करना

इको गेटेनव (HTTP_X_FORWARDED_FOR);
?>

$_SERVER["SCRIPT_FILENAME"] तत्व

$_SERVER["SCRIPT_FILENAME"] तत्व में ड्राइव के मूल से फ़ाइल का पूर्ण पथ होता है। इसलिए, यदि सर्वर विंडोज ऑपरेटिंग सिस्टम के तहत चल रहा है, तो ऐसा पथ इस तरह दिख सकता है: "d:main estindex.php", यानी। पथ को डिस्क से निर्दिष्ट किया जाता है, यूनिक्स जैसे ऑपरेटिंग सिस्टम में पथ रूट निर्देशिका / से निर्दिष्ट किया जाता है, उदाहरण के लिए "/var/share/www/test/index.php"।

$_SERVER["SERVER_NAME"] तत्व

$_SERVER["SERVER_NAME"] तत्व में सर्वर का नाम होता है, जो आमतौर पर उस पर होस्ट की गई साइट के डोमेन नाम से मेल खाता है। उदाहरण के लिए,

Www.साइट

$_SERVER["SERVER_NAME"] तत्व की सामग्री अक्सर $_SERVER["HTTP_HOST"] तत्व की सामग्री के समान होती है। सर्वर नाम के अलावा, $_SERVER सुपरग्लोबल सरणी आपको कई सर्वर पैरामीटरों का पता लगाने की अनुमति देती है, जैसे कि सर्वर आईपी पता, सुनने वाला पोर्ट, कौन सा वेब सर्वर स्थापित है, और HTTP प्रोटोकॉल का संस्करण। यह जानकारी क्रमशः $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"] और $_SERVER["SERVER_PROTOCOL"] तत्वों में रखी गई है। नीचे इन तत्वों का उपयोग करके एक उदाहरण दिया गया है।

$_SERVER सरणी के तत्वों का उपयोग करना

गूंज "सर्वर का नाम -"। $_SERVER["SERVER_NAME"]. "
" ;
गूंज "सर्वर आईपी पता - ". $_SERVER["SERVER_ADDR"]. "
" ;
इको "सर्वर पोर्ट -"। $_SERVER["SERVER_PORT"]. "
" ;
इको "वेब सर्वर -"। $_SERVER["SERVER_SOFTWARE"]. "
" ;
गूंज "HTTP प्रोटोकॉल संस्करण -". $_SERVER["SERVER_PROTOCOL"]. "
" ;
?>

$HTTP_SERVER_VARS [हटाया गया]

(पीएचपी 4>= 4.1.0, पीएचपी 5, पीएचपी 7)

$_सर्वर -- $HTTP_SERVER_VARS [हटाया गया]सर्वर और रनटाइम जानकारी

विवरण

$_SERVER चर एक सरणी है जिसमें स्क्रिप्ट हेडर, पथ और स्थान जैसी जानकारी होती है। इस सरणी में प्रविष्टियाँ वेब सर्वर द्वारा उत्पन्न की जाती हैं। इस बात की कोई गारंटी नहीं है कि प्रत्येक वेब सर्वर इनमें से कोई भी प्रदान करेगा; सर्वर इनमें से कुछ को छोड़ सकता है या दूसरों को यहां सूचीबद्ध नहीं कर सकता है। हालांकि, इनमें से कई चर »CGI/1.1 विनिर्देश में मौजूद हैं, इसलिए आप उनसे किसी विशेष वेब सर्वर में भी लागू होने की उम्मीद कर सकते हैं।

$HTTP_SERVER_VARS वैरिएबल में समान प्रारंभिक जानकारी होती है, लेकिन यह सुपरग्लोबल नहीं है। (ध्यान दें कि $HTTP_SERVER_VARS और $_SERVER अलग-अलग चर हैं, इसलिए PHP उन्हें तदनुसार संभालती है।) यह भी ध्यान दें कि PHP 5.4.0 में "लंबी सरणियाँ" हटा दी गई थीं, इसलिए $HTTP_SERVER_VARS अब मौजूद नहीं है।

सूचकांकों

आपको $_SERVER सरणी में निम्न में से कोई भी तत्व मिल भी सकता है और नहीं भी। ध्यान दें कि यदि PHP को कमांड लाइन पर चलाया जाता है तो कुछ, यदि कोई हो, आइटम उपलब्ध होंगे (या वास्तव में महत्वपूर्ण)।

"PHP_SELF" दस्तावेज़ रूट के सापेक्ष वर्तमान में निष्पादित की जा रही स्क्रिप्ट का फ़ाइल नाम। उदाहरण के लिए, http://example.com/foo/bar.php पर एक स्क्रिप्ट में $_SERVER["PHP_SELF"] /foo/bar.php होगा। __FILE__ स्थिरांक में वर्तमान (यानी शामिल) फ़ाइल का पूरा पथ और फ़ाइल नाम होता है। यदि PHP को कमांड लाइन पर चलाया जाता है, तो इस वेरिएबल में PHP 4.3.0 के बाद से स्क्रिप्ट का नाम होता है। यह पहले अनुपलब्ध था।"आर्गव" स्क्रिप्ट को दिए गए तर्कों की एक सरणी। जब स्क्रिप्ट को कमांड लाइन पर चलाया जाता है, तो यह कमांड लाइन विकल्पों के लिए सी-लाइक एक्सेस देता है। जब GET विधि के माध्यम से कॉल किया जाता है, तो इस सरणी में क्वेरी स्ट्रिंग होगी।"आर्गसी" स्क्रिप्ट को पास किए गए मापदंडों की संख्या शामिल है (यदि कमांड लाइन पर लॉन्च किया गया है)।"GATEWAY_INTERFACE" सर्वर द्वारा उपयोग किए गए CGI विनिर्देशन का संस्करण शामिल है; उदाहरण के लिए" सीजीआई/1.1". "SERVER_ADDR" सर्वर का आईपी पता जहां वर्तमान स्क्रिप्ट चल रही है।"सर्वर का नाम" होस्ट का नाम जहां वर्तमान स्क्रिप्ट चल रही है। यदि स्क्रिप्ट वर्चुअल होस्ट पर चल रही है, तो इसमें उस वर्चुअल होस्ट के लिए परिभाषित नाम होगा।"SERVER_SOFTWARE" अनुरोध का उत्तर दिए जाने पर हेडर में निर्दिष्ट सर्वर पहचान स्ट्रिंग।"SERVER_PROTOCOL" सूचना प्रोटोकॉल का नाम और संस्करण जिसके माध्यम से पृष्ठ का अनुरोध किया गया था; उदाहरण के लिए " एचटीटीपी/1.0"; "REQUEST_METHOD" पृष्ठ का अनुरोध करने के लिए किस विधि का उपयोग किया गया था; उदाहरण के लिए " प्राप्त", "सिर", "पद", "रखना".

टिप्पणी:

PHP स्क्रिप्ट हेडर भेजने के बाद समाप्त हो जाती है (यानी, आउटपुट बफरिंग के बिना कोई आउटपुट करने के बाद), यदि अनुरोध विधि द्वारा किया गया था सिर.

" समय मांगें " अनुरोध की शुरुआत का टाइमस्टैम्प। PHP 5.1.0 के बाद से उपलब्ध है।"REQUEST_TIME_FLOAT" अनुरोध की शुरुआत का टाइमस्टैम्प, माइक्रोसेकंड के लिए सटीक। PHP 5.4.0 के बाद से उपलब्ध है।" क्वेरी स्ट्रिंग " क्वेरी स्ट्रिंग, यदि कोई हो, जिसके साथ पृष्ठ पुनर्प्राप्त किया गया था।"DOCUMENT_ROOT" दस्तावेज़ रूट निर्देशिका जहां वर्तमान स्क्रिप्ट निष्पादित की जाती है, वही सर्वर की कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट होती है।"HTTP_ACCEPT" हैडर सामग्री मानना:वर्तमान अनुरोध से, यदि कोई हो।"HTTP_ACCEPT_CHARSET" हैडर सामग्री एक्सेप्ट चारसेट:वर्तमान अनुरोध से, यदि कोई हो। उदाहरण के लिए: " आईएसओ-8859-1,*,यूटीएफ-8". "HTTP_ACCEPT_ENCODING" हैडर सामग्री एन्कोडिंग स्वीकार करें: गज़िप". "HTTP_ACCEPT_LANGUAGE" हैडर सामग्री स्वीकार-भाषा:वर्तमान अनुरोध से, यदि कोई हो। उदाहरण के लिए: " एन". "HTTP_CONNECTION" हैडर सामग्री कनेक्शन:वर्तमान अनुरोध से, यदि कोई हो। उदाहरण के लिए: " जिंदा रहो". "HTTP_HOST" हैडर सामग्री मेज़बान:वर्तमान अनुरोध से, यदि कोई हो।"HTTP_REFERER" पृष्ठ का पता (यदि कोई हो) जो उपयोगकर्ता के ब्राउज़र को इस पृष्ठ पर लाया। यह हेडर उपयोगकर्ता के वेब ब्राउज़र द्वारा निर्धारित किया जाता है। सभी ब्राउज़र इसे स्थापित नहीं करते हैं, और कुछ अतिरिक्त सुविधा के रूप में HTTP_REFERER शीर्षलेख की सामग्री को बदलने की अनुमति देते हैं। एक शब्द में, उस पर वास्तव में भरोसा नहीं किया जा सकता है।"HTTP_USER_AGENT" हैडर सामग्री उपभोक्ता अभिकर्ता:वर्तमान अनुरोध से, यदि कोई हो। इस स्ट्रिंग में उस ब्राउज़र का पदनाम होता है जिसके साथ उपयोगकर्ता ने इस पृष्ठ का अनुरोध किया था। एक विशिष्ट उदाहरण लाइन है: मोज़िला/4.5 (X11; यू; लिनक्स 2.2.9 i586). अन्य बातों के अलावा, आप इस मान का उपयोग फ़ंक्शन के साथ कर सकते हैं get_ब्राउज़र ()अपने पृष्ठ आउटपुट को उपयोगकर्ता के ब्राउज़र की क्षमताओं के अनुरूप बनाने के लिए"https" यदि HTTPS प्रोटोकॉल के माध्यम से अनुरोध किया गया था तो एक गैर-रिक्त मान लेता है।

टिप्पणी: ध्यान दें कि IIS के साथ ISAPI का उपयोग करते समय, मान होगा बंदयदि अनुरोध HTTPS प्रोटोकॉल के माध्यम से नहीं किया गया था।

"REMOTE_ADDR" वह IP पता जिससे उपयोगकर्ता वर्तमान पृष्ठ देख रहा है।"रिमोट होस्ट" दूरस्थ होस्ट जिससे उपयोगकर्ता वर्तमान पृष्ठ देख रहा है। रिवर्स DNS लुकअप REMOTE_ADDR चर के मान पर आधारित है।

टिप्पणी: इस वेरिएबल को बनाने के लिए आपके वेब सर्वर को कॉन्फ़िगर किया जाना चाहिए। उदाहरण के लिए, अपाचे में आपको निर्देश की उपस्थिति की आवश्यकता है होस्टनाम लुकअप चालूइस वेरिएबल को बनाने के लिए httpd.conf फ़ाइल में। यह सभी देखें gethostbyaddr ().

"REMOTE_PORT" रिमोट मशीन पर पोर्ट जो वेब सर्वर के साथ संचार करने के लिए उपयोग किया जाता है।"REMOTE_USER" प्रमाणित उपयोगकर्ता।"REDIRECT_REMOTE_USER" प्रमाणित उपयोगकर्ता, यदि अनुरोध आंतरिक रूप से पुनर्निर्देशित किया गया था।"SCRIPT_FILENAME"

स्क्रिप्ट का पूर्ण पथ जो वर्तमान में निष्पादित हो रहा है।

टिप्पणी:

यदि स्क्रिप्ट को संबंधित पथ जैसे file.php या ../file.php का उपयोग करके कमांड लाइन (CLI) पर चलाया जाता है, तो $_SERVER["SCRIPT_FILENAME"] चर में उपयोगकर्ता द्वारा निर्दिष्ट सापेक्ष पथ होगा।

"SERVER_ADMIN" यह चर सर्वर की कॉन्फ़िगरेशन फ़ाइल में निर्देश से अपना मान (अपाचे के लिए) प्राप्त करता है। यदि स्क्रिप्ट वर्चुअल होस्ट पर चल रही है, तो यह उस वर्चुअल होस्ट के लिए परिभाषित मान होगा।"सर्वर पोर्ट" सर्वर कंप्यूटर पर पोर्ट जिसे वेब सर्वर कनेक्ट करने के लिए उपयोग करता है। डिफ़ॉल्ट सेटिंग्स के लिए, मान होगा " 80 "; एसएलएल का उपयोग करते हुए, उदाहरण के लिए, यह मान सुरक्षित HTTP कनेक्शन के लिए कॉन्फ़िगर किया जाएगा।

टिप्पणी: Apache 2 में भौतिक (वास्तविक) पोर्ट प्राप्त करने के लिए, आपको स्थापित करने की आवश्यकता है CanonicalName = On . का उपयोग करेंतथा CanonicalPhysicalPort = On . का उपयोग करें, अन्यथा इस मान को धोखा दिया जा सकता है और भौतिक पोर्ट का वास्तविक मूल्य वापस नहीं किया जा सकता है। इस मान पर भरोसा करना उन अनुप्रयोगों के संदर्भ में असुरक्षित है जिन्हें बढ़ी हुई सुरक्षा की आवश्यकता होती है।

"SERVER_SIGNATURE" सर्वर संस्करण और वर्चुअल होस्ट नाम वाली एक स्ट्रिंग को सक्षम होने पर सर्वर-जनित पृष्ठों में जोड़ा जाना है।"PATH_TRANSLATED" फाइलसिस्टम- (दस्तावेज़ रूट नहीं-) वर्तमान स्क्रिप्ट पर आधारित पथ, सर्वर द्वारा कोई वर्चुअल-टू-रियल मैपिंग करने के बाद।

टिप्पणी: PHP 4.3.2 के अनुसार, Apache संस्करण 1 की तुलना में PATH_TRANSLATED चर अब Apache 2 SAPI में निहित रूप से सेट नहीं है, जहां इसे उसी मान पर सेट किया जाता है जैसे Apache द्वारा उपयोग नहीं किए जाने पर SCRIPT_FILENAME। यह परिवर्तन CGI विनिर्देश के अनुपालन के लिए किया गया था, जहां PATH_TRANSLATED चर केवल तभी मौजूद होना चाहिए जब PATH_INFO परिभाषित किया गया हो। Apache 2 उपयोगकर्ता निर्देश का उपयोग कर सकते हैं एक्सेप्टपाथइन्फो = ऑन httpd.conf कॉन्फ़िगरेशन फ़ाइल में PATH_INFO चर सेट करने के लिए।

"SCRIPT_NAME" वर्तमान में निष्पादित स्क्रिप्ट का पथ शामिल है। यह उन पृष्ठों के लिए उपयोगी है जिन्हें स्वयं को इंगित करने की आवश्यकता है। __FILE__ स्थिरांक में वर्तमान (यानी शामिल) फ़ाइल का पूरा पथ और नाम होता है।"REQUEST_URI" इस पृष्ठ तक पहुंचने के लिए पारित किया गया यूआरआई। उदाहरण के लिए, " /index.html". "PHP_AUTH_DIGEST" HTTP डाइजेस्ट प्रमाणीकरण करते समय, यह चर क्लाइंट द्वारा भेजे गए "प्राधिकरण" शीर्षलेख पर सेट होता है (जिसे उपयुक्त सत्यापन के लिए उपयोग किया जाना चाहिए)।"PHP_AUTH_USER" जब HTTP प्रमाणीकरण किया जाता है, तो यह चर उपयोगकर्ता द्वारा प्रदान किए गए उपयोगकर्ता नाम पर सेट होता है।"PHP_AUTH_PW" जब HTTP प्रमाणीकरण किया जाता है, तो यह चर उपयोगकर्ता द्वारा प्रदान किए गए पासवर्ड पर सेट होता है।"प्रमाणीकरण का प्रकार" जब HTTP प्रमाणीकरण किया जाता है, तो यह चर उपयोग किए जाने वाले प्रमाणीकरण के प्रकार पर सेट होता है।"PATH_INFO" स्क्रिप्ट नाम के बाद लेकिन क्वेरी स्ट्रिंग से पहले, यदि उपलब्ध हो तो उपयोगकर्ता द्वारा प्रदान किया गया कोई भी पथ शामिल है। उदाहरण के लिए, यदि URL http://www.example.com/php/path_info.php/some/stuff?foo=bar पर वर्तमान स्क्रिप्ट का अनुरोध किया गया है, तो $_SERVER["PATH_INFO"] चर में शामिल होगा /कुछ सामग्री?>

इस उदाहरण को चलाने का परिणाम कुछ इस प्रकार होगा।

जिन्होंने कमोबेश गंभीरता से अध्ययन किया पीएचपीपता है कि इसमें एक बहुत ही उपयोगी वैश्विक सरणी है पीएचपी, जिसे कहा जाता है $_सर्वर. और इस लेख में मैं इस सरणी में सबसे लोकप्रिय कुंजियों और उनके मूल्यों का विश्लेषण करना चाहूंगा, क्योंकि उनका ज्ञान एक शुरुआत के लिए भी आवश्यक है पीएचपी प्रोग्रामर.

आगे बढ़ने से पहले PHP में $_SERVER वैश्विक सरणी के लिएमैं आपको अभी थोड़ा संकेत दूंगा। इसमें निर्मित एक अद्भुत विशेषता है पीएचपी, जिसे कहा जाता है phpinfo (). आइए तुरंत इसके उपयोग का एक उदाहरण दें:

phpinfo ();
?>

इस सरल स्क्रिप्ट को क्रियान्वित करने के परिणामस्वरूप, आपको विभिन्न के साथ एक विशाल तालिका दिखाई देगी पीएचपी दुभाषिया सेटिंग्स, सहित, अंत में मूल्यों की एक तालिका होगी वैश्विक सरणी $_SERVER. यह सभी कुंजियों और उनके सभी संगत मानों को सूचीबद्ध करेगा। यह आपकी कैसे मदद कर सकता है? और तथ्य यह है कि यदि आपको इस या उस मूल्य की आवश्यकता है, और आप भूल जाते हैं कि कुंजी को क्या कहा जाता है, तो फ़ंक्शन का उपयोग करें phpinfo ()आप इसका नाम हमेशा याद रख सकते हैं। सामान्य तौर पर, आप इस स्क्रिप्ट को निष्पादित करेंगे और आप मुझे तुरंत समझ जाएंगे।

अब सबसे लोकप्रिय पर चलते हैं $_SERVER सरणी कुंजियाँ:

  • HTTP_USER_AGENT- यह कुंजी आपको क्लाइंट की विशेषताओं का पता लगाने की अनुमति देती है। ज्यादातर मामलों में, यह निश्चित रूप से ब्राउज़र है, हालांकि, हमेशा नहीं। और फिर, यदि ब्राउज़र, तो कौन सा, आप इस चर में इसके बारे में पता लगा सकते हैं।
  • HTTP_REFERER- उस फ़ाइल का पूर्ण पथ है ( पीएचपी स्क्रिप्ट, एचटीएमएल पेज) जिससे आपने इस स्क्रिप्ट पर स्विच किया है। मोटे तौर पर, ग्राहक कहाँ से आया था।
  • सर्वर_एडीडीआर - आईपी ​​पतासर्वर।
  • REMOTE_ADDR - आईपी ​​पताग्राहक।
  • DOCUMENT_ROOT- साइट की मूल निर्देशिका के लिए भौतिक पथ। यह विकल्प के माध्यम से सेट किया गया है अपाचे सर्वर कॉन्फिग फाइल.
  • SCRIPT_FILENAME- बुलाए गए स्क्रिप्ट के लिए भौतिक पथ।
  • क्वेरी स्ट्रिंग- एक बहुत ही उपयोगी मान जो आपको एक क्वेरी के साथ एक स्ट्रिंग प्राप्त करने की अनुमति देता है, और फिर आप इस स्ट्रिंग को पार्स कर सकते हैं।
  • REQUEST_URI- एक और भी अधिक उपयोगी मूल्य जिसमें न केवल अनुरोध ही शामिल है, बल्कि इसके साथ रूट से बुलाए गए स्क्रिप्ट के सापेक्ष पथ भी शामिल है। यह बहुत बार से दोहराव को दूर करने के लिए प्रयोग किया जाता है index.php, यानी, जब हमारे पास ऐसा यूआरएल: "http://mysite.ru/index.php" तथा " http://mysite.ru/"एक पृष्ठ पर ले जाएं, और यूआरएलअलग, इसलिए, दोहराव, जिसका खोज इंजन अनुकूलन पर बुरा प्रभाव पड़ेगा। और यहाँ मदद के साथ REQUEST_URIहम परिभाषित कर सकते हैं: index.phpया नहीं स्क्रिप्ट बुलाया गया था। और हम के साथ पुनर्निर्देशित कर सकते हैं index.php(यदि वह उपस्थित था REQUEST_URI) बिना index.php. परिणामस्वरूप, ऐसा अनुरोध भेजते समय: " http://mysite.ru/index.php?id=5", हमारे पास एक रीडायरेक्ट होगा यूआरएल: "http://mysite.ru/?id=5यानि हमने से हटाकर दोहराव से छुटकारा पाया यूआरएलयह index.php.
  • स्क्रिप्ट- बुलाए गए स्क्रिप्ट के सापेक्ष पथ।

शायद ये सभी तत्व हैं PHP में $_SERVER वैश्विक सरणीजिनका नियमित उपयोग किया जाता है। जरूरत पड़ने पर उन्हें जानने और उपयोग करने में सक्षम होने की आवश्यकता है।

सबसे पहले, हम अवतार अपलोड करने की क्षमता जोड़कर पंजीकरण पृष्ठ में सुधार करेंगे। स्रोत छवि jpg, gif या png प्रारूप में होनी चाहिए। यह भी 2 एमबी से अधिक नहीं होना चाहिए। चिंता न करें, इसे स्क्रिप्ट से कंप्रेस करने के बाद अवतार का आकार लगभग 3 kb होगा और प्रारूप jpg होगा। पेज खोलें regपीएचपीऔर टैग में जोड़ें < प्रपत्र> रेखा enctype = "मल्टीपार्ट/फॉर्म डेटा", उदाहरण के अनुसार:


पंजीकरण










अब बचाओ reg.php

2. फिर आपको टेबल में एक और फील्ड बनाने की जरूरत है उपयोगकर्ताओं. हम जाते हैं phpmyadmin, वांछित डेटाबेस और तालिका का चयन करें।


हम सभी मान सेट करते हैं, जैसा कि चित्र में दिखाया गया है:

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

3. फाइल पर जाएं सहेजें_ उपयोगकर्ता. पीएचपीऔर लॉगिन और पासवर्ड से रिक्त स्थान हटाने के बाद निम्नलिखित कोड जोड़ें:

// अतिरिक्त रिक्त स्थान हटाएं
$ लॉगिन = ट्रिम ($ लॉगिन);

// नया जोड़ो ********************************************** ***

// लॉगिन और पासवर्ड की लंबाई के लिए एक चेक जोड़ें
अगर (strlen($लॉगिन)< 3 or strlen($login) > 15) {
बाहर निकलें ("लॉगिन कम से कम 3 वर्ण और 15 से अधिक नहीं होना चाहिए।");
}
अगर (स्ट्रेल ($ पासवर्ड)< 3 or strlen($password) > 15) {
बाहर निकलें ("पासवर्ड कम से कम 3 अक्षर और अधिकतम 15" होना चाहिए);
}

अगर (!खाली($_POST["fupload"])) // जांचें कि क्या उपयोगकर्ता ने कोई छवि सबमिट की है
{
$fupload=$_POST["fupload"]; $ fupload = ट्रिम ($ fupload);
अगर ($fupload =="" या खाली($fupload)) (
अनसेट ($ fupload); // यदि $ fupload चर खाली है, तो इसे हटा दें
}
}
अगर (!isset($fupload) या खाली($fupload) या $fupload =="")
{
// यदि चर मौजूद नहीं है (उपयोगकर्ता ने एक छवि नहीं भेजी), तो इसे "कोई अवतार नहीं" शिलालेख के साथ एक पूर्व-तैयार छवि असाइन करें
$अवतार = "अवतार/नेट-अवतार.jpg"; // आप net-avatara.jpg ड्रा कर सकते हैं या इसे स्रोत से ले सकते हैं
}
वरना
{
// अन्यथा - उपयोगकर्ता की छवि लोड करें
$path_to_90_directory = "अवतार/";//फ़ोल्डर जहां प्रारंभिक छवि और उसकी संपीड़ित प्रतिलिपि लोड की जाएगी

अगर(preg_match("/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/",$_FILES["fupload"]["name"])) // मूल छवि प्रारूप की जाँच करें
{
$filename = $_FILES["fupload"]["name"];
$source = $_FILES["fupload"]["tmp_name"];
$ लक्ष्य = $path_to_90_directory। $फ़ाइलनाम;
move_uploaded_file($source, $target);//मूल को $path_to_90_directory पर अपलोड करें
अगर(preg_match("/[.](GIF)|(gif)$/", $filename)) (
$im = imagecreatefromgif($path_to_90_directory.$filename); // यदि मूल जीआईएफ प्रारूप में था, तो हम उसी प्रारूप में एक छवि बनाते हैं। बाद के संपीड़न के लिए आवश्यक
}
अगर(preg_match("/[.](PNG)|(png)$/", $filename)) (
$im = imagecreatefrompng($path_to_90_directory.$filename) ;//यदि मूल पीएनजी प्रारूप में था, तो उसी प्रारूप में एक छवि बनाएं। बाद के संपीड़न के लिए आवश्यक
}

अगर(preg_match("/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/", $filename)) (
$im = imagecreatefromjpeg($path_to_90_directory.$filename); // यदि मूल jpg प्रारूप में था, तो उसी प्रारूप में एक छवि बनाएं। बाद के संपीड़न के लिए आवश्यक
}
// एक चौकोर छवि का निर्माण और उसके बाद का संपीड़न साइट www.codenet.ru से लिया गया है
// एक 90x90 वर्ग बनाएं
// गंतव्य - परिणामी छवि
// डब्ल्यू - छवि चौड़ाई
// अनुपात - आनुपातिकता का गुणांक
$ डब्ल्यू = 90; // वर्ग 90x90। आप अन्य आकारों की आपूर्ति भी कर सकते हैं।
// के आधार पर सोर्स इमेज बनाएं
// स्रोत फ़ाइल और उसका आकार निर्धारित करें
$w_src = imagesx($im); // चौड़ाई की गणना करें
$h_src = इमेजी ($ आईएम); // छवि की ऊंचाई की गणना करें
// एक खाली चौकोर छवि बनाएं
// ट्रूकलर महत्वपूर्ण है!, अन्यथा हमारे पास 8-बिट परिणाम होगा
$dest = imagecreatetruecolor($w,$w);
// अगर फोटो क्षैतिज है तो वर्ग केंद्र को x से काटें
अगर ($w_src>$h_src)
imagecopyresampled($dest, $im, 0, 0,
राउंड ((अधिकतम($w_src,$h_src)-min($w_src,$h_src))/2),
0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
// वर्ग शीर्ष को y में काटें,
// अगर फोटो वर्टिकल है (हालाँकि आपके पास बीच में भी हो सकता है)
अगर ($w_src<$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
मिनट($w_src,$h_src), मिनट($w_src,$h_src));
// चौकोर छवि बिना कटआउट के मापी जाती है
अगर ($w_src==$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
$ तिथि = समय (); // वर्तमान समय में समय की गणना करें।
imagejpeg($dest, $path_to_90_directory.$date.".jpg");//jpg इमेज को वांछित फोल्डर में सेव करें, नाम वर्तमान समय होगा। सुनिश्चित करें कि अवतारों का एक ही नाम नहीं है।
// क्यों जेपीजी? यह बहुत कम जगह लेता है + छवि के एनिमेटेड gif को नष्ट कर देता है जो उपयोगकर्ता को विचलित करता है। जब आप अपनी आंख के कोने से कुछ हलचल देखते हैं तो उनकी टिप्पणी पढ़ना बहुत सुखद नहीं होता है।
$avatar = $path_to_90_directory.$date.".jpg";//वेरिएबल में अवतार के लिए पथ डालें।
$delfull = $path_to_90_directory.$filename;
अनलिंक ($delfull);//मूल अपलोड की गई छवि को हटा दें, हमें अब इसकी आवश्यकता नहीं है। कार्य एक लघु प्राप्त करना था।
}
वरना
{
// प्रारूप बेमेल के मामले में, उचित संदेश जारी करें
बाहर निकलें ("अवतार प्रारूप में होना चाहिए जेपीजी, जीआईएफ या पीएनजी");
}
// लोडिंग प्रक्रिया का अंत और लोड किए गए एवा के पते को $avatar चर में निर्दिष्ट करना
}



// एक नया जोड़ा गया ********************************************** ****
// लेख के पहले भाग से सब कुछ इस प्रकार है, लेकिन डेटाबेस क्वेरी में परिवर्तन जोड़ना आवश्यक है।
// डेटाबेस से कनेक्ट करें
// समान लॉगिन वाले उपयोगकर्ता के अस्तित्व की जाँच करें
$ परिणाम = mysql_query ("उपयोगकर्ताओं से आईडी चुनें जहां लॉगिन = "$ लॉगिन"", $ डीबी);
अगर (!खाली($myrow["id"])) (
बाहर निकलें ("क्षमा करें, आपके द्वारा दर्ज किया गया उपयोगकर्ता नाम पहले से ही पंजीकृत है। कृपया कोई अन्य उपयोगकर्ता नाम दर्ज करें।");
}
// यदि कोई नहीं है, तो डेटा सहेजें
$result2 = mysql_query ("उपयोगकर्ताओं में प्रवेश करें (लॉगिन, पासवर्ड, अवतार) मान ("$ लॉगिन", "$ पासवर्ड", "$ अवतार")");
// जांचें कि क्या त्रुटियां हैं
अगर ($result2=="TRUE")
{
इको "आपने सफलतापूर्वक पंजीकरण कर लिया है! अब आप साइट में प्रवेश कर सकते हैं। मुख्य पृष्ठ";
}
वरना(
इको "त्रुटि! आप लॉग इन नहीं हैं";
}
?>

4. आपको एक ही डेटाबेस में एक टेबल जोड़ने की जरूरत है। यह उन आईपी-एड्रेस को स्टोर करेगा जिनमें लॉग इन करते समय त्रुटि हुई थी। इस तरह, हम उन लोगों तक पहुंच को प्रतिबंधित कर सकते हैं जिन्होंने लगभग 15 मिनट तक लगातार तीन बार गलती की है। मुझे लगता है कि पासवर्ड का अनुमान लगाने वाले प्रोग्रामों को लंबे समय तक गड़बड़ करना होगा।
आइए phpmyadmin पर जाएं और 3 फ़ील्ड के साथ एक नई तालिका बनाएं:


आईपी ​​- आईपी पता।
दिनांक - दिए गए आईपी वाले उपयोगकर्ता के लिए अंतिम 15 मिनट के असफल लॉगिन की तिथि। col - दिए गए आईपी वाले उपयोगकर्ता के लिए पिछले 15 मिनट में त्रुटियों की संख्या।
उत्कृष्ट! हो गया, अब लॉगिन और पासवर्ड सत्यापन फ़ाइल को बदलते हैं, क्योंकि अब हमारा पासवर्ड एन्क्रिप्ट किया गया है। Testreg.php खोलें और लॉगिन और पासवर्ड से रिक्त स्थान हटाने के अलावा सब कुछ हटा दें। अगला, निम्नलिखित कोड जोड़ें:

// अतिरिक्त रिक्त स्थान हटाएं
$ लॉगिन = ट्रिम ($ लॉगिन);
$ पासवर्ड = ट्रिम ($ पासवर्ड);

// नए के साथ बदलें ******************************** ***
// डेटाबेस से कनेक्ट करें
शामिल करें ("bd.php");// bd.php फ़ाइल सभी के समान फ़ोल्डर में होनी चाहिए, यदि ऐसा नहीं है तो बस पथ बदलें
// पासवर्ड अनुमान लगाने के लिए मिनीचेक
$ip=getenv("HTTP_X_FORWARDED_FOR");
अगर (खाली($आईपी) || $ip=="अज्ञात") ($ip=getenv("REMOTE_ADDR"); )//आईपी पुनर्प्राप्त करें
mysql_query ("त्रुटि से हटाएं जहां UNIX_TIMESTAMP() - UNIX_TIMESTAMP (दिनांक)> 900"); // उन उपयोगकर्ताओं के आईपी पते हटाएं जिन्होंने 15 मिनट के बाद लॉग इन करते समय गलती की थी।
$result = mysql_query ("ओशिबका से चयन करें जहां आईपी = "$ आईपी"", $ डीबी); // डेटाबेस से दिए गए आईपी वाले उपयोगकर्ता के लिए पिछले 15 में असफल लॉगिन प्रयासों की संख्या पुनर्प्राप्त करें
$ myrow = mysql_fetch_array ($ परिणाम);
अगर ($myrow["col"] > 2) (
// यदि दो से अधिक त्रुटियां हैं, अर्थात तीन, तो हम एक संदेश जारी करते हैं।
बाहर निकलें ("आपने अपना उपयोगकर्ता नाम या पासवर्ड 3 बार गलत दर्ज किया है। कृपया फिर से प्रयास करने से पहले 15 मिनट प्रतीक्षा करें।");
}
$पासवर्ड = एमडी5($पासवर्ड);//पासवर्ड एन्क्रिप्ट करें
$password = strrev($password);//विश्वसनीयता के लिए, एक रिवर्स जोड़ें
$पासवर्ड = $पासवर्ड।"b3p6f";
// आप अपने कुछ पात्रों को स्वाद के लिए जोड़ सकते हैं, उदाहरण के लिए, "b3p6f" दर्ज करके। यदि यह पासवर्ड उसी md5 के सर्वर पर क्रूर बल द्वारा हैक किया गया है, तो स्पष्ट रूप से इससे कुछ भी अच्छा नहीं होगा। लेकिन मैं आपको अन्य पात्रों को रखने की सलाह देता हूं, आप पंक्ति की शुरुआत में या बीच में कर सकते हैं।
// इस मामले में, डेटाबेस में पासवर्ड फ़ील्ड की लंबाई बढ़ाना आवश्यक है। एन्क्रिप्टेड पासवर्ड बहुत बड़ा हो सकता है।

$ परिणाम = mysql_query ("चयन करें * उन उपयोगकर्ताओं से जहां लॉगिन = "$ लॉगिन" और पासवर्ड = "$ पासवर्ड"", $ डीबी); // दर्ज किए गए लॉगिन और पासवर्ड के साथ डेटाबेस से उपयोगकर्ता के बारे में सभी डेटा पुनर्प्राप्त करें
$ myrow = mysql_fetch_array ($ परिणाम);
अगर (खाली ($ myrow ["id"]))
{
// यदि दर्ज किए गए लॉगिन और पासवर्ड वाला उपयोगकर्ता मौजूद नहीं है
// एक रिकॉर्ड बनाएं कि दिया गया आईपी लॉगिन नहीं कर सका।
$ चयन = mysql_query ("त्रुटि से आईपी चुनें जहां आईपी = "$ आईपी"");
$tmp = mysql_fetch_row($select);
अगर ($ip == $tmp) (// जांचें कि क्या "ओशिबका" तालिका में कोई उपयोगकर्ता है
$result52 = mysql_query("त्रुटि से चयन करें जहां ip="$ip"",$db);
$myrow52 = mysql_fetch_array($result52);
$col = $myrow52 + 1;//एक और असफल लॉगिन प्रयास जोड़ें
mysql_query ("अपडेट त्रुटि सेट कॉल = $ कॉल, दिनांक = अब () जहां आईपी = "$ आईपी"");
}
वरना(
mysql_query ("त्रुटि में प्रवेश करें (आईपी, दिनांक, कॉल) मान ("$ आईपी", अब (), "1")");
// यदि पिछले 15 मिनट में कोई त्रुटि नहीं थी, तो "ओशिबका" तालिका में एक नई प्रविष्टि डालें
}

बाहर निकलें ("क्षमा करें, आपके द्वारा दर्ज किया गया उपयोगकर्ता नाम या पासवर्ड गलत है।");
}
वरना(
एनबीएसपी; // यदि पासवर्ड मेल खाते हैं, तो हम उपयोगकर्ता के लिए सत्र शुरू करते हैं! आप उसे बधाई दे सकते हैं, उसने प्रवेश किया!
$_SESSION["पासवर्ड"]=$myrow["password"];
$_SESSION["लॉगिन"]=$myrow["लॉगिन"];
$_SESSION["id"]=$myrow["id"];//यह डेटा बहुत बार उपयोग किया जाता है, इसलिए लॉग इन उपयोगकर्ता उन्हें "ले" जाएगा

// अगला, हम बाद में लॉगिन के लिए डेटा को कुकीज़ में संग्रहीत करते हैं।
//ध्यान!!! इसे अपने विवेक से करें क्योंकि डेटा बिना एन्क्रिप्शन के कुकीज में संग्रहीत होता है
अगर ($_POST["सहेजें"] == 1) (
// यदि उपयोगकर्ता चाहता है कि उसका डेटा बाद में लॉगिन के लिए सहेजा जाए, तो हम उसे उसके ब्राउज़र की कुकीज़ में सहेजते हैं
सेटकुकी ("लॉगिन", $ _POST ["लॉगिन"], समय () + 9999999);
सेटकुकी ("पासवर्ड", $ _POST ["पासवर्ड"], समय () + 9999999);
}}
गूंज " ";//उपयोगकर्ता को मुख्य पृष्ठ पर पुनर्निर्देशित करें, जहां उसे एक सफल लॉगिन के बारे में सूचित किया जाएगा
?>

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

// पूरी प्रक्रिया सत्रों पर काम करती है। यह इसमें है कि उपयोगकर्ता के डेटा को साइट पर रहने के दौरान संग्रहीत किया जाता है। पेज की शुरुआत में ही उन्हें लॉन्च करना बहुत जरूरी है!!!
सेशन_स्टार्ट ();
शामिल करें ("bd.php");// bd.php फ़ाइल सभी के समान फ़ोल्डर में होनी चाहिए, यदि ऐसा नहीं है तो बस पथ बदलें
अगर (!खाली($_SESSION["लॉगिन"]) और !खाली($_SESSION["password"]))
{
// यदि सत्र में लॉगिन और पासवर्ड है, तो उन्हें जांचें और अवतार निकालें
$ लॉगिन = $ _ सत्र ["लॉगिन"];
$ पासवर्ड = $ _ सत्र ["पासवर्ड"];
$ परिणाम = mysql_query ("आईडी चुनें, उन उपयोगकर्ताओं से अवतार जहां लॉगिन = "$ लॉगिन" और पासवर्ड = "$ पासवर्ड"", $ डीबी);
$ myrow = mysql_fetch_array ($ परिणाम);
// आवश्यक उपयोगकर्ता डेटा प्राप्त करें
}
?>


मुख्य पृष्ठ


मुख्य पृष्ठ

अगर (!isset($myrow["avatar"]) या $myrow["avatar"]=="") (
// जांचें कि क्या उपयोगकर्ता का डेटा डेटाबेस से पुनर्प्राप्त किया गया है। यदि नहीं, तो वह लॉग इन नहीं है, या सत्र में पासवर्ड गलत है। लॉगिन विंडो प्रदर्शित करें। लेकिन हम इसे उन लोगों के लिए प्रदर्शित नहीं करेंगे जिन्होंने प्रवेश किया, उन्हें अब इसकी आवश्यकता नहीं है।
प्रिंट<<


यहां;

अगर (isset($_COOKIE["login"])) // क्या COOKIE में लॉगिन के साथ एक वेरिएबल है। होना चाहिए यदि उपयोगकर्ता ने पिछले लॉगिन के दौरान "मुझे याद रखें" चेकबॉक्स पर क्लिक किया था
{
// यदि हाँ, तो उसका मान फॉर्म में डालें। इस मामले में, उपयोगकर्ता को दिखाया जाता है कि उसका लॉगिन पहले से ही आवश्यक कॉलम में दर्ज है
गूंज "मान =" "। $ _ कुकी ["लॉगिन"]।" ">";
}

प्रिंट<<




यहां;

अगर (isset($_COOKIE["password"]))//क्या कुकी में कोई पासवर्ड वेरिएबल है। होना चाहिए यदि उपयोगकर्ता ने पिछले लॉगिन के दौरान "मुझे याद रखें" चेकबॉक्स पर क्लिक किया था
{
// यदि हाँ, तो उसका मान फॉर्म में डालें। इस मामले में, उपयोगकर्ता को दिखाया जाता है कि उसका पासवर्ड पहले से ही आवश्यक कॉलम में दर्ज है।
गूंज "मूल्य =" "। $ _ कुकी ["पासवर्ड"]।" ">";
}

प्रिंट<<



मुझे याद करने के लिए।






पंजीकरण करवाना



आप एक गेस्ट के रूप में लॉग्ड इन हैं

यहां;
}
वरना
{
// सफल लॉगिन पर, उपयोगकर्ता को वह सब कुछ दिया जाता है जो नीचे तारक के बीच स्थित होता है।

प्रिंट<<
आप $_SESSION (लॉगआउट) के रूप में लॉग इन हैं


यह लिंक केवल पंजीकृत उपयोगकर्ताओं के लिए उपलब्ध है

आपका अवतार:




यहां;

//************************************************************************************
// सफल लॉगिन पर, उपयोगकर्ता को वह सब कुछ दिया जाता है जो तारांकन के बीच में स्थित होता है।
}
?>



6. लॉग इन करने वाले उपयोगकर्ताओं के लिए लॉग आउट करना संभव बनाना आवश्यक है। मुख्य पृष्ठ पर बाहर निकलने के लिए पहले से ही एक लिंक था। लेकिन यह फ़ाइल अभी तक मौजूद नहीं है। तो चलिए एक नई फाइल बनाते हैं बाहर निकलें.phpकोड के साथ:

सत्र_स्टार्ट ();
अगर (खाली($_SESSION["login"]) या खाली($_SESSION["password"]))
{
// यदि लॉगिन और पासवर्ड के साथ कोई सत्र नहीं है, तो यह फ़ाइल एक अनलॉग उपयोगकर्ता द्वारा एक्सेस की जाती है। वह यहां का नहीं है। त्रुटि संदेश जारी करें, स्क्रिप्ट रोकें
बाहर निकलें ("इस पृष्ठ तक पहुंच केवल पंजीकृत उपयोगकर्ताओं को ही दी जाती है। यदि आप पंजीकृत हैं, तो अपने उपयोगकर्ता नाम और पासवर्ड का उपयोग करके साइट दर्ज करें
मुख्य पृष्ठ");
}

अनसेट ($ _ सत्र ["पासवर्ड"]);
अनसेट ($ _ सत्र ["लॉगिन"]);
unset($_SESSION["id"]);//सत्रों में चर नष्ट करें
बाहर निकलना(" ");
// उपयोगकर्ता को मुख्य पृष्ठ पर भेजें।
?>

ठीक है अब सब खत्म हो गया है! स्वास्थ्य पर प्रयोग करें! आपको कामयाबी मिले!

जावास्क्रिप्ट आपके ब्राउज़र में अवरुद्ध है। कृपया इस साइट के लिए जावास्क्रिप्ट को काम करने दें!

सुपरग्लोबल सरणी $_SERVER

सरणी के लिए $_सर्वर PHP दुभाषिया सर्वर से प्राप्त चर डालता है। इन चरों के बिना, वेब अनुप्रयोगों के लिए पूर्ण समर्थन को व्यवस्थित करना कठिन है। निम्नलिखित सुपरग्लोबल सरणी के सबसे महत्वपूर्ण तत्वों का विवरण है $_सर्वर.

टिप्पणी

  • $_SERVER सरणी में तत्वों की पूरी सूची देखें
  • आप या तो print_r() फ़ंक्शन का उपयोग कर सकते हैं, जो एक सरणी डंप प्रिंट करता है, या phpinfo() फ़ंक्शन का उपयोग करता है, जो PHP दुभाषिया के बारे में जानकारी प्रदर्शित करता है।

    ऐरे (=> ऑन => 200 => ऑन => htmlweb.ru => https => 443 => बंद => मोज़िला/5.0 (संगत; Googlebot/2.1; +http://www.google.com/bot. html) => */* => beget=begetok; => gzip, deflate => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin = > => अपाचे/2.4.25 (डेबियन) mpm-itk/2.4.7-04 ओपनएसएसएल/1.0.2l => htmlweb.ru => 185.12.92.137 => 80 => 144.76.78.4 => /var/www/ htmlweb/data/www/htmlweb.ru => http => => /var/www/htmlweb/data/www/htmlweb.ru => [ईमेल संरक्षित]=>.php => 35242 => /php/function/$_server.php => CGI/1.1 => HTTP/1.0 => GET => => /php/function/%24_server.php => /index.php => /index.php => 1560059525.711 => 1560059525 1

    $_सर्वर[" DOCUMENT_ROOT"]

    $_SERVER["DOCUMENT_ROOT"] तत्व में सर्वर की रूट निर्देशिका का पथ होता है; यदि स्क्रिप्ट को वर्चुअल होस्ट में निष्पादित किया जाता है, तो यह तत्व वर्चुअल होस्ट की रूट निर्देशिका का पथ निर्दिष्ट करता है। वे। httpd.conf कॉन्फ़िगरेशन फ़ाइल में, वर्चुअल होस्ट के पास "D:/main" पर DocumentRoot निर्देश सेट है, $_SERVER["DOCUMENT_ROOT"] तत्व में "D:main" मान होगा।

    $_सर्वर[" REMOTE_ADDR"]

    $_SERVER["REMOTE_ADDR"] तत्व में क्लाइंट का IP पता होता है। स्थानीय मशीन पर परीक्षण करते समय, यह पता 127.0.0.1 होगा। हालांकि, नेटवर्क पर परीक्षण करते समय, चर क्लाइंट का आईपी पता या अंतिम प्रॉक्सी सर्वर लौटाएगा जिसके माध्यम से क्लाइंट सर्वर तक पहुंचा। यदि क्लाइंट प्रॉक्सी सर्वर का उपयोग करता है, तो आप HTTP_X_FORWARDED_FOR पर्यावरण चर का उपयोग करके उसका आईपी पता ढूंढ सकते हैं, जिसका मूल्य getenv() फ़ंक्शन का उपयोग करके प्राप्त किया जा सकता है।

    टिप्पणी

    प्रॉक्सी सर्वर विशेष मध्यवर्ती सर्वर हैं जो एक विशेष प्रकार की सेवा प्रदान करते हैं: यातायात संपीड़न, डेटा एन्कोडिंग, मोबाइल उपकरणों के अनुकूलन आदि। कई प्रॉक्सी सर्वरों में, तथाकथित अनाम प्रॉक्सी सर्वर हैं जो आपको क्लाइंट के सही आईपी पते को छिपाने की अनुमति देते हैं; ऐसे सर्वर HTTP_X_FORWARDED_FOR पर्यावरण चर वापस नहीं करते हैं।

    एक पर्यावरण चर प्राप्त करना HTTP_X_FORWARDED_FOR

    इको @getenv (HTTP_X_FORWARDED_FOR);

    $_सर्वर[" SCRIPT_FILENAME"]

    $_SERVER["SCRIPT_FILENAME"] तत्व में ड्राइव के मूल से फ़ाइल का पूर्ण पथ होता है। इसलिए, यदि सर्वर विंडोज ऑपरेटिंग सिस्टम के तहत चल रहा है, तो ऐसा पथ इस तरह दिख सकता है: "d:main estindex.php", यानी। पथ को डिस्क से निर्दिष्ट किया जाता है, यूनिक्स जैसे ऑपरेटिंग सिस्टम में पथ रूट निर्देशिका / से निर्दिष्ट किया जाता है, उदाहरण के लिए "/var/share/www/test/index.php"।

    /var/www/htmlवेब/डेटा/www/site/index.php

    $_सर्वर[" सर्वर का नाम"]

    $_SERVER["SERVER_NAME"] तत्व में सर्वर का नाम होता है, जो आमतौर पर उस पर होस्ट की गई साइट के डोमेन नाम से मेल खाता है। उदाहरण के लिए,

    $_SERVER["SERVER_NAME"] तत्व की सामग्री अक्सर $_SERVER["HTTP_HOST"] तत्व की सामग्री के समान होती है। सर्वर नाम के अलावा, $_SERVER सुपरग्लोबल सरणी आपको कई सर्वर पैरामीटरों का पता लगाने की अनुमति देती है, जैसे कि सर्वर आईपी पता, सुनने वाला पोर्ट, कौन सा वेब सर्वर स्थापित है, और HTTP प्रोटोकॉल का संस्करण। यह जानकारी क्रमशः $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"] और $_SERVER["SERVER_PROTOCOL"] तत्वों में रखी गई है। नीचे इन तत्वों का उपयोग करके एक उदाहरण दिया गया है।

    $_SERVER सरणी के तत्वों का उपयोग करना

    इको "सर्वर का नाम ".$_SERVER["SERVER_NAME"] है।"
    "; गूंज "सर्वर आईपी पता है ".$_SERVER["SERVER_ADDR"]।"
    "; गूंज "सर्वर पोर्ट है ".$_SERVER["SERVER_PORT"]।"
    "; गूंज "वेब सर्वर - "। $ _ सर्वर ["SERVER_SOFTWARE"]।"
    "; गूंज "HTTP प्रोटोकॉल संस्करण ".$_SERVER["SERVER_PROTOCOL"] है।"
    ";

    सर्वर का नाम - साइट
    सर्वर आईपी पता - 185.12.92.137
    सर्वर पोर्ट - 80
    वेब सर्वर - अपाचे/2.4.25 (डेबियन) mpm-itk/2.4.7-04 ओपनएसएसएल/1.0.2l
    HTTP प्रोटोकॉल संस्करण - HTTP / 1.0

    $_सर्वर[" REQUEST_METHOD"]

    $_SERVER["REQUEST_METHOD"] तत्व में अनुरोध विधि है जिसका उपयोग स्क्रिप्ट को कॉल करने के लिए किया जाता है: GET या POST।

    गूंज $ _ सर्वर ["REQUEST_METHOD"];

    $_सर्वर[" क्वेरी स्ट्रिंग"]

    यदि क्वेरी स्ट्रिंग एक पता है तो $_SERVER["QUERY_STRING"] तत्व में स्क्रिप्ट को दिए गए पैरामीटर शामिल हैं

    उदाहरण के लिए, जब जिक्र करते हैं:
    $_SERVER["QUERY_STRING"] तत्व में "?" चिह्न के बाद सभी पाठ होंगे:

    गूंज $ _ सर्वर ["QUERY_STRING"];

    id=1&test=wet&id_theme=512

    $_सर्वर[" PHP_SELF"]

    $_SERVER["PHP_SELF"] तत्व में स्क्रिप्ट का नाम होता है, जो वर्चुअल होस्ट की मूल निर्देशिका से शुरू होता है, अर्थात। यदि क्वेरी स्ट्रिंग एक पता है http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 तो $_SERVER["PHP_SELF"] तत्व में टुकड़ा होगा "/ परीक्षण/index.php". एक नियम के रूप में, वही टुकड़ा $_SERVER["SCRIPT_NAME"] तत्व में रखा गया है।

    $_सर्वर[" REQUEST_URI"]

    $_SERVER["REQUEST_URI"] तत्व में स्क्रिप्ट का नाम होता है, जो वर्चुअल होस्ट की मूल निर्देशिका से शुरू होता है, और पैरामीटर, यानी। यदि क्वेरी स्ट्रिंग एक पता है: http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 तो $_SERVER["REQUEST_URI"] तत्व में टुकड़ा होगा "/test/index.php?id=1&test=wet&id_theme=512". स्क्रिप्ट में पूरा पता बहाल करने के लिए, जिसे क्वेरी स्ट्रिंग में रखा गया है, यह नीचे प्रस्तुत $_SERVER सरणी के तत्वों के संयोजन का उपयोग करने के लिए पर्याप्त है

    स्क्रिप्ट का पूरा यूआरएल

    इको "http://"।$_SERVER["SERVER_NAME"]।$_SERVER["REQUEST_URI"];

    संबंधित आलेख: