Enrera
Mòdul 2
Creació i gestió d'entorns web dinàmics (PHP)
  Pràctica
1
2
3
4
5
   
Exercicis
Exercicis
 
 
   
  Encapçalaments o headers
   
 

En aquesta pràctica tractarem:

  • Les sentències de control explicades a la pràctica anterior.
  • Com podem identificar i controlar l'entrada d'usuaris a un directori.
  • Alguns valors de l'array $_SERVER.
  • Ús de la funció getenv().
  • Reencaminament d'adreces mitjançant header.

Ho posarem en funcionament amb la creació d'un petit sitema de validació per contrasenya i amb d'altres exemples.

   
   
Identificació amb contrasenya
   
Pràctica

Aprofitant les sentències comentades, crearem un petit exemple d'identificació mitjançant un formulari senzill en què hi entrarem el nostre nom d'usuari i la nostra contrasenya. Segons les dades entrades, s'autoritzarà o no l'entrada.

També utilitzarem algunes del les variables predefinides que ens ofereix el PHP. En concret, recollirem algunes informacions passades per la variable $_SERVER. Es tracta d'un array associatiu que conté informació de les capçaleres tant de petició com de resposta. Recordeu que podeu trobar la informació que contenen aquestes variables executant la funció phpinfo() (podeu anar a l'adreça http://localhost/home/phpinfo.php), especialment a l'apartat "PHP variables".

   
Atenció !
La pràctica següent, que consisteix en un sistema de restricció d'accés mitjançant les variables $PHP_AUTH_USER i $PHP_AUTH_PW, només funcionarà si PHP ha estat instal·lat com a mòdul de l'Apache (instal·lació més habitual). Així és com s'instal·la amb l'EasyPHP 1.7 i, per tant, no hi hauria d'haver cap problema perquè funcionés en el vostre sistema però sí que els podeu tenir en d'altres servidors.
   
 

Copieu el codi següent al vostre editor i deseu-lo amb el nom m2p51.php. Després, executeu-lo per veure'n el funcionament.

Podeu veure en el codi mateix que l'usuari per entrar és professorat i la contrasenya és entrada.

   
Veure codi

Executar codi

<?php
/*-----------------------------------------------------------------
* Mòdul: 2 Pràctica: 5 Fitxer: m2p51.php
* Autor: D116 Data:
* Descripció: Control d'accés
* Pre condi.: PHP instal·lat com a mòdul d'Apache
* Post cond.:
-----------------------------------------------------------------*/

// Fem una doble comprovació: primerament si s'ha definit la variable
// corresponent a l'usuari ($_SERVER['PHP_AUTH_USER']); si s'ha definit,
// comprovem en segon lloc que l'usuari i la contrasenya
// siguin correctes

// Comprovem que l'usuari s'hagi entrat
if (!isset($_SERVER['PHP_AUTH_USER'])) {
// Si no s'ha entrat,
header('WWW-Authenticate: Basic realm="Intracentre"');
header('HTTP/1.0 401 Unauthorized');
echo '<CENTER><H2>Accés restringit...</H2>';
echo '<HR>Cal tenir autorització per accedir a aquests recursos.<BR>';
echo '</CENTER>';
exit;
// Si s'ha entrat, comprovem que sigui correcte
} elseif (($_SERVER['PHP_AUTH_USER']!= 'professorat') || ($_SERVER['PHP_AUTH_PW'] != 'entrada')) {
header('WWW-Authenticate: Basic realm="Intracentre"');
header('HTTP/1.0 401 Unauthorized');
echo '<CENTER><H2>Accés restringit...</H2>';
echo '<HR>Cal tenir autorització per accedir a aquests recursos.<BR>';
echo '</CENTER>';
exit;
} else {
//Accés concedit
echo '<CENTER><H2>Recursos compartits</H2></CENTER>';
?>
<br><br>
<ul>
<li>Plantilles informes</li>
<li>Documents de coordinació </li>
<li>Normes d'avaluació</li>
</ul>
<?
// mostrem la informació continguda
echo "<hr>";
// mostrem la IP que recuperem de l'array $_SERVER[]
echo "Accés des de l'adreça IP (array '\$_SERVER[]') (\$_SERVER['REMOTE_ADDR']): <B>".$_SERVER['REMOTE_ADDR']."</B>";
// mostrem novament la IP utilitzant un altre mètode, amb la funció gentenv()
echo "<BR>Accés des de l'adreça IP (funció 'getenv') (getenv('REMOTE_ADDR')): <B>".getenv('REMOTE_ADDR')."</B>";
echo "<BR>Script que s'està executant (\$_SERVER['PHP_SELF']): <B>".$_SERVER['PHP_SELF']."</B>";
echo "<BR>Usuari entrat (\$_SERVER['PHP_AUTH_USER']): <B>".$_SERVER['PHP_AUTH_USER']."</B>";
echo "<BR>Contrasenya entrada (\$_SERVER['PHP_AUTH_PW']): <B>".$_SERVER['PHP_AUTH_PW']."</B>";
exit;
}
?>

  Llistat 2.5.1. Identificació amb contrasenya.
   
 

El procés que s'ha de seguir, que d'altra banda es veu ja en els comentaris del codi, és el següent:

  • Primer de tot, mitjançant $_SERVER["PHP_AUTH_USER"] mirem si s'ha entrat usuari; si no hi ha usuari, es mostra la pàgina d'accés restringit.
 
  • En cas que sí que hi hagi l'usuari definit, comprovarem (elseif) que el nom 'usuari' i la contrasenya siguin correctes; en cas afirmatiu, entrem a la pàgina de continguts, sinó es mostra la pàgina d'accés restringit.
 
  • Si s'autoritza l'accés, al capdavall de la pàgina es mostra un seguit d'informacions. Per fer-ho utilitzem, com hem dit, l'array $_SERVER[]. Podeu veure també en el codi que una alternativa per obtenir aquesta mateixa informació és utilitzar la funció getenv() que recupera els valors de les variables d'entorn com per exemple les que s'utilitzen en aquest codi.
   
   
  Redirecció amb header
   
Pràctica

Un dels elements útils del PHP és l'ús dels headers o capçaleres HTTP de fitxer. Ja hem vist a l'exemple anterior un cas pràctic d'ús de la funció header(). En aquest cas, es tractava d'un encapçalament de resposta davant la petició que li fem.

Aquesta funció pot admetre diferents tipus d'encapçalament. Com a exemple, en veurem dos dels més habituals: Location i Content-Type.

   
  Location
  Enviant la capçalera Location al navegador, podrem reencaminar les peticions enviades al nostre servidor. Si copiem l'exemple següent a l'editor, el desem (amb el nom de redirec.php, per ex.) i l'executem farà que el nostre navegador mostri automàticament la pàgina de la XTEC.
   
Executar codi
<?php
header("Location: http://www.xtec.net");
?>
  Llistat 2.5.2. Redirecció amb header.
   
   
  Content-Type
 

Amb aquest encapçalament advertim de quin tipus és el fitxer que enviarem. A l'exemple que segueix, podeu veure com des del PHP generem un fitxer de l'Excel, amb valors numèrics i les fórmules corresponents. Podríem, també, generar un fitxer Word, PDF, etc.

Copieu el codi a l'editor, deseu-lo amb el nom de m2p53.php, executeu-lo i observeu com es genera un nou fitxer de l'Excel amb les dades que li passem.

   
Veure codi

Executar codi

<?php
/*-----------------------------------------------------------------
* Mòdul: 2 Pràctica: 5 Fitxer: m2p53.php
* Autor: D116 Data:
* Descripció: Generació d'un full de càlcul Excel (headers)
* Pre condi.:
* Post cond.:
-----------------------------------------------------------------*/

// Atenció! No es pot posar cap altra codi o espai anterior al header
header("Content-type: application/vnd.ms-excel");
echo "Notes Finals" .chr(10);
echo "Nom" . chr(9). "L. Catalana". chr(9)."L. Castellana".chr(9). "L. Anglesa" . chr(9). "Mitjana Alum.". chr(10);
echo "Anselm ". chr(9). "5". chr(9). "8". chr(9). "2". chr(9). "=(B3+C3+D3)/3" .chr(10);
echo "Roser ". chr(9). "3". chr(9). "9". chr(9). "9". chr(9). "=(B4+C4+D4)/3" .chr(10);
echo "Glòria ". chr(9). "9". chr(9). "2". chr(9). "5". chr(9). "=(B5+C5+D5)/3" .chr(10);
echo "Miquel ". chr(9). "4". chr(9). "8". chr(9). "7". chr(9). "=(B6+C6+D6)/3" .chr(10);
echo chr(10);
echo "Mitj. matèries" .chr(9). "=SUMA(B3:B6)/4" .chr(9). "=SUMA(C3:C6)/4" .chr(9). "=SUMA(D3:D6)/4" .chr(10);
?>

  Llistat 2.5.3. Encapçalament per a document de l'Excel.
   
  Observeu que per fer els salts de casella i de línia, utilitzem els codi CHR(9) i CHR(10) respectivament.
   
Atenció !
Recordeu que abans de header no hi ha d'anar cap altra comanda ni de php ni de html. Tampoc hi hem de deixar espais en blanc.
   
Atenció !
Aquesta pràctica només funcionarà si tenim l'Excel instal·lat a l'ordinador client.
   
   
Amunt
Pràctica
1
2
3
4
5
   
Exercicis
Exercicis