2013-02-06 19 views
6

Prima di iniziare, vorrei sottolineare che ho sfogliato Stack Overflow e ho trovato altre domande simili - PHP_AUTH_USER not set? e HTTP Auth via PHP - PHP_AUTH_USER not set? - e questi hanno sottolineato che le variabili $ _SERVER di autenticazione non verranno impostate se '' Server L'API '' è impostata su '' CGI/FCGI '', ma ho controllato il mio output '' phpinfo() '' e la mia '' Server API '' è impostata su '' Apache 2.0 Handler ''.

Ok, quindi ho un semplice script come segue:

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

... che sto chiamando da remoto tramite il seguente:

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

... ma che emette solo:

Ho anche provato a chiamare lo script utilizzando PHP cURL e impostare i parametri di autenticazione in modo appropriato come segue:

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

... ma ottengo la stessa uscita di cui sopra.

Qualche idea su cosa sto facendo male? Forse c'è qualcos'altro che devo abilitare/configurare?

+0

Stai inviando il codice di risposta corretto? –

+0

Grazie Iganacio, potresti per favore elaborare cosa intendi? –

risposta

5

Ho finalmente trovato la risposta grazie di aiuto di Naktibalda in ## php su irc.freenode.net

La pagina seguente riassume la questione: http://php.net/manual/en/features.http-auth.php

per citare i bit rilevanti:

partire da PHP 4.3.0, al fine di impedire a qualcuno di scrivere uno script che rivela la password di una pagina che è stata autenticata tramite un meccanismo esterno tradizionale, le variabili PHP_AUTH non verranno impostate se l'autenticazione esterna è abilitata per th in particolare la pagina e la modalità sicura sono abilitate. Indipendentemente da ciò, REMOTE_USER può essere utilizzato per identificare l'utente autenticato esternamente. Pertanto, puoi utilizzare $ _SERVER ['REMOTE_USER'].

...

PHP usa la presenza di una direttiva AuthType per determinare se l'autenticazione esterna è in vigore.

10

Per PHP-CGI:

in .htaccess aggiungere questo:

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

e all'inizio del vostro script aggiungere questo:

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

questo dovrebbe essere come questo

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

ti sbagli. http://www.php.net/manual/en/reserved.variables.server.php devi usare le stringhe per un indice quindi deve essere: '$ _SERVER ['PHP_AUTH_USER']' ecc. –

Problemi correlati