2013-02-06 15 views
6

Bevor ich beginne, möchte ich darauf hinweisen, dass ich Stack Overflow durchsucht habe und andere ähnliche Fragen gefunden habe - PHP_AUTH_USER not set? und HTTP Auth via PHP - PHP_AUTH_USER not set? - und diese haben darauf hingewiesen, dass die Authentifizierung $ _SERVER Variablen nicht gesetzt werden, wenn Server API '' ist auf '' CGI/FCGI '' gesetzt, aber ich habe meine '' phpinfo() '' Ausgabe überprüft und meine '' Server API '' ist auf '' Apache 2.0 Handler '' gesetzt.

Ok, so habe ich ein einfaches Skript wie folgt:

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

..., die ich rufe remote über das folgende:

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

... aber nur die Ausgänge:

Username: , Password: 

Ich habe auch versucht, das Skript mit PHP cURL aufrufen und die Authentifizierungsparameter entsprechend einstellen wie folgt:

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

... aber ich bekomme die gleiche Leistung wie oben.

Irgendeine Idee, was ich falsch mache? Vielleicht muss ich noch etwas anderes aktivieren/konfigurieren?

+0

Senden Sie den richtigen Antwortcode? –

+0

Danke Iganacio, kannst du bitte erläutern, was du meinst? –

Antwort

5

Ich habe endlich die Antwort dank der Hilfe von Naktibalda in ## php auf irc.freenode.net entdeckt

Die folgende Seite die Ausgabe fasst zusammen: http://php.net/manual/en/features.http-auth.php

die entsprechenden Bits zu zitieren:

ab PHP 4.3.0, um jemanden zu verhindern, dass ein Skript zu schreiben, die das Kennwort für eine Seite zeigt, die durch einen traditionellen externen Mechanismus authentifiziert wurde, wird die PHP_AUTH Variablen nicht eingestellt werden, wenn die externe Authentifizierung aktiviert ist für th Bei bestimmten Seiten ist der abgesicherte Modus aktiviert. Unabhängig davon kann REMOTE_USER verwendet werden, um den extern authentifizierten Benutzer zu identifizieren. Sie können also $ _SERVER ['REMOTE_USER'] verwenden.

...

PHP nutzt die Anwesenheit einer AuthType Richtlinie, um zu bestimmen, ob eine externe Authentifizierung aktiv ist.

10

Für PHP-CGI:

in .htaccess hinzufügen:

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

und am Anfang des Skripts fügen Sie diese:

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

dies so sein sollte

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

Sie liegen falsch. http://www.php.net/manual/en/reserved.variables.server.php Sie müssen Zeichenfolgen für einen Index verwenden, also muss es sein: '$ _SERVER ['PHP_AUTH_USER']' usw. –

Verwandte Themen