Professional Documents
Culture Documents
INTRODUCCIÓN
Las siglas PHP representan "Personal Home Page". PHP es un lenguaje de
programación pensado para utilizarse en desarrollos web, por lo que es
ideal para brindar mayor dinamismo a una página Web: acceso a bases de
datos, creación de foros, libros de visita, rotación de banners, etc.
PHP se inicia como un pasatiempo de Rasmus Lerdorf pero hoy en día,
gracias a su naturaleza gratuita, cuenta con miles de adeptos y existen
actualizaciones casi constantes. Varias empresas han observado el
potencial de PHP y le han otorgado su apoyo.
PHP es un lenguaje encapsulado dentro de documentos html, por ello se
pueden colocar instrucciones php dentro de las páginas. Gracias a esto el
diseñador de un sitio WEB puede trabajar de forma independiente al
programador. PHP es un lenguaje interpretado por el servidor (tecnología
del lado del servidor).
1
Área de Servicios – Dpto. de Informática Curso de PHP
FUNCIONAMIENTO DE PHP
PHP es un lenguaje de script interpretado en el servidor web para la
generación de páginas web dinámicas. Es similar al ASP de Microsoft o el
JSP de Sun. Algunas de sus principales diferencias frente a estas otras
tecnologías son: rapidez; facilidad de aprendizaje; soporte
multiplataforma, tanto de diversos Sistemas Operativos, como servidores
HTTP y bases de datos; y el hecho de que se distribuye de forma gratuita
bajo una licencia abierta.
Para funcionar Php necesita su motor de scripting (script engine) que
ejecuta las partes en código antes de que el servidor de la red envíe la
página al usuario. Actualmente se ha llegado a la versión 3.0 del motor
Php (funciona prácticamente en todos los servidores de la red) disponible
en el sitio www.php.net.
Cuando un usuario solicita una página Php, el motor ejecuta el código que
está en esta página. Durante la ejecución, el código da unas
informaciones en formato html. Finalmente se envía el archivo
(completamente en formato html) al usuario.
Si intentáras visualizar el código fuente de una página en Php podés
comprobar que no aparece ninguna línea del código Php. La ventaja es
precisamente ésta, ningún usuario externo, excluido el webmaster, puede
acceder al código y modificarlo. Para el usuario externo, la página en
Php es exactamente igual que una página cualquiera en Html.
2
Área de Servicios – Dpto. de Informática Curso de PHP
SINTAXIS BÁSICA
Delimitadores de script
Estos modos de abrir y cerrar las etiquetas son:
<? y ?>
<% y %>
<?php y ?>
<script languaje="php"> esta es para Front Page
Separación de instrucciones
Las instrucciones se separan igual que en C o Perl - terminando cada
sentencia con un punto y coma.
La etiqueta de cierre (?>) también implica el fin de la sentencia, así lo
siguiente es equivalente:
<?php
echo "Esto es una prueba";
?>
Comentarios
PHP soporta comentarios tipo 'C', 'C++' y shell de Unix. Por ejemplo:
<?php
echo "Esto es una prueba"; // Esto es un comentario tipo c++ para una
línea
/* Esto es un comentario multilínea
otra línea más de comentario*/
echo "Esto es aún otra prueba";
echo "Una Prueba Final"; # Este es un comentario tipo shell
?>
Primer ejemplo
<html>
<head>
<title>Ejemplo PHP</title>
</head>
<body>
<?php echo "Hola, este es un ejemplo con PHP!"; ?>
</body>
</html>
3
Área de Servicios – Dpto. de Informática Curso de PHP
Settype()
int settype ( string var, string type)
Esta función retorna TRUE si se lleva a cabo con éxito; en otro caso
devuelve FALSE.
Array
Las tablas (o array en inglés), son muy importantes en PHP, ya que
generalmente, las funciones que devuelven varios valores, como las
funciones ligadas a las bases de datos, lo hacen en forma de tabla.
<?php
$ciudad[] = "París";
$ciudad[] = "París";
$ciudad[] = "Roma";
$ciudad[] = "Sevilla";
$ciudad[] = "Londres";
Esta es una forma de asignar elementos a una tabla, pero una forma más
formal es utilizando la función array
<?php
$ciudad = array("París", "Roma", "Sevilla", "Londres");
//contamos el número de elementos de la tabla
$numelentos = count($ciudad);
//imprimimos todos los elementos de la tabla
for ($i=0; $i < $numelentos; $i++)
{
print ("La ciudad $i es $ciudad[$i] <BR>\n");
}
?>
4
Área de Servicios – Dpto. de Informática Curso de PHP
Arrays Multidimensionales
<?php
$f=10;
$a[1] = $f; # ejemplos de una sola dimensión
$a["foo"] = $f;
$a[1][0] = $f; # bidimensional
$a["foo"][2] = $f; # (se pueden mezclar índices numéricos y
asociativos)
$a[3]["bar"] = $f; # (se pueden mezclar índices numéricos y
asociativos)
$a["foo"][4]["bar"][0] = $f; # tetradimensional!
?>
<?
$a = array(
"manzana" => array(
"color" => "rojo",
"sabor" => "dulce",
"forma" => "redondeada"
),
"naranja" => array(
"color" => "naranja",
"sabor" => "ácido",
"forma" => "redondeada"
),
"plátano" => array(
"color" => "amarillo",
"sabor" => "paste-y",
"forma" => "aplatanada"
)
);
echo $a["manzana"]["sabor"]; # devolverá "dulce"
?>
OPERADORES EN PHP
Al desarrollar cualquier programa empleamos normalmente operadores que
nos sirven para realizar diversas operaciones que le otorgan un cierto
grado de complejidad a nuestros programas, ya que, de otro modo el
programa realizaría siempre lo mismo y por tanto no seria un programa
útil.
Operadores aritméticos
+ Suma dos valores
- Resta dos valores (o pasa a negativo un valor)
* Multiplica dos valores
/ Divide dos valores
% Resto de dividir dos valores
++ Incremento en una unidad
-- Decremento en una unidad
5
Área de Servicios – Dpto. de Informática Curso de PHP
Operadores de asignación
= Asigna a la parte derecha el valor izquierdo
+= Realiza la suma de la derecha con la izquierda y la asigna a la
derecha
-= Realiza la resta de la derecha con la izquierda y la asigna a la
derecha
*= Realiza la multiplicación de la derecha con la izquierda y la
asigna a la derecha
/= Realiza la división de la derecha con la izquierda y la asigna a la
derecha
%= Se obtiene el resto y se asigna
.= Concatena el valor de la izquierda con la derecha y lo asigna a la
derecha
Operadores lógicos
! Operador NO o negacion.Si era true pasa a false y viceversa
And Operador Y, si ambos son verdaderos vale verdadero
Or Operador O, vale verdadero si alguno de los dos es verdadero
Xor Verdadero si alguno de los dos es true pero nunca ambos
&& True si ambos lo son
|| True si alguno lo es
Operadores condicionales
== Comprueba si dos números son iguales
!= Comprueba si dos números son distintos
> Mayor que, devuelve true en caso afirmativo
< Menor que, devuelve true en caso afirmativo
>= Mayor o igual
<= Menor o igual
IF...ELSE
La sentencia IF...ELSE permite ejecutar un bloque de instrucciones si la
condición es Verdadera y otro bloque de instrucciones si ésta es Falsa.
Es importante tener en cuenta q instrucciones si ésta es Falsa. Es
importante tener en cuenta que la condición que evaluemos ha de estar
encerrada entre paréntesis (esto es aplicable a todas la sentencias de
control).
if (condición) {
Este bloque se ejecuta si la condición es VERDADERA
} else {
6
Área de Servicios – Dpto. de Informática Curso de PHP
IF...ELSEIF...ELSE
La sentencia IF...ELSEIF...ELSE permite ejecuta varias condiciones en
cascada. Para este caso veremos un ejemplo, en el que utilizaremos los
operadores lógicos.
<?php
if ($nombre == ""){
echo "Tú no tienes nombre";
} elseif (($nombre=="eva") OR ($nombre=="Eva")) {
echo "
echo "Tu nombre es EVA";<
} else {
echo "Tu nombre es " . $nombre;
}
SWITCH...CASE...DEFAULT
Una alternativa a IF...ELSEIF...ELSE, es la sentencia SWITCH, la cuál
evalúa y compara cada expresión de la sentencia CASE con la expresión que
evaluamos, si llegamos al final de la lista de CASE y encuentra una
condición Verdadera , ejecuta el código de bloque que haya en DEFAULT. Si
encontramos una condición verdadera debemos ejecutar un BREAK para que la
sentencia SWITCH no siga buscando en la lista de CASE. Veamos un ejemplo.
<?php
switch ($dia) {
case "Lunes":
echo "Hoy es Lunes";
break;
c
case "Martes":
echo "Hoy es Martes";
break;
case "Miercoles":
echo "Hoy es Miercoles";
break;
case "Jueves":
echo "Hoy es Jueves";
break;
case "Viernes":
echo "Hoy es Viernes";
break;
case "Sábado":
echo "Hoy es Sábado";
7
Área de Servicios – Dpto. de Informática Curso de PHP
break;
case "Domingo":
echo "Hoy es Domingo";
break;
default:
default:
echo "Esa cadena no corresponde a ningún día de la semana";
}
?>
WHILE
La sentencia WHILE ejecuta un bloque de código mientras se cumpla una
determinada condición.
<?php
$num = 1;
while ($num < 5) {
echo $num;
$num++
}
?>
Podemos romper un bucle WHILE utilizando la sentencia BREAK.
<?php
$num = 1;
while ($num < 5) {
echo $num;
if ($num == 3){
echo "Aquí nos salimos \n";
break
}
$num++
}
?>
DO...WHILE
Esta sentencia es similar a WHILE, salvo que con esta sentencia primero
ejecutamos el bloque de código y después se evalúa la condición, por lo
que el bloque de código se ejecuta siempre al menos una vez.
<?php
$num = 1;
do {
echo $num;
if ($num == 3){
echo "Aquí nos salimos \n";
break
}
$num++
8
Área de Servicios – Dpto. de Informática Curso de PHP
FOR
El bucle FOR no es estrictamente necesario, cualquier bucle FOR puede ser
sustituido fácilmente por otro WHILE. Sin embargo, el bucle FOR resulta
muy útil cuando debemos ejecutar un bloque de código a condición de que
una variable se encuentre entre un valor mínimo y otro máximo. El bucle
FOR también se puede romper mediante la sentencia BREAK.
<?php
for ($num = 1; Snum <=5; $num++){
echo $num;
if ($num == 3){
echo "Aquí nos salimos \n";
break
}
}
?>
FUNCIONES
El uso de funciones nos da la capacidad de agrupar varias instrucciones
bajo un solo nombre y poder llamarlas a estas varias veces desde
diferentes sitios, ahorrándonos la necesidad de escribirlas de nuevo.
<?php
function Nombre(parametro1, parametro2...)
{
instrucción1;
instrucción2;
instrucción3;
instrucción4;
return valor_de_retorno;
}
?>
9
Área de Servicios – Dpto. de Informática Curso de PHP
{
$media=($a+$b)/2;
return $media;
}
echo media_aritmetica(4,6),"<br>";
echo media_aritmetica(3242,524543),"<br>";
?>
</body>
</html>
Parámetros
Parámetros por defecto
Si deseamos que la función por defecto ponga el texto en color azul, por
ejemplo, la redefiniríamos de la siguiente manera:
10
Área de Servicios – Dpto. de Informática Curso de PHP
Como se ve, para pasar un parámetro por referencia, basta con poner "&"
delante del nombre del parámetro en la declaración de la función, es
decir, poner "&" delante del nombre del parámetro formal.
También se puede pasar un parámetro por referencia aunque en la función
no esté declarado como tal, anteponiendo el ampersand "&" al parámetro
actual (al invocar la función).
Variables en funciones
Variables locales
Para definir una variable local, simplemente se asigna un valor a la
variable:
function Iva($fValue) {
// $fIVA es una variable local
$fIVA = $fValue * 0.21;
Echo("El IVA de $fValue es $fIVA<BR>");
}
Iva(2350);
Variables estáticas
Si queremos que la variable local conserve el valor de invocación a
invocación de la función, basta declararla como estática:
muestra en la página:
Count vale 0 y count2 vale 1
Count vale 1 y count2 vale 1
Count vale 2 y count2 vale 1
11
Área de Servicios – Dpto. de Informática Curso de PHP
Retorno de un valor
Para devolver un valor se emplea la cláusula return.
function myfunc($fnCallback) {
12
Área de Servicios – Dpto. de Informática Curso de PHP
Podemos emplear otra técnica para hacer callbacks más sencillos con:
function mycallback() {
Echo("Dentro del callback.<BR>");
}
$strCallback = "mycallback";
// Llamamos al callback
$strCallback();
Variables variables
No, el título no está equivocado, las variables variables son formas de
indireccionamiento a la hora de referirse a variables.
Si tenemos dos variables $strVarName y $nValue y hacemos que $strVarName
contenga la cadena "nValue", al referirnos a $$strVarName (nótese el
doble dólar "$$") nos estamos refiriendo a la variable que tiene como
nombre el contenido de $strVarName, es decir, a $nValue.
Lo anterior plasmado en un ejemplo sería:
$nValue = 5;
$strVarName = "nValue";
echo("Mostrando el valor de $strVarName: $$strVarName.<BR>");
$$strVarName = 5;
echo("Ahora $strVarName vale $$strVarName.<BR>");
En los casos en los que haya ambigüedad, puede emplearse el agrupador {},
por ejemplo, para $$myarray[0]), podríamos referirnos:
1.Al primer elemento del array que tiene como nombre el contenido de
la variable $myarray.
2.A la variable que tiene como nombre el contenido de $myarray[0].
Si empleásemos el operador de agrupación para evitar la ambigüedad, el
primer caso lo escribiríamos ${$myArray}[0] y ${$myArray[0]} en el
segundo.
Die, exit
Se emplean para terminar la ejecución del script abruptamente.
•Die($msg) muestra el mensaje $msg antes de salir.
•Exit() sale de la ejecución del script.
Librerias
El uso de librerías es tremendamente útil, nos permiten agrupar varias
funciones y variables en un mismo fichero, de manera que luego podemos
incluir esta librería en distintas páginas y disponer de esas funciones
fácilmente.
13
Área de Servicios – Dpto. de Informática Curso de PHP
function PiePagina()
{
?>
<hr>
<FONT SIZE="-1">Este es el pie de página.</FONT><BR>
<?
}
?>
fin<BR><BR>
14
Área de Servicios – Dpto. de Informática Curso de PHP
Código Display
A am o pm
A AM o PM
H Hora (de 1 a 12)
H Hora (de 0 a 23)
I Minutos
S Segundos
J Dia (sin los ceros)
D Dia (con los ceros)
D Abreviacion del dia (en ingles)
L Nombre del dia (en ingles)
Z Numero de dia del año (desde 1 hasta 365)
M Numero del Mes
M Abreviacion del mes (en ingles)
F Nombre del mes (en ingles)
Y Año (formato de 2 digitos)
Y Año (formato de 4 digitos)
<?php
echo Date("d/m/y");
?>
<?php
echo "Son exactamente las : ",Date("h:i:s"),"... y hoy es: ",Date("d-m-
Y");
15
Área de Servicios – Dpto. de Informática Curso de PHP
echo "<BR>";
echo "Es el día numero <B>",Date("z"),"</B> del año";
?>
¿Que es eso? Eso es exactamente lo que dije arriba. Ese numero extraño
son la cantidad de segundos que pasaron desde el 1/1/1970 hasta esta
instante.
FORMULARIOS
16
Área de Servicios – Dpto. de Informática Curso de PHP
procesa2.php
<!-- procesa2.php -->
17
Área de Servicios – Dpto. de Informática Curso de PHP
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de procesado de formularios</H1>
El nombre que ha introducido es: <?php echo $nombre," ",$apellidos ?>
<br>
</body>
</html>
El resultado final es el mismo, solo que con el método GET podemos ver
los parámetros pasados ya que están codificados en la URL.
A veces para que quede la información menos expuesta se usa el método
POST. Con el método GET se pueden codificar hasta 512 caracteres en la
URL, de manera que si hay que pasar mucha información este método no nos
servirá.
Envio de e-mails
PHP nos ofrece la posibilidad de enviar emails de una manera sencilla y
fácil, para ello el lenguaje nos proporciona la instrucción mail( )
<?php
mail(destinatario, tema, texto del mensaje);
?>
18
Área de Servicios – Dpto. de Informática Curso de PHP
</html>
email.php
<!-- email.php -->
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de envio de email</H1>
<? if ($direccion!=""){
if ($tipo=="plano"){
// Envio en formato texto plano
BASE DE DATOS
19
Área de Servicios – Dpto. de Informática Curso de PHP
el valor de dicho campo, otro campo con el nombre de una persona y por
último un campo con el apellido de la persona.
Para crear la tabla puede usar la herramienta de administración de MySQL
de su servidor web o puede escribir un fichero de texto con el contenido
de la sentencia SQL equivalente y luego decirle al motor de base de datos
que la ejecute con la siguiente instrucción:
mysql -u root base_datos <prueba.sql
prueba.sql
CREATE TABLE prueba (ID_Prueba int(11) DEFAULT '0' NOT NULL
auto_increment,
Nombre varchar(100),
Apellidos varchar(100),
PRIMARY KEY (ID_Prueba),
UNIQUE ID_Prueba (ID_Prueba)
);
if (!($link=mysql_connect("localhost","usuario","Password")))
{
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db("base_datos",$link))
{
echo "Error seleccionando la base de datos.";
exit();
}
return $link;
}
$link=Conectarse();
echo "Conexión con la base de datos conseguida.<br>";
20
Área de Servicios – Dpto. de Informática Curso de PHP
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1>
<?php
include("conex.phtml");
$link=Conectarse();
$result=mysql_query("select * from prueba",$link);
?>
<TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1>
<TR><TD> Nombre</TD><TD> Apellidos </TD></TR>
<?php
while($row = mysql_fetch_array($result)) {
printf("<tr><td> %s</td><td> %s </td></tr>",
$row["Nombre"],$row["Apellidos"]);
}
mysql_free_result($result);
mysql_close($link);
?>
</table>
</body>
</html>
21
Área de Servicios – Dpto. de Informática Curso de PHP
ejem07d.phtml
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1>
<FORM ACTION="procesar.phtml">
<TABLE>
<TR>
<TD>Nombre:</TD>
<TD><INPUT TYPE="text" NAME="nombre" SIZE="20" MAXLENGTH="30"></TD>
</TR>
<TR>
<TD>Apellidos:</TD>
<TD><INPUT TYPE="text" NAME="apellidos" SIZE="20" MAXLENGTH="30"></TD>
</TR>
</TABLE>
<INPUT TYPE="submit" NAME="accion" VALUE="Grabar">
</FORM>
<hr>
<?php
include("conex.phtml");
$link=Conectarse();
$result=mysql_query("select * from prueba",$link);
?>
<TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1>
<TR><TD> <B>Nombre</B></TD>
<TD> <B>Apellidos</B> </TD></TR>
<?php
while($row = mysql_fetch_array($result)) {
printf("<tr><td> %s</td> <td> %s </td></tr>",
$row["Nombre"], $row["Apellidos"]);
}
mysql_free_result($result);
mysql_close($link);
?>
</table>
</body>
</html>
procesar.phtml
22
Área de Servicios – Dpto. de Informática Curso de PHP
<?php
include("conex.phtml");
$link=Conectarse();
$nombre=$_GET['nombre'];
$apellidos=$_GET['apellidos'];
mysql_query("insert into prueba (Nombre,Apellidos) values
('$nombre','$apellidos')",$link);
header("Location: ejem07d.phtml");
?>
Eliminar registros
Y finalmente, para cerrar el ciclo, nos queda el borrado de registros. El
borrado de registros el uno de los procesos más sencillos.
Para indicar que elemento vamos a borrar hemos usado un enlace a la
página borra.phtml pasándole el ID_Prueba de cada registro, de esta
manera la página borra.phtml sabe que elemento de la tabla ha de borrar.
ejem07e.phtml
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1>
<?php
include("conex.phtml");
$link=Conectarse();
$result=mysql_query("select * from prueba",$link);
?>
<TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1>
<TR><TD> <B>Nombre</B></TD> <TD> <B>Apellidos</B> </TD>
<TD> <B>Borrar</B> </TD></TR>
<?php
while($row = mysql_fetch_array($result)) {
printf("<tr><td> %s</td><td> %s </td><td><a
href=\"borra.phtml?id=%d\">Borra</a></td></tr>",
$row["Nombre"],$row["Apellidos"],$row["ID_Prueba"]);
}
mysql_free_result($result);
mysql_close($link);
?>
</table>
</body>
</html>
23
Área de Servicios – Dpto. de Informática Curso de PHP
borra.phtml
<?php
include("conex.phtml");
$link=Conectarse();
$id=$_GET['id'];
mysql_query("delete from prueba where ID_Prueba = $id",$link);
header("Location: ejem07e.phtml");
?>
Restringir el acceso
En esta sección vamos a explicar cómo podemos restringir el acceso a
según qué páginas, para que solo las personas autorizadas puedan acceder
a ciertas partes del nuestro sitio web.
Atención: El acceso restringido a páginas usando las variables globales
$PHP_AUTH_USER, $PHP_AUTH_PW y $PHP_AUTH_TYPE solo funciona si PHP ha
sido instalado como un módulo de Apache, si ha sido instalado como un CGI
los ejemplos de ésta sección no funcionarán.
Para conseguir la autentificación en las páginas usaremos el sistema de
autentificación del protocolo HTTP, este sistema se basa en las variables
globales $PHP_AUTH_USER y $PHP_AUTH_PW.
$PHP_AUTH_USER. Nombre de usuario introducido.
$PHP_AUTH_PW. Contraseña introducida.
Para que el navegador nos muestre la ventana de petición de nombre de
usuario y contraseña basta con enviar la siguiente cabecera:
if (($PHP_AUTH_USER!="Joe") || ($PHP_AUTH_PW!="123")) {
header('WWW-Authenticate: Basic realm="Acceso restringido"');
header('HTTP/1.0 401 Unauthorized');
24
Área de Servicios – Dpto. de Informática Curso de PHP
Distinción de usuarios
En la anterior página todo el mundo que tenía acceso a la parte
restringida entraba con el mismo nombre de usuario y contraseña, esto
evidentemente no es una buena solución, es mejor que cada persona tenga
un nombre de usuario y contraseña, ya que de esta forma podemos
inhabilitar a un usuario sin ver comprometida la seguridad de nuestro
sitio.
En esta página veremos la forma de realizar esto, teniendo un fichero
separado con los nombres de usuario y las contraseñas válidas. Dicho
fichero podría tener el siguiente formato: nombre_de_usuario|contraseña.
Por ejemplo:
passwords.txt
Joe|1235
Pedro|qwer
Noe|Gty45e
kermit|rwe4v
$fich = file("passwords.txt");
$i=0; $validado=false;
while ($fich[$i] && !$validado) {
$campo = explode("|",$fich[$i]);
if (($PHP_AUTH_USER==$campo[0]) && ($PHP_AUTH_PW==chop($campo[1])))
$validado=true;
$i++;
}
if (!$validado) {
header('WWW-Authenticate: Basic realm="Acceso restringido"');
header('HTTP/1.0 401 Unauthorized');
25
Área de Servicios – Dpto. de Informática Curso de PHP
SESIONES
Introducción
En los programas que hemos visto hasta ahora, hemos utilizado variables
que sólo existían en el archivo que estaba siendo ejecutado. Cuando
cargábamos otra página distinta, los valores de estas variables se
perdían a menos que nos tomásemos la molestia de pasarlos por la URL o
inscribirlos en las cookies o en un formulario para su posterior
explotación. Estos métodos, aunque útiles, no son del todo prácticos,
por ejemplo en el caso que una variable sea utilizada en varios scripts
diferentes y distantes los unos de los otros.
Podríamos pensar que ese problema puede quedar resuelto con las cookies
ya que se trata de variables que pueden ser invocadas en cualquier
momento. El problema, es que las cookies no son aceptadas ni por la
totalidad de los usuarios ni por la totalidad de los navegadores.
Nos resulta necesario el poder declarar ciertas variables que puedan ser
reutilizadas tantas veces como queramos dentro de una misma sesión.
Imaginemos un sitio multilingüe en el que cada vez que queremos imprimir
un mensaje en cualquier página necesitamos saber en qué idioma debe
hacerse. Podríamos introducir un script identificador de la lengua del
navegador en cada uno de los archivos o bien declarar una variable que
fuese valida para toda la sesión y que tuviese como valor el idioma
reconocido en un primer momento.
Pensemos también en un carrito de la compra de una tienda virtual donde
el cliente va navegando por las páginas del sitio y añadiendo los
artículos que quiere comprar a un carrito. Este carrito podría ser
perfectamente una variable de tipo array (tabla) que almacena para cada
referencia la cantidad de artículos contenidos en el carrito. Esta
variable debería ser obviamente conservada continuamente a lo largo de
todos los scripts.
Este tipo de situaciones son solventadas a partir de las variables de
sesión. Una sesión es considerada como el intervalo de tiempo empleado
por un usuario en recorrer nuestras páginas hasta que abandona nuestro
sitio o deja de actuar sobre él durante un tiempo prolongado o hasta que
cierra el navegador.
PHP nos permite almacenar variables llamadas de sesión que, una vez
definidas, podrán ser utilizadas durante este lapso de tiempo por
cualquiera de los scripts de nuestro sitio. Estas variables serán
especificas del usuario de modo que varias variables sesión del mismo
tipo con distintos valores pueden estar coexistiendo para cada una de las
26
Área de Servicios – Dpto. de Informática Curso de PHP
Ejemplo1
Registrando una variable
<?php
session_register("contador");
$HTTP_SESSION_VARS["contador"]++;
?>
Este ejemplo podría escribirse de la siguiente forma, si habilitamos la
opción register_globals en el archivo php.ini
<?php
session_register("contador");
$contador++;
?>
Función Descripción
27
Área de Servicios – Dpto. de Informática Curso de PHP
identificador.
Guarda el identificador de
$PHPSESSID
sesión del usuario.
Obtiene o asigna el nombre a la
Session_name
sesión actual.
Ejemplo 2:
El siguiente, es un ejemplo clásico de utilización de una sesión: un
contador. Este contador deberá aumentar de una unidad cada vez que
recargamos la página o o presionamos el link:
<?
session_name('misesion');
session_register('contador');
?>
<HTML>
<HEAD>
<TITLE>contador.php</TITLE>
</HEAD>
<BODY>
<?
If (isset($_SESSION['contador'])==0)
{$_SESSION['contador']=0;}
++$_SESSION['contador'];
?>
<a href="contador.php">Contador</a><br>
Has recargado esta página <?php echo $_SESSION['contador'];?> veces
<?php echo 'Ahora el nombre es '.session_name().' y la sesión
'.$_REQUEST['misesion'].'<br>'; ?>
</BODY>
</HTML>
28
Área de Servicios – Dpto. de Informática Curso de PHP
Inicialización de la sesión
Para utilizar sesiones en PHP lo primero es inicializarlas. Podemos
hacerlo explícitamente, mediante la función session_start(), o al
registrar una variable en una sesión mediante
session_register('miVariable'). En ambos casos se crea una nueva sesión,
si no existe, o se retoma la sesión actual. Veamos un sencillo ejemplo:
<?php // Manual de PHP de WebEstilo.com
session_start();
echo "He inicializado la sesión";
?>
session_start();
echo 'La sesión actual es: '.session_id();
?>
Ejemplo práctico
session_register('contador');
echo '<a href="'.$PHP_SELF.'?'.$SID.'">Contador vale:
'.++$_SESSION['contador']. '</a>';
?>
29
Área de Servicios – Dpto. de Informática Curso de PHP
La asignación del nombre de sesión debe realizarse antes que ninguna otra
función con sesiones, antes que session_start() o session_register().
Error común
Uno de los errores más comunes cuando se utilizan sesiones es dejar
líneas en blanco antes de la inicialización de PHP o enviar alguna salida
a la pantalla. Para probarlo crea una línea en blanco o con cualquier
cosa antes de <?php.
Si tienes los cookies activados, te encontrarás un error de este tipo:
Warning: Cannot send session cookie - headers already sent by (output
started at /home/session.php:2) in /home/session.php on line 4
PHP está informando de que no puede activar los cookies en el navegador
del usuario, porque las cabeceras ya han sido enviadas. Simplemente por
la existencia de una línea en blanco. Como medida práctica, no dejes
espacios ni antes del inicio del script, ni después de la finalización.
Te ahorrará muchos disgustos.
Carrito de compra
Si después de todo lo comentado aún no entiendes para que sirven las
sesiones, veamos un ejemplo práctico. Imagina que quisieras crear un
sistema de cesta de la compra, en su forma básica podría ser algo así:
<?php // Manual de PHP de WebEstilo.com
session_start();
session_register('itemsEnCesta');
$item=$_POST['item'];
30
Área de Servicios – Dpto. de Informática Curso de PHP
$cantidad=$_POST['cantidad'];
$itemsEnCesta=$_SESSION['itemsEnCesta'];
if ($item){
if (!isset($itemsEnCesta)){
$itemsEnCesta[$item]=$cantidad;
}else{
foreach($itemsEnCesta as $k => $v){
if ($item==$k){
$itemsEnCesta[$k]+=$cantidad;
$encontrado=1;
}
}
if (!$encontrado) $itemsEnCesta[$item]=$cantidad;
}
}
$_SESSION['itemsEnCesta']=$itemsEnCesta;
?>
<html>
<body>
<tt>
<form action="<?=$PHP_SELF."?".$SID?>" method="post">
Dime el producto <input type="text" name="item" size="20"><br>
Cuantas unidades <input type="text" name="cantidad" size="20"><br>
<input type="submit" value="Añadir a la cesta"><br>
</form>
<?
if (isset($itemsEnCesta)){
echo'El contenido de la cesta de la compra es:<br>';
foreach($itemsEnCesta as $k => $v){
echo 'Artículo: '.$k.' ud: '.$v.'<br>';
}
}
?>
</tt>
</body>
</html>
31
Área de Servicios – Dpto. de Informática Curso de PHP
SEGURIDAD
PHP es un potente lenguaje e interprete, que puede estar instalado tanto
en el servidor web como un modulo o como un binario CGI. PHP permite
acceder a archivos, ejecutar comandos y abrir comunicaciones de red en el
servidor. Todas estas características hacen que lo que se ejecute en el
servidor web sea inseguro por defecto. PHP ha sido diseñado para ser un
lenguaje seguro, solo es necesaria una correcta selección de las opciones
de configuración para conseguir la exacta combinación de libertad y
seguridad que se necesita.
Ya que existen diferentes modos de utilizar PHP, existen multitud de
opciones de configuración que permiten controlar su funcionamiento. Una
gran selección de opciones garantiza que se pueda usar PHP para
diferentes usos, pero también significa que existen combinaciones de
estas opciones y configuraciones del servidor que producen instalaciones
inseguras. Este capitulo explica las diferentes combinaciones de opciones
de configuración y las situaciones donde pueden ser usadas de manera
segura.
32
Área de Servicios – Dpto. de Informática Curso de PHP
Ejemplo 1:
1. $PHP_AUTH_USER. Nombre de usuario introducido.
Ejemplo 2:
<?php
if(!isset($PHP_AUTH_USER))
{
Header("WWW-Authenticate: Basic realm=\$quot;mi Realm\"");
Header("HTTP/1.0 401 Unauthorized")
echo "Texto para enviar si se utiliza el botón de Cancelar");
exit;
}
33
Área de Servicios – Dpto. de Informática Curso de PHP
else
{
echo " Hola $PHP_AUTH_USER <p>";
echo " Tu contraseña es $PHP_AUTH_PW <p>";
}
?>
Hay que tener mucho cuidado con el orden en el que se envían los
diferentes tipos de cabeceras. Esta cabecera de autentificación, debe ir
siempre delante de la del tipo HTTP/1.0 401.
Ejemplo 3:
<?php
function autentificacion()
{
Header( "WWW-authenticate: basic realm='Sistema de
autentificación'");
Header( "HTTP/1.0 401 Unauthorized");
echo "debe ingresar un usuario y una contraseña válida para
acceder a esta página\n";
exit;
}
if(!isset($PHP_AUTH_USER) || ($SeenBefore == 1 && !strcmp($OldAuth,
$PHP_AUTH_USER)) )
{
autentificacion();
}
Else
{
echo "Welcome: $PHP_AUTH_USER";
echo "Old: $OldAuth";
echo "<FORM ACTION=\"$PHP_SELF\" METHOD=POST>\n";
echo "<INPUT TYPE=HIDDEN NAME=\"SeenBefore\" VALUE=\"1\">\n";
echo "<INPUT TYPE=HIDDEN NAME=\"OldAuth\"
VALUE=\"$PHP_AUTH_USER\">\n";
echo "<INPUT TYPE=Submit VALUE=\"Re Authenticate\">\n";
echo "</FORM>\n";
}
?>
Juan|1235
Pedro|qwer
Nestor|Gty45e
Carla|rwe4v
<?php
34
Área de Servicios – Dpto. de Informática Curso de PHP
if (!isset($PHP_AUTH_USER)) {
header('WWW-Authenticate: Basic realm="Acceso restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Autorización Requerida.';
exit;
}
$fich = file("passwords.txt");
$i=0; $validado=false;
while ($fich[$i] && !$validado) {
$campo = explode("|",$fich[$i]);
if (($PHP_AUTH_USER==$campo[0]) && ($PHP_AUTH_PW==chop($campo[1])))
$validado=true;
$i++;
}
if (!$validado) {
header('WWW-Authenticate: Basic realm="Acceso restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Autorización Requerida.';
exit;
}
?>
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
Ha conseguido el acceso a la <B>zona restringida</B> con el usuario <?php
echo $PHP_AUTH_USER?>.
</body>
</html>
COOKIES
La principal utilidad de las cookies (galletas) es la de solventar el
problema de la falta de estado en la navegación a través de las paginas
web.
Con las cookies, pequeñas porciones de información se quedan registradas
en el navegador permitiendo identificar a este a través de diferentes
páginas de un mismo sitio e incluso durante visitas entre distintos días.
Realmente las cookies no son mas que cadenas de texto que son enviadas
desde el servidor al cliente (navegador) y almacenadas en este, luego el
navegador envía estas cookies al servidor permitiendo así la
identificación del cliente en el servidor.
Funcionamiento
La cookie es enviada al navegador desde el servidor y si este la acepta
permanece en él.
35
Área de Servicios – Dpto. de Informática Curso de PHP
A continuación vamos a ver como usar las cookies para nuestro beneficio.
Cómo usarlas
El manejo de cookies en PHP se realiza mediante el uso de la función
setcookie, esta función esta disponible a partir de la versión 3 de PHP.
int setcookie (string Nombre [, string Valor [, int Expire [, string Path
[, string Dominio [, int Secure]]]]])
Setcookie() define una cookie que es enviada junto con el resto de la
información de la cabecera(header). Las cookies deben ser enviadas antes
de cualquier tag de html, por lo tanto deberemos realizar la llamada a
estas funciones antes de cualquier tag <HTML> o <HEAD>. Esta es una
restricción de las cookies no de PHP.
Todos los argumentos excepto el nombre son opcionales.
• Nombre. Nombre de la cookie. Si creamos una cookie solamente con
el nombre, en el cliente se eliminara la cookie que exista con ese
nombre. También podemos reemplazar cualquier argumento con una
cadena vacía ("").
• Value. Valor que almacenará la cookie en el cliente.
• Expire. El argumento expire es un argumento entero que indica la hora en que
se eliminara la cookie en el formato de hora que devuelven las funciones UNIX
time() y mktime(). Normalmente se usa time() + N. segundos de duración,
para especificar la duración de una cookie.
• Path. Subdirectorio en donde tiene valor la cookie.
• Dominio. Dominio en donde tiene valor la cookie. Si ponemos como dominio
www.domain.com la cookie no se transmite para domain.com, mientras que si
ponemos domain.com la cookie se transmite tanto para domain.com como para
www.domain.com
• Secure. El argumento secure indica que la cookie solo se transmitirá a través de
una conexión segura HTTPS.
Ejemplo
setcookie("usuario", "Luis", time()+3600,"/","webestilo.com");
En este ejemplo establecemos una cookie de nombre usuario que contiene el
valor Luis, que dura 1 hora (3600 segundos) válida para todo el dominio
webestilo.com
36
Área de Servicios – Dpto. de Informática Curso de PHP
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de uso de cookie</H1>
Introduzca su nombre:
<FORM ACTION="procesar_cookie.phtml" METHOD="GET">
<INPUT TYPE="text" NAME="nombre"><BR>
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
</body>
</html>
37
Área de Servicios – Dpto. de Informática Curso de PHP
INTRODUCCIÓN _________________________________________________________________ 1
ALGUNAS VENTAJAS DE PHP ______________________________________________________ 2
FUNCIONAMIENTO DE PHP _______________________________________________________ 2
SINTAXIS BÁSICA ________________________________________________________________ 3
Delimitadores de script ____________________________________________________________ 3
Separación de instrucciones _______________________________________________________ 3
Comentarios _______________________________________________________________________ 3
Primer ejemplo ____________________________________________________________________________ 3
TIPOS DE DATOS SOPORTADOS POR PHP _____________________________________________ 3
Array ______________________________________________________________________________ 4
Arrays Multidimensionales _________________________________________________________ 5
OPERADORES EN PHP ___________________________________________________________ 5
Operadores aritméticos ____________________________________________________________ 5
Operadores de asignación__________________________________________________________ 6
Operadores lógicos ________________________________________________________________ 6
Operadores condicionales__________________________________________________________ 6
ESTRUCTURAS DE CONTROL EN PHP _______________________________________________ 6
IF...ELSE___________________________________________________________________________ 6
IF...ELSEIF...ELSE __________________________________________________________________ 7
SWITCH...CASE...DEFAULT _________________________________________________________ 7
WHILE_____________________________________________________________________________ 8
DO...WHILE________________________________________________________________________ 8
FOR _______________________________________________________________________________ 9
FUNCIONES ____________________________________________________________________ 9
Parámetros _______________________________________________________________________ 10
Parámetros por defecto ____________________________________________________________________ 10
Parámetros por referencia __________________________________________________________________ 10
Variables en funciones ____________________________________________________________ 11
Variables locales __________________________________________________________________________ 11
Variables estáticas ________________________________________________________________________ 11
Acceso a variables globales _________________________________________________________________ 11
Retorno de un valor _______________________________________________________________________ 12
Evaluación de variables con eval _____________________________________________________________ 12
Variables variables ________________________________________________________________________ 13
Die, exit _________________________________________________________________________________ 13
Librerias__________________________________________________________________________ 13
Usando fecha y hora en PHP ________________________________________________________________ 15
FORMULARIOS _________________________________________________________________ 16
Envío y recepción de datos ________________________________________________________ 16
Método GET y POST _______________________________________________________________ 17
38
Área de Servicios – Dpto. de Informática Curso de PHP
39