Connexion

celeste87 Messages postés 4 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 1 juillet 2010 - 1 juil. 2010 à 10:35
cs_47 Messages postés 197 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 20 février 2013 - 2 juil. 2010 à 14:58
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

celeste87 Messages postés 4 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 1 juillet 2010
1 juil. 2010 à 10:44
je rappelle que j'utilise apache!!
0
cs_47 Messages postés 197 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 20 février 2013 1
2 juil. 2010 à 14:58
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
0
Rejoignez-nous