Question

Arrière-plan

J'ai un Apache / 2.2.15 (Win32) avec PHP / 5.3.2 mis en place, l'authentification de manipulation.

<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>

L'authentification fonctionne très bien! Aucun problème.

Mais en ce qui concerne la documentation , tout champ supplémentaire retourné de le AuthDBDUserPWQuery sera mis dans un AUTHENTICATION_fieldname variable dans l'environnement.

Avec phpinfo(), je peux voir ces variables avec des valeurs correctes il sous la rubrique "Environnement Apache".

AUTHENTICATE_USERNAME
AUTHENTICATE_REALM
AUTHENTICATE_ACCESS

Problème

Je ne peux pas chercher les variables d'environnement de mon php.

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

Ligne 3 impressions bool (false) indiquant que la variable n'a pas été trouvé!
Cependant si je change à une autre variable d'environnement Apache comme « HTTP_HOST » il fonctionne.
..et oui, je l'ai essayé getenv() aussi, même résultat.

Il y a aussi une note que le serveur Apache doit être compilé avec 1.3.0 avril au travail. J'ai utilisé la construction Apache msi de httpd.apache.org et il semble être compilé avec la version 2. avril au-dessus Comme je peux les voir avec phpinfo() ils doivent être accessibles à partir de PHP.

Était-ce utile?

La solution 2

J'ai fait un travail autour,

Il semble que cela pourrait être un bug PHP. Trouvé quelques bugs connexes ont rapporté pour PHP 4 et peut-être qu'ils ont pas encore fixé les ...

Je l'ai fait une solution que je ne aime pas vraiment (parce que je suis accès à la table userdata Apache), mais il semble que je n'ai pas le choix.

//************************************************************* 
// 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);
}

Si PHP a échoué à mettre à jour _ENV $ correcte, cela récupérera le courant utilisateur connecté à partir de la même base de données et une table que Apache utilise pour l'authentification. Ensuite, les champs supplémentaires seront inscrits dans la variable globale $ _ENV de sorte qu'il peut être utilisé comme il est censé. Plus tard, quand le « bug » est fixé, il utilisera automatiquement le _ENV original $.

Si quelqu'un peut apporter un peu des informations à jour sur ce sujet, je serais heureux ...

Autres conseils

Je l'ai utilisé cette règle mod_rewrite dans un fichier .htaccess pour rendre la variable d'environnement d'en-tête HTTP d'autorisation disponible dans $_SERVER['HTTP_AUTHORIZATION']. Je suis sûr que cela pourrait être adapté à vos besoins. Je ne sais pas si elle est la meilleure solution, mais il est une solution :

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

Il y a un indice dans la réponse de deceze. Il est de Récupération des données $ _SERVER au lieu de _ENV $.

Je mettais un Var avec Apache Env

SenEnv MY_VAR "true" dans la principale httpd.conf et ne pouvait pas le voir en $ _ENV. Il était en $ _SERVER cependant.

Récemment j'ai écrit une bibliothèque pour obtenir des valeurs de variables d'environnement et d'analyser les types de données PHP. Cette bibliothèque peut être utilisée pour analyser les variables d'environnement aux types de données PHP (comme la coulée à integer, float, null, Boolean), analyser les structures de données complexes comme une chaîne JSON et plus avec la contribution du commnunity.

La bibliothèque est disponible ici: https://github.com/jpcercal/environment

Configuration variables d'environnement avec htaccess par exemple:

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

Et pour obtenir les valeurs de variable d'environnement (indépendamment de l'environnement CLI, Apache, Nginx, PHP serveur intégré et plus) pour le faire:

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

en profiter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top