[ GMarco24 @ 01.09.2011. 02:57 ] @
Ok, hoce neko meni da objasni kako funkcionise ova stvar. Mnogo razlicitih varijanti sam nasao po literaturi, ali se moj problem zakomplikovao, pa sam skracivao, skracivao, dok nisam dosao na sledece:
Code:

<?php
    if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']))
    {      
        header('HTTP/1.1 401 Unauthorized');
        header('WWW-Authenticate:Basic realm="Moj sajt"');
        exit('<h3>Something</h3>Nemate pristup ovoj strani.'); 
    }
?>        
    <div>
        Gomila HTML koda...
    </div>

Znaci ovde nikakve provere username-a i pass-a nema. To je stajalo kasnije u kodu. Pa me je vracalo pri izvrsenju da ukucavam ponovo username i password, a onda sam ja krenuo da izbacujem kod deo po deo da shvatim gde skripi. U kodu je, nakon provere unesenih parametara, stajalo jos jednom:
Code:

...
else
       {
        header('HTTP/1.1 401 Unauthorized');
        header('WWW-Authenticate:Basic realm="Moj sajt"');
        exit('<h3>Something</h3>Nemate pristup ovoj strani.'); 
       }

ako parametri nisu dobri. E sad, sve je to pobrisano, stoji samo gornji kod. Zar ne bi trebalo da on jedino proverava isset() funkcije i da ako jesu setovane da me pusti dalje? Tj. zar ne bi trebalo da bilo koji unos na authorization prodje i izbaci HTML kod? Mene vraca i ne odobrava pristup.
[ Miroslav Ćurčić @ 01.09.2011. 10:53 ] @
Ovo radi kod mene:
Code:

  $IsCGI= (isset($_SERVER['GATEWAY_INTERFACE']) && substr($_SERVER['GATEWAY_INTERFACE'],0,3=='CGI'));
  if ($IsCGI && isset($_SERVER['HTTP_AUTHORIZATION'])) {
    $auth_params = explode(":" , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
    $_SERVER['PHP_AUTH_USER'] = $auth_params[0];
    unset($auth_params[0]);
    $_SERVER['PHP_AUTH_PW'] = implode('',$auth_params);
  }
  if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])
      || ($_SERVER['PHP_AUTH_USER']<>'moj username') || ($_SERVER['PHP_AUTH_PW']<>'moj pass')) {
    header('WWW-Authenticate: Basic Realm="Uloguj se"');
    header('HTTP/1.0 401 Unauthorized');
    die('You must provide the proper credentials!');
  }
[ GMarco24 @ 04.09.2011. 21:53 ] @
Dobro, verujem ja da ovaj tvoj kod radi. Nego meni nije jasno kako ovo funkcionise kad ja jedino sto proveravam je isset() za username i password. Ne interesuje me koji su. I on to nece da prodje, nego me vraca do beskonacnosti cak i kad ih ukucam
[ GMarco24 @ 04.09.2011. 22:21 ] @
Evo, iskopirao sam kod iz knjige, najprostiji sto moze da postoji i on nece da radi kako treba:
Code:
<?php
  // User name and password for authentication
  $username = 'rock';
  $password = 'roll';

  if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
    ($_SERVER['PHP_AUTH_USER'] != $username) || ($_SERVER['PHP_AUTH_PW'] != $password)) {
    // The user name/password are incorrect so send the authentication headers
    header('HTTP/1.1 401 Unauthorized');
    header('WWW-Authenticate: Basic realm="Guitar Wars"');
    exit('<h2>Guitar Wars</h2>Sorry, you must enter a valid user name and password to access this page.');
  }
?>

Sta moze da ne bude u redu? Je l server ima neka svoja podesavanja za header-e pa je tu problem, je 'l treba da zovem hosting kompaniju da mi oni objasne u cemu je problem?? Kao idiot uploadujem skriptu koja treba da bude zasticena, izvrsim je na brzaka, pa je obrisem
[ Miroslav Ćurčić @ 04.09.2011. 23:34 ] @
cgi ?
[ GMarco24 @ 05.09.2011. 00:48 ] @
A to je ovo gore sto si ti pisao i onda mora tako je l'?
Ne znam ti ja sta je to, ali ajde, ako tako kazes da mora...
[ Miroslav Ćurčić @ 05.09.2011. 19:35 ] @
I, jel radi ?

Poenta je da ako je PHP instaliran na serveru kao CGI onda se ne prenose polja $_SERVER['PHP_AUTH_USER'] i $_SERVER['PHP_AUTH_PW'] nego su oba spakovana u $_SERVER['HTTP_AUTHORIZATION'] pa ih moraš odatle pročitati.
[ GMarco24 @ 11.09.2011. 22:08 ] @
Ne radi. Evo koda koji sad stoji i nece da radi:
Code:

$IsCGI= (isset($_SERVER['GATEWAY_INTERFACE']) && substr($_SERVER['GATEWAY_INTERFACE'],0,3=='CGI'));
  if ($IsCGI && isset($_SERVER['HTTP_AUTHORIZATION'])) 
  {
    $auth_params = explode(":" , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
    $_SERVER['PHP_AUTH_USER'] = $auth_params[0];
    unset($auth_params[0]);
    $_SERVER['PHP_AUTH_PW'] = implode('',$auth_params);
  }

  // User name and password for authentication
  $username = 'rock';
  $password = 'roll';

  if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
    ($_SERVER['PHP_AUTH_USER'] != $username) || ($_SERVER['PHP_AUTH_PW'] != $password)) {
    // The user name/password are incorrect so send the authentication headers
    header('HTTP/1.1 401 Unauthorized');
    header('WWW-Authenticate: Basic realm="Guitar Wars"');
    exit('<h2>Guitar Wars</h2>Sorry, you must enter a valid user name and password to access this page.');
  }
[ Miroslav Ćurčić @ 12.09.2011. 07:53 ] @
Probaj "HTTP/1.0" umesto "HTTP/1.1".

Izgleda da ti ne gine debugovanje,
ubaci var_dump($_SERVER['PHP_AUTH_USER']) i var_dump($_SERVER['PHP_AUTH_PW'])
pa posmatraj šta ti stiže.
[ GMarco24 @ 12.09.2011. 12:08 ] @
Stavio sam HTTP/1.0, nista bitno se nije desilo. Ne znam kako da izvedem ovo sa var_dump. Ako stavim ispred header-a, header nece ni da bude poslat, pa je NULL NULL, ako stavim posle header-a, nikad nece da bude izvrsen, jer mi se vraca header do iznemoglosti