Pregunta

Fondo

Tengo un / 2.2.15 (Win32) con PHP / 5.3.2 establecido, la autenticación de manejo de Apache.

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

La autenticación funciona bien! No hay problemas.

Sin embargo, con respecto a la documentación , cualquier campo adicional de volver de la AuthDBDUserPWQuery será puesto en un AUTHENTICATION_fieldname variable en el entorno.

Con phpinfo(), puedo ver estas variables con él valores correctos en "Apache Medio Ambiente".

AUTHENTICATE_USERNAME
AUTHENTICATE_REALM
AUTHENTICATE_ACCESS

Problema

No puede recuperar esas variables de entorno de mi php.

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

Línea 3 impresiones bool (false) que indica que no se ha encontrado la variable
Sin embargo, si me cambio a otra variable Apache Medio Ambiente como 'HTTP_HOST' funciona.
..y sí, he intentado getenv() también, mismo resultado.

También hay una nota que el servidor Apache necesita ser compilado con abril 1.3.0 al trabajo. He utilizado la acumulación de Apache MSI desde httpd.apache.org y parece ser compilado con abril por encima de la versión 2. Desde que se pueden ver a phpinfo() deben ser accesibles desde PHP.

¿Fue útil?

Solución 2

Me hizo un trabajo alrededor,

Parece que esto podría ser un error de PHP. Se han encontrado algunos errores relacionados comunicados para PHP 4 y tal vez no los han fijado todavía ...

Hice una solución que realmente no me gusta (porque estoy acceder a la tabla de datos de usuario de Apache), pero parece que no tengo otra opción.

//************************************************************* 
// 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 no haya actualizado $ _ENV correcta, esto va a recuperar la corriente conectado usuario de la misma base de datos y la tabla que Apache está utilizando para la autenticación. A continuación, los campos adicionales se escriben en la variable global $ _ENV para que pueda ser utilizado como se supone. Más tarde, cuando se fija el "error", se utilizará automáticamente el original de $ _ENV.

Si alguien puede traer un poco de la información actualizada sobre este tema, yo sería feliz ...

Otros consejos

He utilizado esta regla mod_rewrite en un archivo .htaccess para que la variable de entorno cabecera HTTP de Autorización disponible en $_SERVER['HTTP_AUTHORIZATION']. Estoy seguro de que esto podría ser adaptado para sus propósitos. No estoy seguro de si es la mejor solución, pero es de a Solución:

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

Hay una pista en la respuesta de deceze. Él es ir a buscar los datos de $ _SERVER en lugar de $ _ENV.

Yo estaba sentado un Apache Env Var con

SenEnv my_var "verdadero" en el httpd.conf principal y no podía verlo en $ _ENV. Fue en $ _SERVER sin embargo.

Hace poco escribí una biblioteca para obtener los valores de las variables de entorno y de análisis de los tipos de datos de PHP. Esta biblioteca se puede utilizar para variables de entorno de análisis sintáctico a tipos de datos de PHP (como la pieza de fundición a entero, flotante, null, boolean), analizar las estructuras de datos complejas, como una cadena JSON y más con la contribución del provecho de la comunidad.

La biblioteca está disponible aquí: https://github.com/jpcercal/environment

Configuración de las variables de entorno con .htaccess por ejemplo:

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

Y para obtener los valores de la variable de entorno (independientemente de la CLI medio ambiente, Apache, Nginx, PHP incorporada en el servidor y más) para hacerlo:

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

disfrutar de ella.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top