Frage

Hintergrund

Ich habe eine Apache / 2.2.15 (Win32) mit PHP / 5.3.2 einrichten, Handhabung Authentifizierung.

<Directory /usr/www/myhost/private>
  # core authentication and mod_auth_basic configuration
  # for mod_authn_dbd
  AuthType Basic
  AuthName "My Server"
  AuthBasicProvider dbd

  # core authorization configuration
  Require valid-user

  # mod_authn_dbd SQL query to authenticate a user
  AuthDBDUserPWQuery "SELECT Password,UserName,Realm,Access FROM authn WHERE user = %s"
</Directory>

Die Authentifizierung funktioniert gut! Keine Probleme.

Aber in Bezug auf die Dokumentation , jede zusätzliche Feld zurückgeführt von die AuthDBDUserPWQuery wird in ein gesetzt werden AUTHENTICATION_fieldname Variable in der Umwelt.

Mit phpinfo(), kann ich diese Variablen mit ihm richtigen Werten unter „Apache-Umgebung“ sehen.

AUTHENTICATE_USERNAME
AUTHENTICATE_REALM
AUTHENTICATE_ACCESS

Problem

Ich kann diese Umgebungsvariablen aus meinem php holen.

1 <?php
2   $Access = apache_getenv('AUTHENTICATE_ACCESS',true);
3   var_dump($Access);
4 ?>

Zeile 3 druckt bool (false), das anzeigt, dass der Variable wurde nicht gefunden!
Allerdings, wenn ich auf einen anderen Apache Umgebungsvariable wie ‚HTTP_HOST‘ es funktioniert.
..und ja, ich habe versucht, getenv() auch, das gleiche Resultat.

Es gibt auch einen Hinweis, dass der Apache-Server mit April kompiliert werden muss 1.3.0 an der Arbeit. Ich benutzen den Apache msi Build von httpd.apache.org und es scheint, mit April über Version 2 erstellt werden, da ich sie mit phpinfo() sehen kann sie von PHP zugänglich sein müssen.

War es hilfreich?

Lösung 2

Ich habe eine Arbeit um,

Es scheint, wie dies ein PHP Fehler sein könnte. Gefunden einige relevante Bugs berichtet für PHP 4 und vielleicht haben sie sie noch nicht fest ...

habe ich eine Lösung, dass ich wirklich nicht, wie zu tun (weil ich die Apache Userdata-Tabelle zugreifen), aber es scheint, dass ich keine andere Wahl habe.

//************************************************************* 
// If PHP failed to retrieve the AuthDBDUserPWQuery fields.
// Connect to Apache authentication databaseand create the
// envirnment variables manually
//
if (empty($_ENV['AUTHENTICATE_ACCESS'])) {
  $Apache = mysql_connect('MyServerIP','MyUserName','MyPassword',false,MYSQL_CLIENT_SSL|MYSQL_CLIENT_COMPRESS);
  mysql_select_db('MyDatabase',$Apache);
  $SQLSet = mysql_query("SELECT Realm, Access FROM authenticationtable WHERE UserName='".$_SERVER['PHP_AUTH_USER']."' AND Password='".$_SERVER['PHP_AUTH_PW']."'");
  $SQLRow = mysql_fetch_array($SQLSet);
  $_ENV['AUTHENTICATE_REALM'] = $SQLRow['Realm'];
  $_ENV['AUTHENTICATE_ACCESS']= $SQLRow['Access'];
  mysql_close($Apache);
}

Wenn PHP ausgefallen ist dies der Strom in Benutzer aus der gleichen Datenbank und Tabelle protokolliert abrufen $ _ENV richtig, zu aktualisieren, dass Apache für die Authentifizierung verwendet wird. Dann wird die zusätzlichen Felder werden in den globalen $ _ENV Variable geschrieben werden, damit es verwendet werden kann, wie es soll. Später, wenn die „Fehler“ festgelegt ist, wird es automatisch den ursprünglichen $ _ENV verwenden.

Wenn jemand etwas auf den neuesten Stand zu diesem Thema bringen kann, würde ich mich freuen ...

Andere Tipps

Ich habe diese mod_rewrite Regel in einer .htaccess-Datei verwendet, um das HTTP-Authorization-Header-Umgebungsvariable in $_SERVER['HTTP_AUTHORIZATION'] zur Verfügung zu stellen. Ich bin sicher, dass dies für Ihre Zwecke angepasst werden könnte. Nicht sicher, ob es die beste Lösung, aber es ist a Lösung:

RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]

Es gibt einen Anhaltspunkt in deceze Antwort. Er wird die Daten von $ _SERVER statt $ _ENV abgerufen werden.

Ich war mit einem Apache Env Var Einstellung

SenEnv MY_VAR "true" in der Haupt httpd.conf und konnte es nicht sehen in $ _ENV. Es war in $ _SERVER though.

Vor kurzem schrieb ich eine Bibliothek, um Werte von Umgebungsvariablen und Parse auf die PHP-Datentypen. Diese Bibliothek kann auf Parse Umgebungsvariablen PHP Datentypen verwendet wird (wie das Gießen integer, float, null, boolean), analysiert die komplexen Datenstrukturen wie ein JSON-String und mehr mit dem Beitrag des commnunity.

Die Bibliothek finden Sie hier: https://github.com/jpcercal/environment

Richten Sie Ihre Umgebungsvariablen mit .htaccess mit gutem Beispiel:

SetEnv YOUR_ENV_VARIABLE_NAME the-value-of-your-env-var

Und die Werte von Umgebungsvariablen zu erhalten (unabhängig von der Umgebung CLI, Apache, Nginx, PHP Einbau-Server und mehr), es zu tun:

<?php
// ...
require "vendor/autoload.php";
// ...
var_dump(Cekurte\Environment\Environment::get("YOUR_ENV_VARIABLE_NAME"));

Genießen Sie es.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top