Connexion

Signaler
Messages postés
4
Date d'inscription
dimanche 27 décembre 2009
Statut
Membre
Dernière intervention
1 juillet 2010
-
Messages postés
197
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
20 février 2013
-
Bonjour à tous
j'ai un petit soucis.je suis actuellement en stage et je dois faire un site intranet en utilisant php et une base de données SQL server. pour faire la liaison entre les 2 j'ai télé charger le pilote sql server-php , configurer php.ini et tester avec phpinfo()et meme les echo " " et çà fonctionne.j'insère toujours le code " dl('php_sqlsrv_53_ts_vc9.dll');" au début de chaque fichier php comme demandé dans un tuto que j'ai lu.l'authentification au site se fait par les identifiants Windows (ntlm-compte NT) que je récupère dans le code suivant:

[b]dl('php_sqlsrv_53_ts_vc9.dll');
<?php

define('_NTLM_AUTH_FAILED',1);
define('_NTLM_PROXY',2);

function getInfosFromNTLM() {
$session_start();

if (!empty($_SERVER['HTTP_VIA'])) {
return _NTLM_PROXY;
}
$header = apache_request_headers();
$auth = isset($header['Authorization']) ? $header['Authorization'] : null;

if (is_null($auth)) {
return unAuthorized();
}
if ($auth && (substr($auth,0,4) == 'NTLM')) {

$c64 = base64_decode(substr($auth,5));
$state = ord($c64{8});

switch ($state) {

case 1:
$chrs = array(0,2,0,0,0,0,0,0,0,40,0,0,0,1,130,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0);
$ret = "NTLMSSP";
foreach ($chrs as $chr) {
$ret .= chr($chr);
}
return unAuthorized(trim(base64_encode($ret)));
break;

case 3:
$l = ord($c64{31}) * 256 + ord($c64{30});
$o = ord($c64{33}) * 256 + ord($c64{32});
$domain = str_replace("\0","",substr($c64,$o,$l));

$l = ord($c64{39}) * 256 + ord($c64{38});
$o = ord($c64{41}) * 256 + ord($c64{40});

$user = str_replace("\0","",substr($c64,$o,$l));
return array('domain'=>$domain,'user'=>$user);
break;
}
}
}
function unAuthorized($msg=null) {
$ntlm = 'WWW-Authenticate: NTLM';
if ($msg) {
$ntlm .= ' '.$msg;
}
header('HTTP1.0 401 Unauthorized');
header($ntlm);

return _NTLM_AUTH_FAILED
?>
/b
et j'utilise la fonction verif_access() pour vérifier la connexion:
[b]<?php
require_once('ntlm.php');
//
//
// Commun à toutes les pages
// Version 1
// Creation ete
//

// 192.168.29.229

$verif_acces = "Non";
$infos = getInfosFromNTLM();

switch ($infos) {
case _NTLM_PROXY:
die('No proxy for ntlm');
case _NTLM_AUTH_FAILED:
die('Sorry NTLM auth failed');
default:
//$_SERVER['REMOTE_USER'] = strtolower($infos['user']) ;
$_SESSION['user'] = strtolower($infos['user']) ;
print_r($_SESSION['user'] );
echo $_SESSION['user'] ;
//echo $infos['domain'];
break;
}
header('HTTP/1.1 401 Unauthorized');
header('Authenticate: NTLM ');

?>/b


voici ma fonction pour me connecter à la base:
[b]function connect(){
if(!isset($this->db){
$serverName "INTBOU73"; $connectionInfo array( "Database"=>"Celeste");
$this->db = sqlsrv_connect( $serverName, $connectionInfo);//stockage du resultat dans $this->db

if( $this->db )
{
echo "Connexion établie avec succes bienvenue.$_SESSION['user']. \n";
}
else
{
echo "La connection n'a pas pu etre établie.\n";
die( print_r( sqlsrv_errors(), true));
}
}}/b

Ce qui me pose problème, c'est que quand je mets un echo "" ou phpinfo() dans un simple fichier php j'ai le résultat, par contre quand je veux tester la verif access.php par exemple, le ne vois que l'instruction dl('php_sqlsrv_53_ts_vc9.dll'); qui s'affiche dans une page blanche sans les les info sur l'user, je veux le recuperer pour le comparer avec ma base. Que faire?
Merci.

2 réponses

Messages postés
4
Date d'inscription
dimanche 27 décembre 2009
Statut
Membre
Dernière intervention
1 juillet 2010

je rappelle que j'utilise apache!!
Messages postés
197
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
20 février 2013
1
Bonjour,

dl('php_sqlsrv_53_ts_vc9.dll'); est hors d'un bloc php

<?php
dl('php_sqlsrv_53_ts_vc9.dll');

au lieu de :

dl('php_sqlsrv_53_ts_vc9.dll');
<?php

bonne aprés midi