Está en la página 1de 212

PRACTICA #10

CRON
Objetivo: El alumno conocer la funcionalidad
de un eran y realizar su implementacin.

CRONES

Automatizacin de tareas crunes


E pro g.rmna

e ron

(o s]mplemeJ1te ero ru) es m1 demo1no que a a permlitil a los usuarios=

, e ldell emeJ te t aimbiell a] aidmfnstrador = ej ernt ar ordenes a ]nt,en allos periodieos o eJ1 m1
determ]1iatdo momenUl. Este demonio se i a de ]11, oc:n aJl arratJ1rar b maiqmIJta

mia m

ca

,. e.z. 1 o ] ai1 de existir 1 a.rias cop]as d.el prog.rama en m.emoria S]multaneam.eJ"1te o el sin ema
11

plrnede desordeJl:n"se.

.:' r . :n

d despierta mia ,. ez cada m1lrnt o lee b f1formacion de los arrdn' os co11teJli.do s eJ1

arls,poo: ero /ero

Es os ardn os han sido cread.os b1eJ1 por los lrnsnru.i.os o por e]

. a.

aidm]mstrador ut]lizm1do e comando crontah con bs op or es adecuadas.

Crontab
,. oio puede existir oo arcll], o e r on ah por usuario= que estMai a1 Jmacel1ado el1 eI dileci orio
.

m1terior. col1 llmhre e]


.

Cada IB]ea de

m1

deI creado1.

arcl]], o crontJb ha. de col1tei]er

detennihllda. ooh1 m1 onnato simibr a::

lllll

patron de tiempo

w a

ordell

Donde

e .

e ,

e 3

c4

y e 5 son Ios cinco campos resen ad.os para ]ndlicai.r e1 :mom.ent.io de la

ejj eruci. n y orden es e nom.lbre del comando a ej erutar. Cada campo puede ser
ent.ero denlro de1 raiJi g.o permi11 do=

ml.

W1

nmero

as erisco (]n. dlican.do qJll!.e l.l o di.os Ios ' a.lores son

IegJt]m.osl o l!llna list de nmneros e.nteros sep.nados por comas o guiones_ El s gmficado de
estr.os C3!.lll1. pos es e1 silg.rrilent.e:

1 u..d"'. c a..d.or

Ca.mpo

el

tinutos

c2

Hm.as

c3
c4

D1a
Mes

c5

D 1as-semana_

Ra.u.1go
G-59'
Q- 3
-3
_ .
Qt _

_,

Sil se especifica en e1 campo S e1 ,, alor O= est.e se ej ecul.ara cad.a semana .


Sil se especifica en cua.Jlq_mer campo d

,, a.1or

A f1dilcar 2, S, 12 . se especifi.c:m m].nutos.

"=

= este se ej erut.na todo e1 l ilem.po_

Ejemplo

Crear un eran, el cual se desea que se ejecute a


las 12:30 hrs. del viernes 9 del mes de
septiembre. La tarea que debe realizar: es la
busqueda del usuario root en el archivo
/etc/passwd y lo direcciona hacia un archivo
ubicado en /etc/home llamado root.txt (solo la
linea correspondiente del usuario root)

[root@maquina IV]# crontab -e


30 12 9 9 5 grep root /etc/passwd >> /home/root.txt

os

101

ah' s de usuario.

En mn sistema Linm

ada nsmari tendra su pr . pi

c.

induid

t.

P r supuen

en el cr ntao de cada usmari sol se pennitira ej e cut u t a1eas para las que ese m.smari o tenga
pennis s r ej empl mn usmari o qne n sea
=

tn

p dra apag.a1 el sistema ..

IVIa.11ejo (lel coma1t(lo


Par.a

a 1r1 o

er La fnnci011alidad de

t ab.

ero

-:ab . el comando nos ofrece. de manera. b.asi ca. Las

si gnientes posibilidades:
,

' er oueska ahla de area,s programadas

E su o lo :haremos con :
[roo.t .maquina
,

--

1 # crontab -1

Ecr :ar oueska taba de tareas programas.

P.ar.a editar nnesliras 1I areas


[ro.o.t .maquina

--

, ro

.=

ej ecnlI aremos

] # crontab

-e

Lo que se obtiene es. un editor (el que h ayamos. definido en La ' ari.able de enl:on10 -- =

en el que podremos .aiiadir lineas .al .ardli' o de cro1u ab una por cada tarea que deseemos
=

pro gr.amar.

R)

Borrar nuestra ah a de areas :p rogra1nas.


Podremos. borr.a.I toda nuestra programacin de tareas. con ::

[root.-.maquina

.....

] ti crontab -r

Ahora eam os algnnas notas al respecto :


[_

P.a.I.a crea.I nn .a.Icl]i,. o cron sim plem ente se realiza la siguiente .accion ::

[root "maquina
_

.....

] ti crontab nombre archivo

P.a.I.a correr nn programa se dan permisos de ej ecucion ) se especifica la mta


.absoluta del scnpn _

3_

Los us11 a.Iios listados en el .a.Icl]L o /et cro o .a 1011 pueden hacer uso del cron_ P.a.I.a
que nn usuario utilice los c1ones se debe de realiza.I la signiente instrn.ccion :

[root maquina

.....

] ti crontab -u usuario

Los usn,arios listados en el .a.Id]h o te ero .de y no pueden bacer uso del

CIOIL

EJERCICIOS
l.

Realizar un eran para apagar el equipo a las


siete y media de la maana del maana(ojo,
hay que ser root para ejecutar esto):
30 7 28 4 *

/sbin/shutdown -h now

2.

Para hacer un .tar.gz de un directorio


(como backup, por ejemplo), todos los das
laborables a las 14:00 horas.

O 14

1-5

tar -czf /home/backups/backup.tar.gz


/usr/importante/
*

3.

Para que, cada hora, los sbados y domingos,


se guarde en un archivo de log, las conexiones
de red abiertas en el sistema:

O * * * 6, 7

date>> /var/log/net_con.log;
netstat -t>> /var/log/net_con.log

4.-

Implementar un eran, el cual permita saber


los usuarios conectados al sistema cada
viernes a las 20 horas y que muestre en un
archivo llamado access.txt slo los siguientes
datos:
- Login
- Desde donde est conectado
- Hora de conexin
- Que tarea esta realizando (Investigar como
hacerlo)

Entregar bitcora de la prctica y subir el


archivo en EDUCAFI.

Expresiones regulares

Introducc in a lo
./

Filtros

Programas de UNIX que leen una entrada, realizan una


transformacin y escriben una salida .

./

Ejemplos:
v"' grep

y tail

Seleccionan parte de una entrada

v"' sort

Clasifica la entrada

y"' wc

Cuenta la entrada.

v"' etc.
./

Filtros de Datos o Filtros Programables


v"' sed

Editor de Flujo

v"' awk

Filtro programable con sintaxis similar al C

Las expresiones regulares se usan para


analizar el contenido de cadenas de
caracteres por medio de patrones.
Las expresiones regulares proveen una
manera muy flexible de buscar o reconocer
cadenas de texto y se utilizan con frecuencia
por ejemplo en los comandos
como grep, sed, awk, find, y en el
propio bash de Linux.

Los metacaracteres son ciertos caracteres con


un significado especfico dentro de una
expresin regular. Estos caracteres tienen un
significado que va ms all del smbolo que
representan y tienen un comportamiento
especial en una expresin regular.

Greo
,
.
$ gre=patron archivos....
./
./

./

El comando grep examina los archivos nombrados (o la entrada


estndar) e imprime cada lnea que contenga un caso de patrn.
Ejemplos:
grep-n variable *.[ch]

Localiza "variable" en archivos


fuentes de e
grep-y mary $HOME/lib/agendaEncontrar el nmero de telfono de
Mary
Comprobar si mary inicio sesin
who 1 grep mary
Is 1 grep-v .c
Archivos que no sean fuentes de C
./
./
./

-n
v
-y

Imprime lo nmeros de lnea


Invierte el sentido de la prueba
Hace indistinto el patrn en maysculas o minsculas

Exnre
ione
Reaulares
GrEP (y toaos los filtros) manejarl'patrones mucho ms intricados
./

./

./

denominados Expresiones Regulares .


Las expresiones regulares se especifican dando un significado especial
a ciertos caracteres.
Algunos metacaracteres:
"
Ancla el patrn al inicio de la lnea
Ancla el patrn al final de la lnea.
$
[a-z]
Rango (cualquier minscula)

./

Ojo!!: ["0-9] Complemento del Rango (cualquier caracter menos un dgito)

Se acopla con cualquier caracter (Similar al ? para el Shell)


Algunos ejemplos:
$ Is-1 1 grep'"d'
Lista los nombres de directorios
$ Is-1 1 grep'" ....... rw' Lista los archivos que otros pueden leer y
escribir.

/etc/pas wd

Expresiones Regulares (cont)


./

Operador cerradura '*'


Se aplica al caracter o metacaracter anterior (incluyendo un rango), y en conjunto
concuerdan con cualquier nmero de acomplamientos sucesivos del caracter o
metacaracter.

./

Ejemplos:

x* Concuerda con una secuencia de x lo ms larga posible.


[a-zA-Z]*
Concuerda con una cadena alfabtica de cualquier longitud
.*
Concuerda con cualquier cosa hasta una nueva lnea
.*x Concuerda con cualquier cosa hasta la ltima x del rengln

./

Advertencias:

* Se aplica exclusivamente a un caracter. fg* reconoce a una f seguida de varias


g, y no una secuencia como fgfgfgfg.
* Reconoce cero, una o varias concordancias del caracter. Si queremos que
reconozca por lo menos un caracter tendremos que duplicarlo. Por ejemplo para
reconocer una cadena de letras la expresin correcta ser
[a-zA-Z] [a-zA-Z]*
Ninguna expresin regular de grep reconoce el caracter nueva lnea.

ort
./

Por default, clasifica su entrada por renglones en orden ASCII. Algunas


de sus opciones:
-f
Vuelve equivalentes maysculas y minsculas.
-d Orden de diccionario. Ignora todos los caracteres
excepto letras, dgitos y blancos.
-n Comparacin numrica
Revierte el sentido de la comparacin
-r
-o Especifica un nombre de archivo para la salida
-u Suprime las lneas repetidas

./

Ejemplos:
Is 1 sort-f
Is-s 1 sort-n

Clasifica los archivos por orden alfabtico


Clasifica los archivos ms pequeos primero

Is-s 1 sort-nr

Clasifica los archivos ms grandes primero

ort (Campo )

Se le puede indicar a sort que dirija solo su atencin a


campos especficos. La notacin +m significa que la
comparacin omite los primeros m campos; +O es el
inicio de la lnea. As por ejemplo:
Is -11 sort +3nr

Clasifica por conteo de bytes


(primero el ms grande)

who 1 sort +4n

Clasifica por tiempo desde inicio de sesin


(primero el ms antiguo)

filtro
./

El comando tr translitera los caracteres de su entrada.


Uno de los usos ms comunes es la conversin de maysculas y
minsculas.

./

$ tr a-z A-Z

Convierte minsculas en maysculas

$ tr A-Z a-z

Convierte maysculas en minsculas

Uniq
Elimina renglones duplicados

./

dd
Bastante distinto a lo visto hasta ahora. Suele emplearse para manejar datos
en bruto y sin formato. Posee recursos para transformar de ASCII a EBCDIC
y para manejar datos binarios.

ed
./

Lee un rengln a la vez a partir de los archivos de entrada, aplica los comandos de
la lista, por orden a cada rengln y escribe su forma editada en la salida estndar.

./

Sintaxis: sed'lista de comandos' archivo ...

./

Por ejemplo:
./

./

sed 's/UNIX/UNIX (TM)/g' archivos ... > output

Advertencia: sed no altera los contenidos de sus archivos de entrada. Escribe


sobre la salida estndar por lo que archivos originales permanecen intactos.

./

Otro ejemplo:
./ who

1 sed 's/ .* 11"

Trae solo los nombres de usuarios y la hora de inicio de sesin.


./

sed 's/1'/->/'

sed '/./s/1'/->/' $*

Pone un tabulador al inicio de cada lnea. La segunda versin solo lo hace en aquellos
renglones que no sean slo un caracter nueva lnea.

ed (Cont)

Por defecto realiza la impresin automtica de la salida. La opcin-n desactiva


la salida la cul debe ser explicitada mediante el comando p. Por ejemplo:

./$ sed -n '/patrn/p'

hace lo mismo que grep

./$ sed -n '/patrn/!p'

hace lo mismo que grep -v

Otros ejemplos:
Agrega un caracter nueva lnea al final de cada renglon

./$ sed 's/$/\


> /'

haciendo que la salida tenga doble espacio .

./$ sed 's/[ ->][ ->]*/\


> /'

Reemplaza cada cadena de blancos o tabs por un nueva lnea

por lo que divide cada palabra de la entrada en un rengln .

./$ sed -n '20,30p'

Imprime slo las lneas 20 a 30 .

./$ sed '1,10d' Borras las lneas 1 a 10 (=a tail +11)


./$ sed '1,/A$/d'

Borra hasta la primera lnea en blanco inclusive

./$ sed '$d'

Borra la ltima lnea

awk

Awk es parecido al sed pero con una sintaxis ms similar al lenguaje C.


Sintaxis: $ awk'programa' archivos...
La sintaxis del programa es:
patrn { accin}
patrn { accin}

Awk lee la entrada en los nombres de archivo un rengln a la vez. Cada rengln
se compara con cada patrn en orden, para cada patrn que concuerde con el
rengln se efecta la accin correspondiente.

Al igual que sed, awk no altera los archivos de entrada.

Los patrones pueden ser expresiones regulares exactamente como en egrep,


aunque tambin pueden ser condiciones ms complejas que recuerdan ms al
lenguaje C.

awk (cont.)
./

Ejemplos:
awk'/expresion regular/ { print }' archivos

./

Hace lo que egrep

El patrn y la accin son opcionales.


Si se omite la accin, la accin por default es imprimir la lnea.
Si se omite el patrn, la parte de accin se hace para todas la lneas de la
entrada.

./

Al igual que en sed los comandos de awk pueden estar en un


archivos separado mediante la siguiente sintaxis:
$ awk-f cmdfile archivo ...

awk - Campo
./

./

Awk divide cada rengln de entrada automticamente en campos (cadenas de


caracteres que no sean blancos, separados por blancos o tabuladores.)
Por ejemplo la salida de who tiene 5 campos:
$who

./

carlostty2

Sep 1411:53

maria tty3

Sep 1411:27

Awk llama a los campos $1, $2, ... , $NF. NF es una variable cuyo valor es igual al
nmero de campos. En este caso NF = 5 en ambos renglones. Notese la diferencia
entre NF-nmero de campos- y $NF-el ltimo campo del rengln-.
En awk, a diferencia del Shell, slo los campos empiezan con $, las variables no
tienen'adornos' .

./

Por ejemplo:
./

$ du -a 1 awk '{ print $2 }'

Excluye los tamaos deja slo los nombres de


archivos.

awk - Campo (cont.)


./

Awk normalmente supone que el espacio en blanco (cualquier


nmero de blancos y tabuladores) separa los campos, pero el
separador puede cambiarse a cualquier caracter. Una manera de
hacerlo es recurrir a la opcin -F (mayscula) de la lnea de
comandos. Por ejemplo:
$ awk -F: '{ print $1 }' /etc/passwd

Imprime slo los nombres de


usuarios del /etc/passwd

awk

lmpre ion

La variable NR es el nmero del "registro" o lnea actual.


$ awk'{ print NR $0 }'
Imprime el nmero de lnea seguido de la lnea completa. El campo $0 es la
lnea entera, sin cambios.

En una accin print, los elementos separados por comas se imprimen


separados por el separador de salida (Por default el blanco.)

La proposicin printf permite un control completo sobre la salida. (similar al C)


$ awk'{ printf "0/o4d 0/os\n", NR, $0}'
0/o4d especifica un entero decimal (NR) en un campo de 4 dgitos de ancho,
0/os especifica una cadena de caracteres ($0) y
\n un caracter nueva lnea. (Printf no imprime ni blancos, ni nuevas lneas por
default).

Ww-F $2t/$lat"J S
./

Busca los usuarios sin contrasea.


Otras formas de obtener el mismo resultado:
./
./
./

./

./

./

./

$2 - 11'$/
$2 !- /./
length($2) = = O

El segundo campo concuerda con la cadena vaca.


El segundo campo no concuerda con cualquier caracter.
La longitud del segundo campo es cero.

El smbolo - indica concordancia con una expresin regular y !- significa "no


corresponde". La expresin regular debe estar encerrada entre diagonales.
se vale de la misma convencin que el Shell para los comentarios. El smbolo
# indica el inicio de un comentario.
La funcin substr(s,m,n) produce la subcadena se s que comienza en la posicin m
y mide n caracteres de largo.
El
proporciona dos Patrones especiales BEGIN y END. Las acciones de BEGIN
se realizan antes del primer rengln, y las acciones de END se efectan luego de
ser procesado el ltimo rengln.

Awk

Awk

'f'!w'N;-% fJ prrl}P I O Despliega si hay un nmero par de campos


./

$ awk'length($0) > 72 { print "Rengln", NR, "muy largo:", substr ($0, 1,50)}'

./

$ date
Thu Aug 2912:17:01 EDT 2005
$ date 1 awk'{ print substr($4, 1, 5)}'
12:17

./

$ awk 'BEGIN {FS = ":"}


>

./

Nuevamente Busca usuarios sin contrasea

$2 == "" ' /etc/passwd

awk'END { print NR }' ...

ldem wc-1

./

./
./

./

awk Op racion s
Aritmtica

awk tambin puede realizar clculos sobre los datos de entrada. Es muy sencillo
contar cosas, hacer sumas, sacar promedios y otras operaciones afines. Por
ejemplo, para sumar todos los nmeros de la primera columna:
{ s = s + $1}
END
{ print s}
Si modificamos la ltima lnea del programa por
END
{ print s, s/NR}
Imprime la suma y el promedio.
La variables se inicializan a cero por default.
Awk ofrece adems los mismos operadores aritmticos abreviados que el lenguaje
C. Por ejemplo: s += $1 es lo mismo que s = s + $1
Ejemplo: # Versin de wc hecha en awk.
# nmero de caracteres
{ ne += length ($0) + 1
nw += NF }
END
{ print NR, nw, ne}

awk - Variables

Las variables tambin pueden guardar cadenas de caracteres.

Las variables de cadena se inicializan con la cadena vaca.

Variables predefinidas en awk


./FILENAME

Nombre del archivo de entrada actual

./FS

Caracter separador de campo (blanco y tab por default)

./ NF

Nmero de campos del registro de entrada

./ NR

Nmero del registro de entrada

./ OFS

Cadena separadora de campo de salida (blanco por default)

./ ORS

Cadena separadora de registro de salida (Nueva lnea por default)

./ RS

Caracter separador de registro de entrada (Nueva lnea por default)

awk - Operadores
./

Operadores de awk (por orden creciente de precedencia)


./= += -= *= /=o
l =

Asignacin

./11

O lgico

Y lgico

./&&

Niega el valor de la expresin

./!
./> >= < <=

!= - !-

Operadores relacionales

- y !- equivalen a correspondencia y no
correspondencia
./nada

Concatenacin de cadenas

./+

ms, menos

./* /o
l

multiplicar, dividir, resto

./++

Incrementar, decrementar (prefijo o postfijo)

awk
./

./

./

./

Control de Flujo

IF (Exactamente igual a la instruccin del lenguaje C). Sintaxis:


if (condicin)
proposicin 1
else
proposicin 2
FOR (Exactamente igual a la del lenguaje C). Sintaxis:
for (expresin 1; condicin ; expresin 2)
proposicin
WHILE (equivalente al for anterior)
expresin 1
while (condicin ) {
proposicin
expresin 2
}
La proposicin next hace que se lea la siguiente lnea de entrada y que se
comparen los patrones para reanudar la ejecucin al inicio del programa. La
proposicin exit origina una transferencia inmediata al patrn END.

Otro ejemplo
El siguiente programa detecta palabras duplicadas sucesivas.
awk'
FILENAME != prevfile { # Nuevo archivo
NR = 1
# Restablecer nmero de rengln
prevfile = FILENAME
}
NF > O {
if ($1 == ultimapalabra)
printf " duplicacin /os, archivo 0/os, lnea 0/od\n", $1, FILENAME, NR
for ( i=2; i <= NF; i++ )
if ( $i == $(i-1) )
printf " duplicacin /os, archivo 0/os, lnea 0/od\n", $i, FILENAME, NR
ultimapalabra = $NF
}' $*
$

Otro ejemplo
El siguiente programa invierte el contenido de todos los renglones
awk '
{ for ( i = NF; i >= 1; i )
printf "0/os ", $i
printf "\n"
}' $*
$

Arreglos
./

./
./
./
./

Awk tambin proporciona arreglos. Ejemplo trivial: Invierte los renglones.


$ cat backwards
# backwards: despliega la entrada en direccin contraria
awk'
{ linea[NR] = $0}
END
{ for ( i = NR; i > O; i - -) print linea[ i ] }' $*
$
Los arreglos no necesitan ser declarados.
El tamao del arreglo est limitado nicamente por la memoria disponible.
Awk soporta arreglos asociativos. Por lo general concebimos subndices de
arreglos como enteros, pero en awk cualquier valor puede servir de subndice.
Por ejemplo, para sumar por nombre 2 columnas del tipo:
Carlos 1000
Martin 2000
Carlos
500
...
. ..
Sandra
800
{ sum [ $1 ] += $2}
END { for (name in sum) print name, sum [name] )

Otro ejemplo

$ cat frecuencia
#frecuencia: muestra todas las palabras utilizadas y su frecuencia
awk' { for ( i = 1; i <= NF ; i++ ) num[$i]++ }
END { for ( palabra in num) print palabra, num[palabra] } ' $* 1 sort +1 -nr
$

uncion s pr d finidas d
awk
./

cos (expr)

Coseno de expr

./

exp (expr)

Exponencia de expr: e elevado a exp

./

getline( )

lee la siguiente linea de entrada; devuelve O si es fin de archivo,

1 de lo contrario
./

index (s1,s2)

Posicin de la cadena s2 en s1; devuelve 1 si no est.

./

int (expr)

Parte entera de expr, truncar hacia O .

./

length (s=

longitud de la cadena s

./

log (expr)

Logaritmo natural de expr

./

sin (expr)

Seno de expr

./

split (s,a,c)

Divide s en a[1] ... a[n] en el carcter c; devuelve n

./

sprintf (fmt, ...)

Da formato a ... segn la especificacin de fmt

./

substr (s,m,n)

Subcadena de n caracteres de s, comenzando en la posicin n

nteraccin con el hell


./

Supongamos que el usuario quiere escribir un programa campo n


que imprime el campo n-esimo de cada rengln de la entrada.
Por ejemplo: $ who 1 campo

Debera desplegar slo el nombre de los usuarios que iniciaron


sesin. Para poder resolver esto pasando un parmetro del shell
al awk:
awk '{ print $'$1' }'

Otra forma de hacerlo (aunque es preferible la anterior):


awk "{ printf \$$1 }"

Pregunta

Ejercicios
1. Crear un archivo diccionario.txt, con todas las palabras (una por lnea) tomadas
de archivos de datos (en castellano) de su Home Directory. El archivo
diccionario.txt debe quedar ordenado, no contener duplicados y todas las
letras debern estar en minsculas.
a) Extraer todas las palabras que empiecen y terminen con vocal.
b) Mostrar el archivo eliminando todas las vocales, estn acentuadas o no.
c) Un diptongo est formado por dos vocales, una fuerte y una dbil, o dos
dbiles. Las vocales fuertes son a, e, o; las vocales dbiles son i, u. La
acentuacin de u o i destruye el diptongo.
i) mostrar todas las palabras con diptongo formado por dos vocales dbiles,
ii) mostrar todos los diptongos con a;
iii) buscar una expresin regular mnima que despliegue todos los diptongos.
d) Mostrar todas las palabras de 3 letras o ms que sean palndromos.

Ejercicios
2. El archivo acceso.lag registra el acceso de los usuarios a un sistema UNIX.
Este archivo cuenta con un rengln por cada uno de los accesos y posee la
siguiente estructura de campos separados por ":"
Usuario
Fecha de Ingreso (Formato: ddmmyyyy)
Hora de Ingreso (Formato: hhmmss-24 horas-)
Direccin IP
Desarrollar comandos que:
a) Muestren el nombre de cada usuario y la cantidad total de accesos
registrados, en orden alfabtico.
b) Extraer del archivo las lneas correspondientes a un usuario particular que
se recibir como parmetro.
c) Agregar dos parmetros opcionales que permitan extraer slo los registros
correspondientes a cierto mes o cierto ao.
d) Extraer del archivo acceso.lag las lneas que correspondan al usuario jperez
rrio:_elopez.

Referencia

www.ucema.edu.ar

Paradigmas de Programacin

Paradigmas de Programacin

Los paradigmas pueden son


considerados como patrones de
pensamiento para la resolucin de
problemas.

Paradigmas de Programacin

Es un modelo bsico de diseo y


desarrollo de programas, que permite
producir programas con unas
directrices especficas.

Paradigmas de Programacin

Hay situaciones donde un paradigma


resulta ms apropiado que otro.
Cuando un lenguaje refleja bien un
paradigma particular, se dice que
soporta el paradigma.

Paradigmas de Programacin

En la prctica un lenguaje que soporta


correctamente un paradigma, es difcil
distinguirlo del propio paradigma, por
lo que se identifica con l.

Clasificacin de paradigmas de
programac1on
.

Paradigma imperativo
Heurstico
Concurrente
Funcional
Lgico
Basado en objetos

Paradigma img
_ _tiv
_o
_ e_ra

__

Son aquellos que facilitan los clculos


por medio de cambios de estado,
entendiendo como estado la condicin
de una memoria de almacenamiento.

Paradigma img
_ _tiv
_o
_ e_ra

__

Los lenguajes estructurados en


bloques, se refieren a los mbitos
anidados, es decir los bloques pueden
estar anidados dentro de otros
bloques y contener sus propias
variables.

Paradigma img
_ _tiv
_o
_ e_ra

__

Los programas escritos en un


lenguaje funcional estn constituidos
nicamente por definiciones de
funciones.
Las funciones no como subprogramas
clsicos de un lenguaje imperativo,
sino como funciones puramente
matemticas.

Paradigma img
_ _tiv
_o
_ e_ra

__

En las que se verifican ciertas


propiedades como la "transparencia
referencial" (el significado de una
expresin depende nicamente del
significado de sus subexpresiones ) , y
por tanto, la carencia total de "efectos
laterales".

Paradigma img
_ _tiv
_o
_ e_ra

__

El objetivo es conseguir lenguajes


expresivos y "matemticamente
elegantes", en los que no sea
necesario bajar al nivel de la mquina
para describir el proceso llevado a
cabo por el programa, y evitando el
concepto de "estado" del cmputo.

Paradigma img
_ _tiv
_o
_ e_ra

__

La secuencia de computaciones llevadas a


cabo por el programa se regira nica y
exclusivamente por la "reescritura" de
definiciones ms amplias a otras cada vez
ms concretas y definidas, usando lo que se
denominan "definiciones dirigidas''.
A este tipo de paradigma de programacin

se le suele llamar algortmico.

Paradigma img
_ _tiv
_o
_ e_ra

__

El paradigma imperativo debe su


nombre al papel dominante que
desempean las sentencias imperativas.
Su esencia es el clculo iterativo, paso a
paso, de valores de nivel inferior y su
asignacin a posiciones de memoria.

Paradigma img
_ _tiv
_o
_ e_ra

__

Caractersticas fundamentales de este


paradigma:

Concepto de celda de memoria


("variable") para almacenar valores.
.

El componente principal de la arquitectura es


la memoria, compuesto por un gran nmero
de celdas donde se almacenan los datos.

Paradigma img
_ _tiv
_o
_ e_ra

__

Operaciones de asignacin.
.

Estrechamente ligado a la arquitectura de la


memoria, se encuentra la idea de que cada
valor calculado debe ser "almacenado", es
decir asignado a una celda.

Paradigma img
_ _tiv
_o
_ e_ra

__

Repeticin.
.

Un programa imperativo, normalmente


realiza su tarea ejecutando repetidamente
una secuencia de pasos elementales, ya
que en este modelo computacional la nica
forma de ejecutar algo complejo es
repitiendo una secuencia de instrucciones.

Paradigma img
_ _tiv
_o
_ e_ra

__

Algunos de los lenguajes imperativos son:

C++
C#

Basic

Java

Peri

Paradigma heurstico

Se denomina heurstica a la
capacidad de un sistema para realizar
de forma inmediata innovaciones
positivas para sus fines.

Paradigma heurstico

Define un modelo de resolucin de


problemas en el que se incorpora
algn componente heurstico, sobre la
base de una representacin ms
apropiada de la estructura del
problema, para su resolucin con
tcnicas heursticas.

Paradigma heurstico

Se puede definir como "aquel tipo de


programacin computacional que
aplica para la resolucin de problemas
reglas de buena lgica, ej. reglas del
pulgar.

Paradigma heurstico

La Programacin Heurstica implica


una forma de modelar el problema en
lo que respecta a la representacin de
su estructura, estrategias de bsqueda
y mtodos de resolucin.

Paradigma Heurstico

Las especificaciones ms relevantes:


.
.
.

Una buena heurstica debe ser simple


Con requerimientos razonables de memoria
Velocidad de bsqueda y que disponga de un buen
criterio de parada que incorpore el conocimiento
obtenido durante la bsqueda.

Paradigma Heurstico

Las especificaciones ms relevantes:


.

La informacin a tratar es fundamentalmente


simblica, inexacta o limitada, "incremental" y
basada en el conocimiento.

Paradigma Heurstico

Las especificaciones ms relevantes:


.

Las especificaciones del problema pueden


ser: de optimizacin o de satisfaccin

Que produzcan una o mltiples soluciones


con tratamiento en tiempo real o no, con
decisin interactiva o no, etc.

Paradigma heurstico

Este tipo de programacin se aplica


con mayor intensidad en el campo de
la 1 nteligencia Artificial (IA).

PARADIGMA FUNCIONAL

El paradigma funcional est basado


en
el
modelo
matemtico
de
composicin
funcional.
En
este
modelo, el resultado de un clculo es
la entrada del siguiente, y as
sucesivamente
hasta
que
una
composicin
produce
el
valor
deseado.

PARADIGMA FUNCIONAL
La programacin funcional incorpora el
concepto de funcin como objeto de
primera clase, lo que significa que las
funciones se pueden tratar como datos
(pueden pasar como parmetros,
calculadas y devueltas como valores
normales, y mezcladas en el clculo
con otras formas de datos).

PARADIGMA FUNCIONAL
En este paradigma el informtico
concibe la solucin como una
composicin de funciones.

La forma en que se especifican las


funciones pueae variar.
Se
pueden
especificar
procedimentalmente
o
matemticamente
mediante
su
definicin, sin secuencia de control.
Un lenguaje funcional es el Lisp

PARADIGMA L OGICO
,

La
Programacin
Lgica
es
un
Paradigma de Programacin basado en
la Lgica.
Los programas construidos un lenguaje
lgico estn construidos nicamente por
expresiones lgicas, es decir, que son
ciertas o falsas, en oposicin a un
expresin interrogativa (una pregunta) o
expresiones imperativas (una orden).

PARADIGMA L OGICO
,

Un ejemplo de lenguaje lgico es


Prolog (Programacin lgica).
Prolog, proveniente del ingls

Programming in Logic, es un lenguaje


lgico bastante popular en el medio de

investigacin en 1 nteligencia Artificial.

PARADIGMA L OGICO
,

Prolog es un lenguaje muy diferente,


tanto de los imperativos como Fortran,
Pascal, C etc. , como de los
funcionales como Lisp.

PARADIGMA L OGICO
,

En Prolog, las cosas son distintas: el orden


de ejecucin de las instrucciones no tiene
nada que ver con el orden en que fueron
escritas.
Tampoco hay instrucciones
propiamente dichas.

de

control

Para trabajar con este lenguaje, un


programador debe acostumbrarse a pensar
de una manera muy diferente a la que se
utiliza en los lenguajes clsicos.

PARADIGMA BASADO EN
OBJETOS

La programacin orientada a objetos


(OOP, por las siglas inglesas de
Object- Oriented Programming) es una
forma de programar que prolifer a
partir de los aos ochenta.

PARADIGMA BASADO EN
OBJETOS

Es un paradigma de programacin
que define los programas en trminos
de "clases de objetos", objetos que
son entidades que combinan estado

(es decir, datos), comportamiento


(esto es, procedimientos o mtodos) e
identidad (propiedad del objeto que lo

diferencia del resto).

PARADIGMA BASADO EN
OBJETOS

La programacin orientada a objetos


expresa un programa como un
conjunto de estos objetos, que
colaboran entre ellos para realizar
tareas. Esto permite hacer los
programas y mdulos ms fciles de
escribir, mantener y reutilizar.

PARADIGMA BASADO EN
OBJETOS

De esta forma, un objeto contiene


toda la informacin, (los denominados
atributos) que permite definirlo e
identificarlo frente a otros objetos
pertenecientes a otras clases (e
incluso entre objetos de una misma
clase, al poder tener valores bien
diferenciados en sus atributos).

PARADIGMA BASADO EN
OBJETOS

Dispone de mecanismos de
interaccin (los llamados mtodos)
que favorecen la comunicacin entre
objetos (de una misma clase o de
distintas), y en consecuencia, el
cambio de estado en los propios
objetos.

PARADIGMA BASADO EN
OBJETOS

Esta caracterstica lleva a tratarlos


como unidades indivisibles, en las que
no se separan (ni deben separarse)
informacin (datos) y procesamiento
(mtodos).

PARADIGMA BASADO EN
OBJETOS

Se requieren de unos mtodos para


poder tratarlos (lo que hace que
ambos conceptos estn ntimamente
entrelazados), el programador debe
pensar indistintamente en ambos
trminos, ya que no debe nunca
separar o dar mayor importancia a los
atributos en favor de los mtodos, ni
viceversa.

PARADIGMA BASADO EN
OBJETOS
Lenguajes orientados a objetos

Entre los lenguajes orientados a objeto


destacan los siguientes:
Ada, C++, C#, JAVA

TAREA

Cules son las principales


diferencias entre la programacin
imperativa y la orientada a objetos?
Subir tarea a EDUCAFI

Lenguaje de programacin PHP

Pginas estticas vs. dinmicas

11

11

Las pginas estticas se ven iguales

para todos los clientes

Las pginas dinmicas se generan

ante los pedidos de cada cliente

Qu

es

PHP?

11

PHP Hypertext Processor

11

Lenguaje de programacin Interpretado

11

Ejecutable del lado del servidor

11

Heredero de C++

11

Embebido en HTML

11

De propsito general

11

Orientado a programacin Web

11

Software Libre

Variables en PHP
11

No tienen tipo de datos definido

11

No se declaran

Empiezan en $
- Ejemplo: $nombre, $edad
-$nombre= "Mauro"
-$edad= 26

Ejemplo de PHP con HTML


<html>
<head>
<title><?php echo "MiPagina"; ?></title>
</head>
<body>
<p><?php echo "Hola Mundo!"; ?></p>
</body>
</html>

Sintaxis bsica

PHP es sensible a las maysculas


Cmo se incrusta en la pgina web?
<?PHP

. . .

?>

recomendado, siempre disponible


<?=

expresin

?>

equivale a <? echo expresin ?>

Las instrucciones se separan con un ; como en C. La marca


final ?> implica un ;
Comentarios: como en C, /* . . . */ (varias lneas ) y // (una lnea)
/* Comentario de
varias lneas */
print "hola"; // Comentario de una lnea

Sintaxis bsica

Para imprimir: ec h o y p ri nt
echo: muestra una o ms cadenas
echo cadena 1 [, cadena2 ];
.

e ch o " H o l a mundo " ;


e ch o " H o l a " ,

"mundo " ;

print: muestra una cadena


print cadena;
p r i n t " H o l a mundo " ;
print

"Hola "

"mundo " ;

Sintaxis bsica

Ejemplo:
< HTML >
< H E AD>
<TI TL E > P r ogr ama e n P H P < / T I TL E >
< / HEAD>
< B ODY>
< ? PH P
print
?>
< / BODY>
< / HTML >

( " < P >H o l a mundo< / P > " ) ;

Sintaxis bsica

Uso de \n para generar cdigo HTML legible


a) Sin \n
Cdigo PHP

print

( "<P>Prrafo 1 < / P>" ) ;

print

( "<P>Prrafo 2 < / P>" ) ;

Cdigo HTML

< P > P r r a f o 1 < / P >< P > P r r a f o 2 < / P >

Salida

Prrafo 1
Prrafo 2

Sintaxis bsica

Uso de \n para generar cdigo HTML legible


b) Con \n
Cdigo PHP

Cdigo HTML

print

( "<P>Prrafo 1 < / P> \n" ) ;

print

( "<P>Prrafo 2 < / P> \n" ) ;

<P>Prrafo 1 < / P>


<P>Prrafo 2 < / P>

Salida

Prrafo 1
Prrafo 2

Sintaxis bsica

Eje rc ic i o 1 : p rog ra m a q u e m u estra u n mensaje

llutra cmo incrustar cdigo PHP en un documento HTML


y viceversa

Sintaxis bsica

Inclusin de ficheros externos:


-

i ncl ude()
requ i re()

Ambos incluyen y evalan el fichero especificado


Diferencia: en caso de error include() produce un warning y
require() un error fatal
Se usar require() si al producirse un error debe interrumpirse la
carga de la pgina
Ejemplo:

Sintaxis bsica
<HTML>
<HEAD>
<TITLE>Ttulo</TITLE>
<?PHP
// Incluir bibliotecas de funciones
require

("conecta.php");

require

("fecha.php");

require

("cadena.php");

require

("globals.php");

?>
</HEAD>
<BODY>
<?PHP
include

("cabecera.htrnl");

?>
// Cdigo HTML

PHP

<?PHP
include
?>
</BODY>
</HTML>

("pie.htrnl");

Tipos de datos

PHP soporta 8 ti pos d e d atos p ri m itivos :


-

Tipos escalares: boolean, integer, double, string


Tipos compuestos: array, object
Tipos especiales: resource, NULL

El tipo de una variable no se suele especificar. Se decide en


tiempo de ejecucin en funcin del contexto y puede variar
Funciones de inters:
-

La funcin gettype() devuelve el tipo de una variable


Las funciones is_type comprueban si una variable es de un tipo
dado:
is_array(), is_bool(), is_float(), is_integer(), is_null(),
is_numeric(), is_object(), is_resource(), is_scalar(),
is_string()
La funcin var_dump() muestra el tipo y el valor de una variable.
Es especialmente interesante con los arrays

Tipos de datos

Tipo i nteg e r (nmeros enteros)


-

'

'

Tipo d o u b l e (nmeros reales)


-

27 -5 o
1

2 34, -5 . 33

Tipo boo lean (lgico)


-

Valores: true, false (insensibles a las maysculas)


El O y la cadena vaca tienen valor false

Tipos de datos

Tipo string:
Las cadenas se encierran entre comillas simples o dobles:

'simples': ad m ite los caracteres de escape \' (comilla simple) y \\


(barra). Las variables N O se expanden
"d obles": ad m ite ms caracters de escape, como \n, \r, \t, \\, \$,
\". Los nombres de va riables S I se expanden
Ejemplos:
$ a = 9;
print

' a va l e

$ a \n' ;

11 mu e s t r a a vale $a\n
p r i n t " a va l e

$ a \n";

11 mu e s t r a a vale 9 y avan z a una l n e a


p r i n t " < I MG S RC = ' l ogo . gi f ' > " ;

11 mu e s t r a

<IMG

SRC='logo.gif'>

p r i n t " < I MG S RC = \ " l ogo . gi f \ " > " ;

11 mu e s t r a

<IMG

SRC="logo.gif">

Acceso a un carcter de la cadena:

La fo rma es $in icial = $nombre{O};

Variables

Las variables siempre van precedidas de un $


El nombre es sensible a las maysculas
Comienzan por letra o subrayado, seguido de letras, nmeros o
subrayado
Variables predefinidas:
$GLOBALS, $_SERVER, $_GET, $_POST, $_COOKIES, $_FILES,
$_ENV, $_REQUEST, $_SESSION

mbito: globales al fichero (excepto funciones) o locales a una


funcin
Ejemplo:
$ va l o r

5;

p r i n t " E l va l o r e s :

"

p r i n t " E l va l o r e s :

$ va l o r \ n " ;

Re s u l t a do :
E l va l o r e s :

$ va l o r

" \n";

/ / oj o :

c omi l l a s dob l e s

Variables

Variables variables
-

Se pueden crear nombres de variables dinmicamente


La variable variable toma su nombre del valor de otra variable
previamente declarada
Ejemplo:
$a =

"hol a " ;

$$a =

" mundo " ;

print

" $ a $ ho l a \ n " ;

print

" $ a $ {$ a} " ;

Re s u l t a do :
h o l a mundo
h o l a mundo

Variables

Ejemplo de variables variables: pgina internacionalizada (1)


< ? PH P
$ me n s a j e e s = " H o l a " ;
$ me n s a j e e n= " H e l l o " ;
$ i di oma =
$ me n s a j e =

"
"
es ;

" me n s a j e

"

$ i di oma;

p r i n t $ $ me n s a j e ;
?>

----------------

.'] Variables variables


B_rchivo

dicin

Y...er

- Microsoft 1 nte r ne. .


Eavoritos

Vnculos

Hola
Listo

Intranet local

.
....
.

Variables

Ejemplo de variables variables: pgina internacionalizada (2)


< ? PH P
$ me n s a j e e s = " H o l a " ;
$ me n s a j e e n= " H e l l o " ;
$ i di oma =
$ me n s a j e =

"
"
en ;

" me n s a j e

"

$ i di oma;

p r i n t $ $ me n s a j e ;
?>

----------------

.'] Variables variables


B_rchivo

dicin

Y...er

- Microsoft 1 nte r ne. .


Eavoritos

Vnculos

Hello
Listo

Intranet local

.
....
.

Constantes

Definicin de constantes:
de f i n e

( " C ON S TANTE " ,

"hola" ) ;

p r i n t C ON S TANTE;

No llevan $ delante
Slo se pueden definir constantes de los tipos escalares
(boolean, integer, double, string)

Expresiones y operadores

Operadores aritmticos:
+ - * I 0/o + + -'

'

'

'

'

Operador de asignacin:
operadores combinados: . = , += , etc
$a = 3 ; $a + = 5 ; a vale 8
$b = " hola " ; $b . = "mundo" ; b vale "hola mundo"
Equivale a $b = $b . "mundo" ;
Operadores de comparacin:
= = .I = < > < = >= y otros
Operador de control de error: @. Antepuesto a una expresin, evita
cualquier mensaje de error que pueda ser generado por la expresin
Operadores lgicos:
and (&&), or (1 1), ! , xor
and/&& y or/l I tienen diferentes prioridades
Operadores de cadena:
concatenacin: . (punto)
asignacin con concatenacin: . =
'

'

'

'

'

'

Expresiones y operadores

Precedencia de operadores (de mayor a menor):


++

*
+
<

'

'

&&

1 1
and

g_
o

'

<=

or

--

'

' =

>

>=

Estructuras de control

Estructuras selectivas:
- if-else
- switch

Estructuras repetitivas:
- while
- far
- foreach

Estructuras de control

Estructura selectiva if-e lse


if

( c ondi c i n )
s entencia

if

( c ondi c i n l )
s entencia 1

else if
if

( c ondi c i n )
s entencia 1

else
s entencia 2

( c ondi c i n 2 )

s entencia 2
else if

( c ondi c i n n )

s entencia n
else
s entencia n+ l

Mismo comportamiento que en C


Las sentencias compuestas se encierran entre llaves
elseif puede ir todo junto

Estructuras de control

Ejemplo de estructura selectiva if-else:


< ? PH P
if

( $ s exo

==

'M' )

$ s a l udo -

" B i e nve n i da ,

";

$ s a l udo -

" B i e nve n i do ,

";

el se
$ s a l udo
print

$ s a l udo

$ n omb r e ;

( $ s a l u do ) ;

?>

B_rchivo

!;_dicin

'j_er

E.avoritos

tierr amientas

Vnculos

Bienvenida, Ji.na

'.} Listo

Intranet local

Estructuras de control

Estructura selectiva switc h


s w i t ch

( e xp r e s i n )

{
c a s e va l o r 1 :
s entencia 1
b r e a k;
c a s e va l o r 2 :
s entencia 2
b r e a k;
c a s e va l o r n :
s entencia n
b r e a k;
de f a u l t
s entencia n+ l
}

Mismo comportamiento que en C, slo que la expresin del


case puede ser integer, float o string

Estructuras de control

Ejemplo de estructura selectiva switch:


s w i t ch

( $ e x t e n s i on )

{
case

( " PDF " ) :

$ tipo =

" Do c ume n t o Ado b e PDF " ;

b r e a k;
case

( " TXT " ) :

$ tipo =

" Do c ume n t o de t e x t o " ;

b r e a k;
case

( " HTML " ) :

case

( " HTM " ) :

$ tipo =

D o cumento H1TuL

" Do c ume n t o HTML " ;

b r e a k;
de f a u l t :
$ tipo =
}
print

( $ t ipo ) ;

Intranet local

...

....__
._
__
__
__
__
__
__
__
.....

" Ar ch i vo

"

$ e x t e n s i on;

Estructuras de control

Estructura repetitiva wh i le
whi l e

( c ondi c i n )

s entencia

Mismo comportamiento que en C

fal s a

cie rta

s entencia

Estructuras de control

Ejemplo de estructura repetitiva while:


< ? PH P
print

( " <UL> \ n " ) ;

$ i=l;
whi l e

( $ i <= 5)

{
print

( " < L I > E l eme n t o $ i < / L I > \ n " ) ;

$ i + +;
}
print
?>

( " < /UL> \ n " ) ;


archivo

i'.} Listo

!;_dicin

Elemento
Elemento
Elemento
Elemento
Elemento

'Y_er

E_avoritos

tj_err amientas

Vnculos

1
2
3
4
5

l 1 l

Intranet local

Estructuras de control

Estructura repetitiva fo r
for

( i n i c i a l i z a c i n;

c ondi c i n;

i n c r eme n t o )

s entencia
i n i c i a l i z a c i n

Mismo comportamiento que en C

fal s a

cie rta

s entencia

i n c r eme n t o

Estructuras de control

Ejemplo de estructura repetitiva far:


< ? PH P
print
for

( " <UL> \ n " ) ;

( $ i=l;
print

print

$ i < = 5;

$ i++ )

( " < L I > E l eme n t o $ i < / L I > \ n " ) ;

( " < /UL> \ n " ) ;

?>

archivo

f;_dicin

Elemento
Elemento
Elemento
Elemento
Elemento

'Y_er

E_avoritos

Vnculos

tj_err amientas

1
2
3
4
5

i'.} Listo

1 l 1

Intranet local

...

Estructuras de control

Eje rc i c i o 2 : p rog rama q u e calc u la u n a ta b l a d e m u lti p l icar

Funciones

Ejemplo:
fun c t i on s uma

( $x,

{
$ s = $ x + $ y;
re turn $ s;
}
$ a= l ;
$ b= 2 ;
$ c= s uma

( $a,

p r i n t $ e;

$b ) ;

$y)

Funciones

Por defecto los parmetros se pasan por valor


Paso por referencia:
fun c t i on i n c r eme n t a

( &$a)

{
$ a = $ a + 1;
}
$ a= l ;
i n c r eme n t a
p r i n t $ a;

( $a) ;
/ / Mu e s t r a un 2

Funciones

Argumentos por defecto


fun c t i on mu e s t r a n omb r e

( $ t i tulo =

{
print

" E s t ima do $ t i t u l o : \ n " ;

mu e s t r a n omb r e

();

mu e s t r a n omb r e

( " Pro f . " ) ;

Salida:
E s t ima do S r . :
E s t ima do P r o f . :

"Sr . " )

Funciones

Los argumentos con valores por defecto deben ser siempre los
ltimos:
fun c t i on mu e s t r a n omb r e

( $ n omb r e ,

$ t i t u l o=

{
print

" E s t ima do $ t i t u l o $ n omb r e : \ n " ;

}
mu e s t r a n omb r e

( " Fe rn n d e z " ) ;

mu e s t r a n omb r e

( " Fe r n n d e z " ,

Salida:
E s t ima do S r .

Fe r n n d e z :

E s t ima do P r o f .

Fe r n n d e z :

" Pro f . " ) ;

"Sr . " )

Tablas

Sintaxis:
array

( [ c l ave = > ]

( ' roj o ' => l l ,

$ me di da s = a r r a y

( 10,

2 5,

' ve r de ' = > 5 1 ,

15) ;

Acceso:
$ color [ ' roj o ' ]

/ / N o o l vi d a r l a s c omi l l a s

$ me di da s [ O J

. . . )

La clave es una cadena o un entero no negativo. El valor puede


ser de cualquier tipo vlido en PHP, incluyendo otro array
Ejemplos:
$ color = array

val o r ,

El primer elemento es el O

' a z u l ' = > 2 55 ) ;

Tablas

La estructura de control fo reac h permite iterar sobre arrays


Sintaxis:
f o r e a c h ( e xp r e s i n a r r a y a s
s entencia

$ va l o r )

f o r e a c h ( e xp r e s i n a r r a y a s
s entencia

$ c l ave = > $ va l o r )

Ejemplos:
fore ach

( $ color as

p r i n t " Va l o r :
fore ach

$ va l o r< B R> \ n " ;

( $ color as

p r i n t " C l ave :

$ va l o r )
$ c l ave = > $ va l o r )

$ c l av e ;

Salida:
Va l o r :

101

Va l o r :

51

Va l o r :

2 55

C l ave :

r o J o;

C l ave :

ve r d e ;

C l ave :

a zul;

Va l o r :
Va l o r :
Va l o r :

101
51
2 55

Va l o r :

$ va l o r< B R> \ n " ;

Bibliotecas de funciones

Existen muchas bibliotecas de funciones en PHP


Algunos ejemplos:
-

Funciones de manipulacin de cadenas


Funciones de fecha y hora
Funciones de arrays
Funciones de ficheros
Funciones matemticas
Funciones de bases de datos
Funciones de red

Algunas bibliotecas requieren la instalacin de componentes


adicionales
Todas las funciones de biblioteca estn comentadas en la
documentacin de PHP

Bibliotecas de funciones

Funciones de manipulacin de cadenas


-

explode()

Divide u n a cadena en subcad enas


a rray expl ode (stri ng separator, stri ng stri ng [, i nt l i m it])

rtrim(), ltrim(), trim()

E li m i n a n ca racteres a la derecha, a la izq u ie rd a o por


ambos lados de una cadena
stri ng rtri m ( stri ng str [, stri ng charlist])

strstr()

Busca la primera ocu rrencia de u n a subcadena


strtolower() I strtoupper()
Convierte u n a cadena a m i n scu la I mayscu la

strcmp() I strcasecmp()

Compara dos cadenas con/s i n d isti n cin de mayscu las

strlen()

Calcu la la long itud de u n a cade n a

Bibliotecas de funciones

Funciones de fecha y hora


date()

Fo rmatea u n a fecha seg n u n formato dado


Ejemplo:
$ fecha
print

= date

("j /n/Y H : i");

(" $ fecha");

Resultado :
2 6/ 9/2 0 0 5

17 : 36

strtotime()

Convierte u n a fecha en u n timestamp de U N IX


Ejemplo:
$ fecha = date
print

("j /n/Y" ,

(" $ fecha");

Resultado :
5 / 4 /2 0 0 1

strtotirne (" 5 april 2 0 0 1 ") );

Bibliotecas de funciones

Funciones de arrays
-

array_count_values()

array_search()

Cuenta los elementos de u n a rray

sort(), rsort()

Busca u n elemento en u n a rray

count()

Calcu la la frecuencia de cada u n o de los e lementos de u n


a rray

O rdena y rei ndexa u n a rray (r=decrecie nte)

ksort(), krsort()

O rdena por claves u n a rray ( r=decreciente)

Bibliotecas de funciones

Eje rc i c i o 3 : p rog rama q u e m u estra la fec h a act u a l

Ilustra cmo usar comentarios, tablas y funciones (propias y


de biblioteca).
Tambin cmo usar el manual de PHP

P RCTICA 7
S U B I R BITCO RA CON ARC H IVOS P H P

P RACT I CA #?
PHP

Paso de variab les por U R L


En un sitio Web, las pginas y los scripts utilizados son muy
numerosos. Muy a menudo, vamos a necesitar que nuestros
distintos scripts estn conectados unos con otros, y,
sobretodo, que se sirvan y se pasen variables comunes.
< a h ref= " d esti n o . p h p?va ri a b l e 1 =va l o r1 &va ria b l e2=va l o r2& . . . ">
Mi e n l ace</a>

Estas variables no tienen el smbolo $ delante


Una vez realizado el paso, nuestras variables pertenecen
al entorno de la pgina d esti n o . p h p
Activada/desactivada la opcin de configuracin
reg iste r_g l o ba ls del archivo p h p . i n i

Paso de variab les por U R L


p h porige n u r l . p h p - Mozi l la
B_rchivo

!;:ditar

'i_er

1r

]QJ

Firefox

IC\arcadores

Herramientas

Ayda

phporiegen u rl .php
e:? O @ 1 [l
[l
[l
[l
< HTML>
y
< H EAD>
<TITLE>ph porige n u rl . ph p</TITLE>
</H EAD>
< BO DY>
<? P H P
$username = "abecerra";
?>
<a h ref="desti no. ph p?sal udo=hola&texto=
V
Esto es una variable texto&username=
<?php echo $usernam e ; ?>">
Paso variables sal udo y texto a la pg i na desti no. ph p</a>
</BO DY>
</HTML>

http://localhost/phporigenurl .php

Windows Media

Hotmail gratuito

Paso variables s aludo

Personalizar vnculos

[l

lI @

Ir

IQ.

_
_

Windows

texto a la pgina destino.php

http://localhost/destinoget.php?saludo=hola&texto=Esto e s una variable texto&J.Jsername=abecerra

I...

Paso de variab les por U R L


-

----

destinoget . p hp - Mozilla Firefox


8_rchivo

!;ditar

'1_er

lr

['iarcadores

Q e:) ti} O @ 1 [l

[l

desti no.php
< HTML>
< H EAD>
<TITLE>desti no. ph p</TITLE>
</H EAD>
Q DY>

Windows Media

[l

Hotmail gratuito

Herramientas

IQJLRJ

Ayda

http://localhost/destinoget.php?salJ
I

[l

Personalizar vnculos

[l

Ir

llQ.

Windows

Variable $saludo: hola


Variable $texto: Esto es una variable texto
Variable $us emame abec erra

TerminJ

ado

echo "Variable \$sal udo: $sal udo <br>\n " ;


echo "Variable \$texto : $texto <br>\n " ;
echo "Variable \$usernam e : $username <br>\n " ;

::So ov>

</HTML>

reg iste r_g l o ba ls O n e n p h p. i n i

Paso d e va riab les co n $_G ET


desti noget. php
< H T M L>

reg iste r_g l o ba ls Off e n p h p . i n i

<H EA D>
<TITLE>desti noget. ph p</TITLE>
</H EA D>
<BODY>
<?

11 Captu ra de las variables pasadas por la U RL


phpo riegen u rl .php
$sa l u d o = $_G ET['sa l u d o'] ;
$texto = $_G ET['text '] ;
...!.!

--f' 'd--td_=
____
___--__o=
t ____--=h re
es i n o g e . p h p ? s a l u o h o l a &te xt---,
,
.

$ username = $_G ET[ username ] ,


------_ Esto es u n a vari ab l e texto& username=

echo "Variable \$sal ud o : $sa l u d o < b r>\n " ;


echo "Variable \$texto : $texto < b r>\n " ;

echo "Variable \$ username : $ username < b r>\n " ;


?>
</BODY>
</HT M L>

< ? p h p ech o $usern a m e ; ?>">

Paso d e va riab les co n $_G ET


desti noget. php
< H T M L>

reg iste r_g l o ba ls Off e n p h p . i n i

<H EA D>
<TITLE>desti noget. ph p</TITLE>
</H EA D>
<BODY>
<?

11 Captu ra de las variables pasadas por la U RL

$sa l u d o = $_G ET['sa l u d o'] ;


$texto = $_G ET['texto'] ;
$ username = $_G ET[' username'] ;

g destinoget. php

- -------

8.rchivo

ditar

er

!r

Marcadores

O c) o @ 1 O
O

Windows Media

(Q)rg]

M<>zilla Firefox

Hotmail gratuito

Herramientas

Ayl[da

lJ;;;;j @I g

http://localhost/destinoget.php?sa

[J

Personalizar vnculos

Ir

Windows

Variable $saludo hola


Variable $texto: Esto es una variable texto
Variable $usemame: abecerra

echo "Variable \$sal ud o : $sa l u d o < b r>\n " ;


echo "Variable \$texto : $texto < b r>\n " ;
echo "Variable \$ username : $ username < b r>\n " ;
?>
</BODY>
</HT M L>

Terminado

..
I

P rocesar va riab les d e fo rm u la rios en P H P

Presentar una primera pgina con el formulario clsico a rellenar


Las variables del formularios son recogidas en una segunda pgina
que las procesa

< FO RM acti o n = " l o_q u e_sea. p h p" m ethod = " POST/G ET">

script PHP que procesa la


informacin del formulario

~
usuario enva datos

POST:
G ET:

usuario recoge datos

reg iste r_g l o ba ls Off e n p h p . i n i

P rocesar va riab les d e fo rm u la rios en P H P


phpfo rm u 1 .php
<HTML>
<H EAD>
<TITLE>ph pform u 1 . p h p</TITLE>
</H EAD>
<BODY>
<FORM M ETHOD=" POST"
I ACTION=" ph pdesti n o . p h p"r
Nom b re<br>
< I N PUT TYPE="TEXT"
NAM E='' nombre''>< br>
Ape l l idos<br>
< I N PUT TYPE="TEXT"
NAM E="ape l l idos"><br>
< I N PUT TYPE="S U BM IT">
</FORM>
</BODY>
</HTML>

&rchivo

!;_ditar

l,o'er

!r

Marcadores

Q e> tfJ O @ 1 O

Windows Media

Nombre

Hotmail gratuito

Ap ellidos

[ E nviar ]

Terminado

Herramientas

Ayuda

http: //localhost/formularios/phpforrjvJ

Personalizar vnculos

Ir

IC.=--<=

___J

_
_

Windows

l..

P rocesar va riab les d e fo rm u la rios en P H P


phpfo rm u 1 .php
<HTML>
<H EAD>
<TITLE>ph pform u 1 . p h p</TITLE>
</H EAD>
<BODY>
<FORM M ETHOD=" POST"
ACTION=" ph pdesti n o . p h p
Nom b re<br>
< I N PUT TYPE="TEXT"
NAM E='' nombre''>< br>
Ape l l idos<br>
< I N PUT TYPE="TEXT"
NAM E="ape l l idos"><br>
< I N PUT TYPE="S U BM IT">
</ FORM >
</BODY>
</HTML>

i/

--------

p h pformu1 . p h p
&rchivo

f;_ditar

l,o'er

Marcadores

!r

Q e> tfJ O @ 1 O

Windows Media

Nombre

Hotmail gratuito

Ap ellidos

[ E nviar ]

Terminado

GJ[QJ

Mozi l la Firefox
Herramientas

Ayuda

http: //localhost/formularios/phpfor v

Personalizar vnculos

Ir

lia.

Windows

l..

P rocesar va riab les d e fo rm u la rios en P H P


phpfo rm u 1 .php
<HTML>
<H EAD>
<TITLE>ph pform u 1 . p h p</TITLE>
</H EAD>
<BODY>
<FORM M ETHOD=" POST"
ACTION=" ph pdesti n o . p h p">
Nom b re<br>
< I N PUT TYPE="TEXT"
NAM E='' nombre''>< br>
Ape l l idos<br>
< I N PUT TYPE="TEXT"
NAM E="ape l l idos"><br>
< I N PUT TYPE="S U BM IT">
</ FORM >
</BODY>
</HTML>

--------

p h pformu1 . p h p
&rchivo

f;_ditar

l,o'er

Marcadores

!r

Q e> tfJ O @ 1 O

Windows Media

Nombre

Hotmail gratuito

Ap ellidos

[ E nviar ]

Terminado

GJ[QJ

Mozi l la Firefox
Herramientas

Ayuda

http: //localhost/formularios/phpfor v

Personalizar vnculos

Ir

lia.

Windows

l..

P rocesar va riab les d e fo rm u la rios en P H P


phpfo rm u 1 .php
<HTML>
<H EAD>
<TITLE>ph pform u 1 . p h p</TITLE>
</H EAD>
<BODY>
<FORM M ETHOD=" POST"
ACTION=" ph pdesti n o . p h p' '>
Nom b re<br>
< I N PUT TYPE="TEXT"
NAM E='' nombre''>< br>
Ape l l idos<br>
< I N PUT TYPE="TEXT"
NAM E="ape l l idos"><br>
!< I N PUT TYPE="S U BM IT"> 1
</FORM>
</BODY>
</HTML>

p h pformu1 . p h p
&rchivo

f;_ditar

l,o'er

----------

Marcadores

!r

<=i c::l l o @ 1 O
O

Windows Media

Nombre

Hotmail gratuito

Ap ellidos

[ E nviar ]

Terminado

GJ[QJ

Mozi l la Firefox

Herramientas

Ayuda

http: //localhost/formularios/phpfor v

Personalizar vnculos

Ir

lia.

Windows

l..

P rocesar va riab les d e fo rm u la rios en P H P


phpfo rm u 1 .php
<HTML>
<H EAD>
<TITLE>ph pform u 1 . p h p</TITLE>
</H EAD>
<BODY>
<FORM M ETHOD=" POST"
ACTION=" ph pdesti n o . p h p">
Nom b re<br>
< I N PUT TYPE="TEXT"
NAME=" nombre">< br>
Ape l l idos<br>
< I N PUT TYPE="TEXT"
NAM E="ape l l idos"><br>
< I N PUT TYPE="S U BM IT">
</FORM>
</BODY>
</HTML>

phpdesti n o.php
< HTM L>
< H EAD>
<TITLE>ph pdesti n o . p h p</TITLE>
</H EAD>
< BODY>
<?PHP
$ nombre = $_POST['nom bre'] ;
$ape l l idos = $_POST['a pe l l idos'] ;
echo "Va riable \$ nom bre : $ no m b re < b r>\n " ;
echo "Va riable \$a pe l l id os : $ape l l idos <br>\n"
?>
</BO DY>
</HTML>

P rocesar va riab les d e fo rm u la rios en P H P


phpfo rm u 1 .php
<HTML>
<H EAD>
<TITLE>ph pform u 1 . p h p</TITLE>
</H EAD>
<BODY>
<FORM M ETHOD=" POST"
ACTION=" ph pdesti n o . p h p"
Nom b re<br>
< I N PUT TYPE="TEXT"
NAME=" nombre">< br>
Ape l l idos<br>
< I N PUT TYPE="TEXT"
NAM E="ape l l idos"><br>
< I N PUT TYPE="S U BM IT">
</FORM>
</BODY>
</HTML>

phpdesti n o.php
<HT
>
< H AD>
ITLE>ph pdesti no . p h p</TITLE>
</H EAD>
< BODY>
<?PHP
$ nombre = $_POST['nom bre'] ;
$ape l l idos = $_POST['a pe l l idos'] ;
echo "Va riable \$ nom bre : $ no m b re < b r>\n " ;
echo "Va riable \$a pe l l id os : $ape l l idos <br>\n"
?>
</BO DY>
</HTML>

P rocesar va riab les d e fo rm u la rios en P H P


phpfo rm u 1 .php

phpdesti n o .php

< H EAD>

< H EAD>

< H T M L>

<TITL E > p h pfo rm u 1 . p h p</TITLE>

</H EAD>

< HTM L>

<TITL E > p h pdesti n o . p h p</TITLE>


</H EAD>

<BO DY>
< BO DY>

_"_
l M_
O D=
H
P_
< F O RM
E_
TO_
S_
T' ' l <?PHttP-
ACTIO N=" p h pdesti n o . p h p" >

N o m b re < b r>

$ n o m b re = $_POST[' n o m b re'] ;

$ a pe l l i d os = $_POST['a pe l l i d os '] ;

< I N P U T TYP E="TEXT"

e c h o "Va ri a b l e \$ n o m b re : $ n o m b re < b r>\n " ;

A pe l l i d os < b r>

?>

NAME=" n o m b re">< b r>

< I N P U T TYP E="TEXT"

NAM E=" a pe l l i d os " > < b r>

< I N P U T TYP E="S U BM IT">


</ F O R M>

</BO DY>
</HTML>

e c h o "Va ri a b l e \$a pe l l id os : $ape l l i d os < b r>\n "


</BO DY>
</H T M L>

P rocesar va riab les d e fo rm u la rios en P H P


phpfo rm u 1 .php
<HTML>
<H EAD>
<TITLE>ph pform u 1 . p h p</TITLE>
</H EAD>
<BODY>
<FORM M ETHOD=" POST"
ACTION=" ph pdesti n o . p h p">
Nom b re<br>
< I N PUT TYPE="TEXT"
NAME=" nombre"><br>
Ape l l idos<br>
< I N PUT TYPE="TEXT"
NAME="a e l l idos"><br>
< I N PUT TYPE="S U BM IT">
</FORM>
</BODY>
</HTML>

phpdesti n o.php
< HTM L>
< H EAD>
<TITLE>ph pdesti n o . p h p</TITLE>
</H EAD>
< BODY>
<?PHP
$ no m b re = $_POST[' n o m b re'] ;
$ape l l idos = $_POST['a pe l l idos'] ;
echo "Va riable \ nom bre : nom b re < b r>\n " ;
echo "Va riable \$a pe l l id os : $ape l l idos <br>\n"
?>
</BO DY>
</HTML>

P rocesar va riab les d e fo rm u la rios en P H P


phpfo rm u 1 .php
<HTML>
<H EAD>
<TITLE>ph pform u 1 . p h p</TITLE>
</H EAD>
<BODY>
<FORM M ETHOD=" POST"
ACTION=" ph pdesti n o . p h p">
Nom b re<br>
< I N PUT TYPE="TEXT"
NAME=" nombre">< br>
Ape l l idos<br>
< I N PUT TYPE="TEXT"
NAM E="ape l l idos"><br>
< I N PUT TYPE="S U BM IT">
</FORM>
</BODY>
</HTML>

phpdesti n o.php
< HTM L>
< H EAD>
<TITLE>ph pdesti n o . p h p</TITLE>
</H EAD>
< BODY>
<?PHP
$ nombre = $_POST['nom bre'] ;
$ape l l idos = $_POST['a pe l l idos'] ;
echo "Va riable \$ nom bre : $ no m b re < b r>\n " ;
echo "Va riable \$a pe l l id os : $ape l l id os <br>\n"
?>
</BO DY>
</HTML>

P rocesar va riab les d e fo rm u la rios en P H P


phpfo rm u 1 .php
<HTML>
<H EAD>
<TITLE>ph pform u 1 . p h p</TITLE>
-------</H EAD>
p h pformu1 . p h p - Mozi l la Fi refox
Arnda
Archivo
Editar
Ver
[j_arcadores
Herramientas
<BODY>
Ir
<FORM M ETHOD=" POST"
1 [l http : !llocalhost/formularios/phpforr @
<> e> & ro
ACTION=" ph pdesti n o . p h p"> [l Windows Media [l Hotmail gratuito O Personalizar vnculos O Windows
Nom b re<br>
Nombre
!Antonio
< I N PUT TYPE="TEXT"
1
Ap ellidos
NAM E='' nombre''>< br>
!Becerra Ter rl
1
Ape l l idos<br>
[ E nviar ]
< I N PUT TYPE="TEXT"
NAM E="ape l l idos"><br>
< I N PUT TYPE="S U BM IT">
</FORM>
</BODY>
Terminado
</HTML>

L;J[g]
Ir

l..

P rocesar va riab les d e fo rm u la rios en P H P


phpdesti no .php
< HTM L>
< H EAD>
<TITLE> p h pdesti n o . p h p</TI p h p desti no . p h p - Mozi l la Fi refox
!;.ditar
Ay!:J.da
fl.rchivo
1'.er
r:::J.a rcadores
Herramientas
lr
</H EAD>
1 [l http: //localhost/formularios/phpdes 1
< BODY>
<3 9 (QJ
<? PH P
[l Windows Media [l Hotmail gratuito [l Personalizar vnculos [l Windows
$ nombre = $_POST[' n om b re Variable $nombre: k:ttonio
$ape l l idos = $_POST['a pel l id Variable $ ap ellido s : B e c erra Tern
echo "Variable \$ nom bre : $ n 4
echo "Variable \$a pe l l id os : $
?>
</BODY>
</HTML>

------

-------

[QJ[RJ
-

Ir

llkJ...

Terminado

I...

Restri ccin de acceso por ed ad


edad .php
< htm l>
< head>
<title> Restri n g i r por edad</title>
</head >
< body>
<fo rm action="edad2 . p h p" method=" post">
Escri be tu edad :
< i n put type="text" name="edad " s ize = "2">
< i n put type="s u bm it" val ue=" E ntra r">
</form>
</body>
</htm l>

edad2.php
< htm l>
<head>
<title>Restri n g i r por edad </title>
</head>
<body>
<?
$edad = $_POST["edad"] ;
echo "Tu edad : $edad< p>" ;
if ($edad < 1 8) {
echo " N o puedes entrar" ;
}else{
ech o " Bienve n ido" '
}
?>
</body>
</htm l>

Restri ccin de acceso por ed ad


---------

Restringir por edad - Mozilla Firefox


fl.rchivo

!;,ditar

'i_er

!r

tl,arcadores

1 [l
[l

Windows Media

Escribe tu e dad:

[l

Hotmail gratuito

[ E ntrar ]

Herramientas

[QJ[RJ
Ay!:[da

http ://localhost/formularios/edad . p

[l

Ir

!
---------'
-

Personalizar vnc

--

Restringir por edad - Mozilla Firefox


fl.rchivo

!;,ditar

'i_er

!r

Marcadores

1 [l
[l

Windows Media

[l

Tu e dad: 1 0
No pue des entrar

Terminado

Terminado

Hotmail gratuito

Herramientas

[QJ[RJ
Ay!:[da

http: //localhost/formularios/edad2.

[l

Personalizar vnculos

[l

Windows

Ir

.__---------'
!

Restriccin de acceso por edad


-------

Restringir por edad - Mozilla Firefox


fl_rchivo

!;_ditar

'i_er

!r

Marcadores

1 [l

Herramientas

[QJ[RJ
Ayl,!da

http : //localhost/formularios/edad . p

Ir

I._Q.

_
_
_
_
_
_
_
_,

[l

Windows Media

Es crib e tu e dad:

[l

Hotmail gratuito

[ E ntrar ]

[l

Personalizar v

Restringir por edad - Mozilla Firefox


fl.rchivo

!;_ditar

'i_er

!r

Q e:)
...

[l

...

Windows Media

Tu e dad: 1 8
Bienvenido

Terminado

Terminado

[l

Marcadores

1 [l

Hotmail gratuito

Herramientas

[QJLRJ
Ayl,!da

http ://localhost/formularios/edad2.

[l

Personalizar vnculos

[l

Windows

@i

Ir

._IQ.

_
_
_
_
_
_

Form u la rio habitual


ph pform u normal . ph p

< blockq uote>

< H T M L>

<p>Hom bre< i n put ty pe= " rad i o"

< B O DY>

val ue=" h o m b re" checked

<FORM M ET H O D=" post" A CT I O N =" m is_datos . p h p"> name=''sexo''></p>


< i n put ty pe= " h i dden" name="edad" val ue="55">

< p > M uj er

< p>Tu n o m b re

< i n put ty pe="rad io" name="sexo"

< i n put ty pe="text" name=" nom bre" s ize="30"


val ue="anto n i o becerra"></p>

val ue="m uj er"></p>


</bl ockq uote>

< p> Tu sistema favorito

< p>Aficiones</p>

<select size=" 1 " name="s istema">

< p>

<option selected val ue=" L i n ux"> L i n ux</opti on>

<textarea rows="5" name="afi c i o nes"

<option val ue=" U n ix" > U n ix</opti on>

cols=''28''></textarea></p>

<option val ue=" Maci ntos h">Maci ntos h</option>

< p>< i n put ty pe="s u bm it"

<option val ue="Wi ndows">Wi ndows</opti on>

val ue=" E nviar datos" name="enviar">

</select></p>

< i n put ty pe="reset"

< p> Te g usta el futbol ?

val ue=" Restablecer" name="B2"></p>

< i n put ty pe="c heckbox" name="futbol "

</FO RM>

val ue="ON "></p>

</BODY>

< p>Cual es tu sexo?</p>

< H T M L>

Form u la rio habitual


-

M ozi Ua F i refox
archivo

;:ditar

e)

L;J[g](g]

'j_er

!r

!j_arcadores

Herramientas

Ay!,!da

o I D http: //localhost/formularios/phpforr1v 1

O Windows Media O Hotmail gratuito

Tu nombre anto n i o b e ce rra


Tu sistema favorito

Personalizar vnculos

@ Ir

Windows

l[ fo:: : : : ]_v 1

Te gusta el futb ol ?

Cual es tu sexo?
Hombre @
Muj er

Aficiones
Nadar ,

C i ne ,

Jugar al Te n i s

[ Enviar datos l [ Restab lece r l


Terminado

..

Form u la rio habitual


m is datos .php
<?PH P
$enviar = $_POST['enviar'] ;
$ n o m b re = $_POST[' nom bre'] ;
$sexo = $_POST['sexo'] ;
$edad = $_POST['edad'] ;
$s istema = $_POST['s istema'] ;
$futbol = $_POST['futbol'] ;
$afi ci ones = $_POST['afi ciones'] ;
if ($enviar) {
echo " H ola < b>" . $ n o m b re .
"</b> q ue tal ests < B R>\n" ;
echo " E res " . $sexo . " < B R>\n" ;
echo "Tienes " . $edad . " < B R>\n " ;
echo "Tu s istema favorito es " . $s istema .
" < B R>\n " ;
i f ($futbol ) {
echo "Te g usta el futbol < B R>\n" ;

else {
echo " N O te g usta el futbol < B R>\n " ;

if ($afi ciones ! = "") {

echo "Tus afici ones son : < B R>\n" ;


echo n l 2 b r($afi ciones ) ;

} else {

echo " N O tie nes afi ciones < B R>\n" ;

}
}

echo "< br> " ;


echo "
<a h ref= ph pform u normal . ph p>VO LVER A L
FO R M U LA RIO</a>"
?>

Form u la rio habitual


--

g Mozrna
E\_rchivo

Firefox

E:ditar

e)

'1_er

lr

!j_arcadores

Herramientas

Ayda

& o @ 1 [l http://localhost/Formularios/mis_da1

[l Windows Media [l Hotmail gratuito [l Personalizar vnculos [l Windows

@ Ir

IQ.

Hola antonio be e errn que tal e sts


Eres hombre
Tienes S S
Tu sistema favorito e s Linux
Te gusta el futb ol
Tus aficiones s on:
Nadar, Cine, Jugar al Tenis
VOLVER AL F ORMULABJO

Terminado

r .::

Form u lario m s com p lej o


ph pform ucom plex. php
<?php

Emai l : < i n put ty pe="text"

if ( isset($_POST['Accion'] ))

name=" persona l [e m a i l] "><br>

Cerveza : < b r>


pri nt '< pre>' ;

<select m u lti ple name=" beer[ ] ">

pri nt_r($_POST) ;

<option val ue="wa rthog">Warthog</opti on>

echo

<option val ue=" g u i n ness">G u i n ness</

"<a h ref= $_S ERVER[P H P_S ELF] >

opti on>

Por favor, i ntentlo de n uevo</a>" ;

<option val ue="stuttgarter">Stuttgarter

pri nt '</pre>' ;

Schwabe n b ra u </option>

</select><br>

else

< i n put ty pe= " h i dden" name="Accion"

val ue="enviado">

?>
<form
acti on="<? p h p echo

< i n put ty pe="s u bm it" name="E nviar"


val ue=" Envame ! ">
</form>

$_S ERVER[' P H P_S E LF'] ; ?>"

<? P H P

method=" POST">

N o m b re : < i n put ty pe="text"


name=" personal [nom bre] "><br>

?>

Form u lario m s com p lej o


Q e) f!j3 O

@ 1 O http://localhost/formularios/phpforr

O Windows Media O Hotmail gratuito O Personalizar vnculos O Windows

@ Ir

8.rchivo

;.:ditar

'1_er

Ir

t[arcadores

Herramienas

Ayi,da

===r---:;;-----;:--
----;; :;::-;:==
:: ==========-;:::
==
:: ====:::j
I
------
Q e) tO E'.it 1 O http ://localhost/formularios/phpforr 1 @ Ir
v

Nombre: Anto n i o B e ce rra.

O Windows Media O Hotmail gratuito O Personalizar vnculos O Windows

Email: a.be ce rra.@u al. e s

Arra y

[ p e r s onal]

Array

=>

(
[ nombre]
[ erua i l ]

[beer]

=>

Ant o n i o B e c e r r a

>

=>

ab e c e r r a@ ual . e s

Array

(
[ O]

[ 1]

=>

>

war thog
s t ut t gar t e r

[ Ac c i o n]

=>

enviado

[ E nv i ar]

=>

Envarue '

P o r f avo r ,

Terminado
Terminado

intentlo de nuevo

8.rchivo

E_ditar

1'._er

Ir

Marcadores

y e) fjJ O @ 1 []

O Windows Media O

Hotmail gratuito

Herramientas

8.rchivo

Ay!:J.da

http: //localhost/ejercicios/formuind' v

[]

Personalizar vnculos

[] Windows

Ir

lIQ.
=-----

Formulario de inscripcin de usuarios

E_ditar

1'._er

Ir

Marcadores

y e) fj5 iQJ @ 1 O

Windows Media

[]

Hotmail gratuito

Herramientas

Ay!:J.da

http://localhost/ejercicios/confirm. v

[]

Personalizar vnculos

[]

Nombre c ompleto

Windows

Antonio Becerra
Universidad de Ahneria
Dpto. Lenguajes

Direccin
Direccin

Computacin

e orre o ele ctrnic o abecerra@ual . e s


Contrasefia

Correo electrnico

Fecha de

Contrasea

nacimiento
Confirmar contrasea

8 1

Sexo
V

Por favor, elige los


temas de inters

Sexo

Por favor, elige los


temas de inters

O Hombre

O Mujer

D Ficcin

D Terror

D Accin

D Comedia

Selecciona tus
aficiones
o_,
v ll
J.-=..
D e_
p_
rt._
e_
-a
_
_
i re
_-,.
1_
i b_
.. re
_.

-.l..-..:..'

_
_
_

Terminado

Terminado

antonio
1 5/Agosto/ 1 97 0

Hombre
terror
acc10n
comedia

Aficiones

Musica-Pop

s ele e cionadas

F otografia

D Suspense

t -----_...,._ r s; .i.- .',tt<i.,


,_._

=-----
lIQ.

Pgina de confirmacin del registro de usuario

Nombre c ompleto

F e cha de nacimiento

Ir

Conf rmar dato s


i

P RACTI CA #7 P H P
Rea l iza los eje rcicios sig u ientes :
Ej ercicio 1 :
Rea l iza r tod os los eje rcicios de la p rese ntacin .
Ej ercicio 2 :
Real iza r el ej ercicio 2 de la d iapositiva anterior.

E ntreg a r la bitcora d e los ej ercicios rea l izad os co n


i m p resin d e panta l l a . Res u ltados y con cl u s i o nes .

PERL
Lenguaje Prctico de Extraccin
y de Informes

Introduccin
PERL que significa "Practical Extraction and
Report Language
Es un lenguaje de programacin creado por
Larry Wall, surge de otras herramientas
Unix.

Introduccin (Cont.)
Principalmente sirve para labores de
procesamiento de texto.
Tambin sirve para la programacin de
software de sistemas
Y ltimamente ha encontrado su aplicacin
en la escritura de CGI o scripts ejecutados
desde pginas de la WWW.

PERL es un lenguaje interpretado, aunque


internamente funciona como un compilador. Por
eso se habla de scripts, y no de programas.
Existen actividades en las cuales PERL, no es la
solucin ms adecuada, por ejemplo: sistemas de
tiempo real, aplicaciones de memoria compartida de
procesos o aplicaciones extremadamente largas.

Conociendo su sintaxis
El tpico ejemplo de hola mundo!!!
1:
2:
3:
4:
5:

#!/usr/bin/perl
print ("Cual es tu nombre?");
$nombre=<STDIN>;
chop($nombre); # esto es un comentario
print "Hola, $nombre!\n";

OBS.: en PERL no se necesita declarar la variable


se crea y se usa, podramos haber escrito un
nmero igual lo mostrara.

Los datos pueden ser nmeros y string, al igual


que en C.

Para sealar los strings hay dos formas de hacerlo:


comillas simples y dobles, se usan igual que en
Shell.

Strings :
a) Concatenacin(.):
Ej:"Hola"."mundo" # "Holamundo
"juan"." "."pedro" # "juan pedro

b) Operador de repeticin de strings(x) :


Ej:"juan"x3 # "juanjuanjuan"

Tipos de variables
1- Escalares:
Las variables de escalares empiezan por $

$a = 5;

$b ="xxx";

Las instrucciones terminan en punto y coma.


Un escalar puede tener nmeros, strings u otras
cosas ms complicadas como referencias y
descriptores.
Ej:$a=123; $nombre=hola2;

1- Escalares
Interpolacin de variables escalares en strings
Son idnticas que en shell.
El valor undef (indefinido)
Si usamos una variable antes de darle un
valor se asignara como cero si es nmero o " "
(vaco) si es como string.

2- Arreglos
Las variables tipo arreglos empiezan por @
@a = (95, 7, 'fff' );
print $a[2]; # imprime el tercer elemento: fff
print @a; # imprime: 9 57 fff separados por
espacios.

Los valores de los elementos pueden ser de


distinto tipo.
El largo de un arreglo ( ej : @a ) queda
guardado en $#a.

Si uno accesa un elemento del arreglo ms all del


fin del arreglo el valor undef es retornado.
Asignar un valor a un elemento ms all del fin
del arreglo, lo que hace es agrandar el arreglo
poniendo undef a los valores intermedios.

Ejemplo de asignacin en arreglos


Ej:@a=(1, "yo",3);

@c=@a;
# copia el arreglo @a en @c

$d=$a[$#a]; # $d=3

$b=$a[0];
# asigna 1 a $b

$a[1]=5;
# ahora @a es (1,5,3)

$a[2]++;
# suma uno al tercer valor de @a siendo ahora
(1,5,4)
$b=$a[7];

# $b es 0 o "" ,dependiendo del contexto

$a[6]="chao";

3- Hashes o arreglos asociativos


'hash', que permite almacenar conjuntos de pares
(clave, valor)

Las variables de tipo hash empiezan por %


Para crear un elemento de un hash se requiere
una lista de 2 valores
El primer elemento es la clave y el segundo es el
valor
%a = ( 'x', 5, 'y', 3);
# llena 2 elementos del hash
print $a{'x'}; # imprime: 5
print $a{'y'}; # imprime: 3

Una forma ms clara de ver los pare sera:


%a = {'x'=> 5, 'y'=>3};

Si es un string simple se puede omitir las


comillas simples.

Estructuras de Control
Al igual que en la mayora de los lenguajes de
programacin, en PERL existen estructuras
como if, for, while.
La sintaxis del if , for y while es la misma que
en C.

Estructuras de control

Until
La forma del until es :
until ( condicion ) {
sentencia;
}

A diferencia del while el until se ejecuta al menos una vez, y se sigue


mientras la condicin sea falso.

Foreach

El foreach recibe una lista de valores y asigna cada uno de los valores de la
lista a una variable de lectura . La estructura del foreach es :
foreach $a ( @alguna_lista ) {
sentencia;
}

Todas las estructuras de control necesitaban de llaves, aunque solo


fuera una instruccin

Manejo de Archivos
Entrada estndar:
Como vimos en el primer ejemplo, para leer una
lnea desde la entrada estndar se debe asignar una
variable escalar a <STDIN>

Lectura de parmetros pasados a un programa


Dentro de un programa en PERL los argumentos
que se le pasan quedan guardados en el arreglo
@ARGV.

Manejo de Archivos
Procesamiento de archivos
Como en todo lenguaje en PERL se puede
trabajar con archivos.
Abrir:
open(FILE,"file1.txt");
while ( $a=<FILE> ){
...sentencia..;
}
close(FILE);

Escritura:
$file='hola.c';
open (A,">$file");
# Abrimos para solo escritura el archivo
hola.c
print A "hola\n";
close(A);

Append :
@l=('a',"\n",'b',"\n");
open(G,">>/tmp/hola.txt");
# Abrimos para escritura pero, sin borrar el
#contenido solo aadiendo al archivo
print G @l;
close (G);

Una forma ms elegante seria usando la funcion die:


open (A, "file.dat") || die "No se puede abrir\n";

Inclusion de archivos
Al igual que en C, uno puede incluir otro archivo
con cdigo PERL.
Con require incluimos un archivo, el cual no
necesariamente tiene que tener un 'main', es
decir pueden ser solo subrutinas.
Ej.: #!/usr/bin/perl
require "otroarchiv.pl";

Expresiones regulares
Es una forma general de describir un patrn
de caracteres que queremos buscar en un
string. En PERL se usa la misma notacin
para expresiones regulares de sed y grep :

Exp. Reg.
Se usan para indicar que algunas letras se
repiten
.(un punto) : Cualquiera excepto el carcter de lnea nueva.
+
: Uno o ms del carcter anterior(que lo precede).
?
: Ninguno o uno del carcter anterior.
*
: Ninguno o ms del carcter anterior.
^
: Busca la coincidencia slo al comienzo de la lnea.
$

: Busca la coincidencia slo al final de la lnea.

Exp. Reg.
Para dar una expresin regular se pasan en '/'. Y
para aplicarla a una variable se usa el operador
'=~'.
Si anteponemos \ (back slash) a cualquier
comodn nos referimos al carcter mismo.
Ejemplos : $a="hola mundo";
$e="chao";
$b= ($a =~ /^ho/); # $b vale true = 1

(continuacin)
$c= ( "chao" =~ /ah/ ) ; # $c=0
$d= ( "$e" =~ /ah/ ); # $d=0
if ( $a=~ /o$/ )
{ print "Correcto\n"; }
# imprime Correcto

El operador '=~' tiene una opcin que lo que


hace es como el sed, reemplazar un trozo de
texto por otro, esa opcin es la 's' :
El formato es $x =~ s/expant/expnueva/ ;
Ej: $cual="este es un test";
$cual =~ s/test/prueba/;
#$cual="este es un prueba"

substitucin s///
$_ Almacena la lnea completa que ha sido ledo.

Ya fue visto anteriormente su explicacin.


Cuando el escalar es $_ se omite $_ y =~...
$_ = "abcdef";
/bc/; # es verdadero
s/cd//;
print; # imprime: abef

cuantificadores
{3,5} : mnimo 3 y mximo 5 del carcter
{3,}
{,5}

anterior
: mnimo 3 del carcter anterior
: mximo 5 del carcter anterior

Clases de caracteres a la medida


[abcef]

@a =

: uno de esas 5 letras

[a-f]
: lo mismo que el
[0-9]
: es lo mismo que
[\t \n]
: es lo mismo que
[a-zA-Z_] : es lo mismo que
( 1..10);
foreach ( @a )
{
/^[1-3]/
and
print "$_:";
}

anterior
\d
\s
\w

Las ExpReg. tienen tambin opciones

/g : indica que haga varios "matchs"


$_ = "f1=abc test=on";
s/=/ / ;

# $_ queda con "f1 abc test=on"

$_ = "f1=abc test=on";
s/=/ /g ;
# $_ queda con "f1 abc test on"
$_ = "1995 Renault azul";
@a = /^(\w+)/g; # @a queda con 3 elementos

/i : ignore maysculas y minsculas


$_ = "Francisco francisco";
s/francisco/pacho/ig;
# $_ queda con "pacho pacho"

s///e : ejecuta la segunda expresin y su


valor lo utiliza para remplazar el patrn.
$_ = "largo= 15";
s/(\d+)/$1 * 4/e;
print;
# Imprime: largo= 60

El operador tr se usa para traducir


caracteres.
Tiene un parecido con la substitucin en
ExpReg
$a = "f1=abc test=on";
tr/=/ / ;
# $a queda "f1 abc test on
#split para dividir
%x = split / /, $a;
# $x{f1}
queda con "abc"
# $x{test} queda con "on";

Funciones en Exp. Reg.


Split() y Join()
Split() lo que hace es dado un separador, separa un
string en un arreglo :
Ej: $linea="mvargas::117:10:Juan";
@a=split(/:/,$line);
# @a=("mvargas","","117","10","Juan")

Join() hace lo inverso de Split(), dado un arreglo lo


junta en un string, separado por un delimitador
especificado.

Subrutinas
Al igual que la mayora de los lenguajes de
Programacin, PERL soporta subrutinas,
tambin conocidas como procedimientos o
funciones.
Con ejemplos, veremos como se construyen.

Ejemplo 1
sub suma {
local($x,$y)=@_; # En @_ se reciben los
parmetros (es por valor)
return($x+$y);
}
#uso de &
$f=8;
$c=&suma(4,$f);
# Otra opcin
sera: $c=&suma(4,$f,'hola'); no se ve
# afectado
# $c=12

Ejemplo 2
sub duplica() {
$x*=2;
}
$x=8;
&duplicar();
# $x=16, ya que no lo
declaramos como
# local en la subrutina => duplica a x

Como vemos el paso de parmetros es por


referencia, pero al igual que en C, los parmetros se
pueden modificar, va punteros:

Ejemplo 3
$st='uno:1,dos:2,tres:3';
&crea($st,*a); # cuando la funcin termina:
$a{'uno'}=1, $a{'dos'}=2, $a{'tres'}=3
sub crea {
local($pal,*g)=@_;
local($x,$a,$b);
local(@aux);
@aux=split(/,/,$pal);
for($x=0;$x<=$#aux;$x++)
{
($a,$b)=split(/:/,$aux[$x]);
$g{$a}=$b;
}
}

CGI y Perl
CGI (Interfaz de entrada comn) es como la
puerta de acceso que hay entre una pgina
Web y el servidor de Internet donde la pgina
reside.
Cuando un explorador desea algo ms que
otra pgina Web o un grfico desde el
servidor, la solicitud va al CGI para poder ser
procesada.

PERL y los formularios


La idea bsica detrs de un formulario es
sencilla: pedir informacin al visitante,
obtener la informacin, despus usar la
informacin segn sea. La parte delicada de
tratar con los formularios se maneja entre
bastidores por el cdigo de Perl.
El programa de procesamiento puede ser un
URL situado en cualquier parte de Internet.

Los datos procedentes de un formulario


fluyen en una corriente que utiliza un formato
especial llamado codificacin URL .
Cada campo tiene un atributo NAME (nombre,
de forma que puede saberse de dnde proceden los
datos) y un atributo VALUE (valor, contenido del
campo). La cadena enviada por el explorador
empareja cada NAME del formulario con su
VALUE y los conecta con un signo igual:
NAME=VALUE.

La pareja NAME/VALUE es la construccin


bsica de datos de los formularios y de los
programas de procesamiento de formularios.

Mtodos de envo: GET y POST:


El mtodo GET, el explorador empaqueta los
datos del formulario y los agrega al final de
una solicitud de aspecto normal para un URL.

El mtodo POST codificar los datos de la misma


forma, pero los enva directamente al programa CGI
a travs de STDIN. El mtodo POST usa la variable
de entorno CONTENT_LENGHT (longitud del
contenido) para decirle al servidor cuntos bytes
debe leer desde STDIN.
La corriente de datos puede ser tan larga como
se necesite, cosa que no ocurre con el mtodo GET
que dependiendo del servidor se permitirn cadenas
ms o menos cortas. Est limitacin hace que POST
sea el mtodo ms utilizado.

Variables de entorno (CGI)


Las funciones y los procesos de un servidor
pasan datos entre s a travs de variables de
entorno.
Las variables CGI de mayor importancia para
comprender el proceso de comunicacin
explorador/servidor se describen en la tabla
siguiente:

Variables de entorno CGI


QUERY_STRING

Datos de entrada que se agregan a URL


para un mtodo GET.

REQUEST_METHOD

Expresa el mtodo usado: GET o POST.

CONTENT_LENGHT

Nmero de bytes de la corriente de datos


a leer para una solicitud con el mtodo
POST.

Ms sobre formularios HTML


<FORM>...</FORM>.Define

el comienzo y

final de un formulario.
ACTION="URL". Es el nombre del archivo del
script o del programa que manejar los datos
desde un formulario.
METHOD="GET" o "POST". As se indica cmo
se mueven los datos desde el formulario hasta
el script que los maneja.

Operaciones sobre arreglos


Push y Pop
Una comn utilizacin de los arreglos es como stacks, donde los nuevos
valores son agregados y borrados por el lado derecho del arreglo. Push()
es utilizado para agregar elementos y Pop() para sacar.

Shift y Unshift()
Al igual que Pop y Push estos sacan y meten elementos en un arreglo, pero
lo hacen por el lado izquierdo.

Splice
Splice permite extraer un subarreglo y modificar a la vez el arreglo original

Operaciones sobre arreglos (Cont.)


Chop
Trabaja igual que en variables escalares, le saca el ltimo carcter a cada
elemento del arreglo. Se usa para eliminar el retorno de carro de la
entrada estndar.

Ms sobre Hash
Una forma de agregar puede ser la siguiente:
$a{fac}=3456;

La funcin delete sirve para borrar un


elemento
delete $a{ope};
La funcin keys crea un arreglo con las
claves de un hash
%a = ( x => 5, y => 3, z => 'abc' );
@b = keys %a

La funcin values devuelve un arreglo con


los valores del hash
La funcin exists prueba si existe la clave en
el hash, el resultado seria 1 si sta estuviera.

Variables especiales
$_ Almacena la lnea completa que ha sido

ledo.
$` Almacena la parte situada a la izquierda de
un modelo.
$' Almacena la parte situada a la derecha de un
modelo.
$& Almacena la parte propia del modelo
encontrado.

Pginas Webs recomendadas


http://www.perl.com (Pgina Oficial)
http://usuarios.lycos.es/asualam/perl/
http://www.perl.org