2013-02-06 12 views
6

शुरू करने से पहले, मैं यह इंगित करना चाहता हूं कि मैंने स्टैक ओवरफ़्लो ब्राउज़ किया है और अन्य समान प्रश्न - PHP_AUTH_USER not set? और HTTP Auth via PHP - PHP_AUTH_USER not set? - और इन्हें इंगित किया है कि प्रमाणीकरण $ _SERVER चर सेट नहीं किया जाएगा यदि सर्वर एपीआई '' 'CGI/FCGI' पर सेट है, लेकिन मैंने अपने '' phpinfo() '' आउटपुट की जांच की और मेरा 'सर्वर एपीआई' '' अपाचे 2.0 हैंडलर '' पर सेट है।

ठीक है तो मैं एक सरल स्क्रिप्ट है इस प्रकार है:

<?php 
    echo "Username: " . $_SERVER["PHP_AUTH_USER"] . ", Password: " . $_SERVER["PHP_AUTH_PW"]; 
?> 

... मैं निम्नलिखित के माध्यम से दूर से बुला जो कर रहा हूँ:

wget -v --http-user=johnsmith --http-password=mypassword http://www.example.com/myscript.php 

... लेकिन केवल आउटपुट जो:

Username: , Password: 

मैंने PHP कर्ल का उपयोग करके स्क्रिप्ट को कॉल करने और प्रमाणीकरण पैरामीटर को उचित रूप से सेट करने का भी प्रयास किया है निम्नानुसार है:

curl_setopt($ch, CURLOPT_USERPWD, "johnsmith:mypassword"); 

... लेकिन मुझे उपरोक्त के समान उत्पादन मिलता है।

कोई विचार क्या मैं गलत कर रहा हूं? शायद कुछ और है जो मुझे सक्षम/कॉन्फ़िगर करने की आवश्यकता है?

+0

क्या आप सही प्रतिक्रिया कोड भेज रहे हैं? –

+0

धन्यवाद Iganacio, क्या आप कृपया इसका मतलब बता सकते हैं? –

उत्तर

5

मैं अंत में irc.freenode.net पर ## php में Naktibalda की मदद के लिए उत्तर धन्यवाद की खोज की है

निम्नलिखित पृष्ठ मुद्दा सार रखते हैं: http://php.net/manual/en/features.http-auth.php

प्रासंगिक बिट के शब्दों में:

पीएचपी 4.3.0 के रूप में, आदेश में एक स्क्रिप्ट जो एक पेज है कि एक पारंपरिक बाहरी तंत्र के माध्यम से प्रमाणीकृत किया गया के लिए पासवर्ड का पता चलता है लेखन से किसी को रोकने के लिए, PHP_AUTH चर अगर बाहरी प्रमाणीकरण सक्षम है सेट नहीं होंगे वें के लिए विशेष पृष्ठ पर और सुरक्षित मोड सक्षम है। भले ही, REMOTE_USER का उपयोग बाह्य-प्रमाणीकृत उपयोगकर्ता की पहचान के लिए किया जा सकता है। तो, आप $ _SERVER ['REMOTE_USER'] का उपयोग कर सकते हैं।

...

पीएचपी निर्धारित करने के लिए बाहरी प्रमाणीकरण प्रभाव में है एक AuthType निर्देश की उपस्थिति का उपयोग करता है।

10

पीएचपी-सीजीआई के लिए:

.htaccess में जोड़ें:

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] 
</IfModule> 

और अपनी स्क्रिप्ट की शुरुआत में जोड़ने के इस:

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6))); 
-4

यह इस तरह होना चाहिए

echo "Username: " . $_SERVER[PHP_AUTH_USER] . ", Password: " . $_SERVER[PHP_AUTH_PW]; 
+4

आप गलत हैं। http://www.php.net/manual/hi/reserved.variables.server.php आपको किसी इंडेक्स के लिए तारों का उपयोग करना होगा, इसलिए यह होना चाहिए: '$ _SERVER ['PHP_AUTH_USER']' आदि –

संबंधित मुद्दे