0% encontró este documento útil (0 votos)
33 vistas104 páginas

Curso Básico de PHP y Apache

Este documento introduce un curso básico de programación en PHP. Explica que PHP es un lenguaje de programación interpretado usado principalmente para crear sitios web dinámicos. Requiere un servidor como Apache para interpretar el código PHP. El documento también lista los requisitos del curso y discute opciones para instalar servidores locales como Xampp y EasyPHP.

Cargado por

Julio Delgado
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
33 vistas104 páginas

Curso Básico de PHP y Apache

Este documento introduce un curso básico de programación en PHP. Explica que PHP es un lenguaje de programación interpretado usado principalmente para crear sitios web dinámicos. Requiere un servidor como Apache para interpretar el código PHP. El documento también lista los requisitos del curso y discute opciones para instalar servidores locales como Xampp y EasyPHP.

Cargado por

Julio Delgado
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Volumen I: Introducción

Hoy empezamos con este curso básico de programación en PHP. Antes de nada, vamos a
realizar una pequeña explicación sobre qué es PHP.

Podemos definir a PHP como un lenguaje de programación interpretado, cuya función


principal es la creación de sitios web con contenido dinámico. PHP apareció por primera
vez en 1995, y hoy en día sigue siendo uno de los lenguajes mas usados(si no es el mas
usado) para este propósito.

Como hemos dicho mas arriba PHP es un lenguaje interpretado, es decir a diferencia de
otros lenguajes como C, C# o Java, este no se compila, sino que es un intérprete quien va
leyendo línea a línea el código PHP y ejecutando las acciones pertinentes.

Ahora la pregunta del millón, ¿Quien es ese intérprete?, cuando hablamos de PHP, es un
servidor HTTP que evidentemente tenga soporte para lenguaje PHP, en nuestro caso ese
servidor es APACHE.

Una vez realizada esta pequeña introducción, os enumeramos qué vamos a necesitar
durante nuestra andadura en los mundos del PHP y la programación web, enumero:

– Un servidor APACHE
– Conocimientos mínimos de HTML (Aunque cuando lo utilicemos iremos explicando la
mayoría de las cosas, es recomendable conocer algo de HTML).
– Conocimientos mínimos de CSS (Opcional, es simplemente por si queréis darle algo de
estilo a las pruebas).
– Algo con lo que escribir PHP obviamente. Podéis usar programas enfocados a diseño web
tipo Quanta+, Kompozer,Dreamweaver o como si queréis usar el bloc de notas o VI.

Comencemos hablando de Apache. Como os hemos comentado anteriormente Apache es


un servidor HTTP con soporte para PHP, es multiplataforma y código abierto.

Apache es actualmente, bajo mi opinión y la de muchos otros, la mejor opción cuando


hablamos de PHP pese a que hay otras alternativas.

Apache puede instalarse bajándolo directamente de su web , pero también existen unos
programas que actúan como “paquetes” para montar servidores Apache facilitarte.
Generalmente estos paquetes suelen llevar Apache, MySql, phpMyAdmin, y demas
aplicaciones necesarias para montar servidores. Puedes ver también cursos para aprender
sobre Big Data.

Con el fin de facilitar la instalación y configuración del servidor ,y como básicamente lo


vamos a usar para aprender, y no queremos poner nada “online”, hemos pensado que la
mejor opción es usar uno de esos programas. Aunque cuando se trata de montar un
servidor de verdad es mejor instalarlo todo por separado y configurarlo como dios manda,
pero si nos ponemos a configurar Apache nos da para hacer otro curso.
Pasamos a enumerar distintas alternativas para montar servidores:

EasyPHP: Probado en Windows XP hace tiempo y con versiones antiguas. Sencillo de


instalar y utilizar. Puede dar algunos problemas en Windows7 64bits según fuentes
externas.

Xampp:Va a ser el que usemos en las caputras del curso, es ejecutado en Linux(Kubuntu
10.10) y a pesar de dar algunos problemas, cuando lo tienes configurado, funciona bastante
bien.

También esta disponible en Windows y Mac.

Nota: Es el que usaremos en el curso pero podéis usar el que mas os guste, para correr los
scripts valdrá igual.

Wampp: No podemos dar datos de referencia porque no lo hemos probado.

MAMP: Disponible para Mac OS X. No podemos dar referencias.

Nota: No nos vamos a meter con el tema de la configuración de Apache, pero si a alguno
le pica la curiosidad tenéis muchísima información en la red, os recomiendo buscar sobre
que son los archivos httpd.conf y .htaccess.

Intentad montar vuestro servidor, si no lo conseguís no os preocupéis, en la siguiente


entrega veréis como instalar Xampp en Linux y EasyPHP en WindowsXP.
Volumen II : Instalación de Xampp y EasyPHP
Empezamos con Xampp . Lo primero que tenemos que hacer es bajarlo por ejemplo de
aquí:

http://sourceforge.net/projects/xampp/files/XAMPP%20Linux/1.7.4/xampp-linux-
1.7.4.tar.gz/download

Nos descargara un tar.gz. Cuando lo tengamos , abrimos una consola en nuestra distro y
descomprimir con:

tar xvfz xampp-linux-1.7.4.tar.gz -C /opt

Necesitamos por supuesto privilegios de root para poder escribir en /opt y estar situados en
la carpeta donde esta el tar.gz para poder descomprimirlo

Si lo habéis hecho bien veréis algo de este estilo:

Bien pues ya tenéis Xampp instalado, ahora vamos a hacerlo funcionar, tenéis que ser root y
usar el siguiente comando:

/opt/lampp/lampp start

y os aparecerá en vuestra consola:


Bien , una vez veáis esto, es que el
servidor esta arrancado (funcionando), siempre que queráis acceder a los archivos que
tengáis en el debéis tenerlo en este estado.

Cuando ya no lo tengáis que usar si queréis detenerlo(es lo mas recomendable), podéis usar
para detenerlo el siguiente comando:

/opt/lampp/lampp stop

y os aparece:

Vale si después del arranque os aparecen errores referentes a mysql o apache diciendo que
no pueden iniciarse o parecidos , puede ser debido a que tenemos corriendo otro servidor
Apache y debemos detenerlo para ello podemos usar(En Kubuntu, el que viene por
defecto):

/etc/init.d/apache2 stop

/etc/init.d/mysql stop

Vale , para curiosos de la seguridad, no es obligatorio hacerlo pero si alguno quiere proteger
su servidor , ya que recién instalado es accesible prácticamente todo (phpmyadmin,
mysql,ftp….), a cualquiera que tenga vuestra ip, es recomendable ejecutar:

/opt/lampp/lampp security

y por una serie de diálogos os ira preguntando a que queréis establecer contraseña y cual
es la contraseña que queréis establecer.

Ahora le toca a Easyphp:

Lo primero es bajarlo de su web oficial: http://www.easyphp.org/download.php

Yo para las capturas he usado la 5.3.6.


Lo siguiente es instalarlo, hacemos click en el instalador que nos hemos descargado y
aparecerá algo así:

A partir de aquí, es darle todo a next, simplemente hay que aceptar acuerdos de licencia y
elegir directorio de instalación y eso ya depende de vosotros.

Ahora con el EasyPHP instalado lo ejecutamos y veremos alguna de estas dos cosas:

En esta tenemos Apache y MySQL pulsando sobre ellos aparecen las opciones,
iniciar,reiniciar, etc…

¿Veis el icono de EasyPHP a la izquierda?, si pulsáis tendréis lo mismo que si pulsáis con el
botón derecho en el que hay en la barra de tareas, esto:
La opciones son las siguientes:

Iniciar: Inicia el servidor:

Explorar: Abre la carpeta WWW (En el siguiente volumen veremos para que sirve), esta
carpeta se encuentra en el directorio de instalación.

Configuración: Permite configurar Apache,Las extensiones de EasyPHP , el propio PHP y


MySql.

En volúmenes posteriores aprenderéis como introducir documentos para poder


interpretarlos con el servidor. Por ahora id trasteando y haciéndoos con el control del
programa que hayáis elegido.
Volumen III : Primeros pasos
¿Estáis preparados?, empezamos!

Supongo que la mayoría de vosotros estáis usando programas orientados al desarrollo de


sitios web, nosotros vamos a hacerlo con Quanta+ en Linux, pero es igual en todos los
programas ,lo único que varía es lo propio del programa (creación de proyectos , añadir
paginas etc..).

Bien, creamos un nuevo documento web (en algunos editores nos da la opción de
directamente crearlo como PHP otros como Quanta+ simplemente creamos un HTML, y
guardamos como .PHP volvemos a abrir y ya podemos escribir PHP).

Tendremos la estructura básica de un sitio en HTML algo como esto:

En Quanta+ si no os sale lo que aparece en la captura es necesario pulsar sobre el asistente,


es este icono:
Y simplemente darle a aceptar y ya tendremos lo que en la primera imagen.

Nosotros al programar PHP vamos a centrarnos en la etiqueta <body></body>(pero ojo,


todo lo demás tiene que estar no se os ocurra poner solo el <body></body> ) , no obstante
aquí os describo muy por encima qué es cada cosa:

<head></head> : En esta etiqueta esta todo lo referente a la cabecera de la web.

<title></title>: Titulo de la web

<meta>: Contiene metadatos relacionados con la web, pero quedaos con algo así como
para añadir información sobre la web.Si os fijáis <meta>, no necesita ninguna etiqueta de
cierre.

Bueno,ahora si que si, vamos a crear nuestro primer script (generalmente a los programas
escritos en lenguajes interpretados se les denomina scripts, digo generalmente porque no a
todos se les denomina de este modo) en PHP, va a ser el siguiente (primero escrito, luego
una captura y luego explicamos línea a línea lo que hace):

<body>

<?php
echo “¡Hola Mundo!”;

?>

</body>

Felicidades, ya tenéis el típico Hola Mundo en PHP, ahora notareis (porque seguro que lo
habéis intentado ya) que al dar a vista previa no os aparece Hola Mundo, es normal , eso es
porque el programa de edición o el navegador con el que lo habéis abierto no puede
interpretar PHP, para correr el script hay que usar los programas de los que hablamos
anteriormente, asi que vamos a ello.

En el caso de EasyPHP hay que meterlo en la carpeta WWW, en el caso de Xampp en


htdocs (necesitaras privilegios de superusuario).Ya se explico en el volumen anterior donde
estaban las carpetas en cuestión pero por si no lo recordáis, en el directorio de instalación
del programa.

Una vez dentro y con el servidor arrancado , ahora si podemos ver nuestro PHP , para ello
debemos ir a localhost con nuestro navegador favorito, y una vez ahí seleccionar nuestro
script que aparecerá ahí ( si dentro de la carpeta WWW o htdocs lo habéis metido en una
sub carpeta tendréis que desde localhost ir a esa carpeta).

En EasyPHP suele aparecer directamente y en Xampp al poner localhost te lleva a


localhost/xampp y tienes que quitar el /xampp y poner la ruta de tu script, por ejemplo la
mía es /Pruebas/holamundo.php , aunque aveces lo muestra directamente como el
EasyPHP

En Xampp (Linux) es obligatorio asignar permisos de escritura,lectura y modificación (si no


se asignan por defecto).

Si en Xampp no os deja acceder señalando que no tenéis permisos , aseguraos de los


permisos si los tenéis asignados y aun así no os deja, dejadlo en un comentario, que
seguramente haya que editar el fichero de configura de Apache.
Ahora vamos a explicar el código del script:

Como vemos el script comienza con <?php , esta linea tiene como única función anunciar al
intérprete que todo lo que hay después de ella es código php.

echo es una función del lenguaje (no exactamente pero por ahora quedaos como que sí lo
es) cuyo cometido principal es imprimir por pantalla.

; los puntos y comas separan sentencias dentro del script.

?> sería lo opuesto a <?php en este caso, ?> indica que todo lo que esta escrito después de
esa linea ya no es PHP.

Antes de continuar , comentar que como en casi todos los lenguajes modernos, en PHP
tenemos una documentación muy extensa sobre el lenguaje en la que podemos consultar
entre otras cosas las funciones del lenguaje(nombre,uso,ejemplos…), en el caso del echo,
seria la siguiente dirección web:

http://php.net/manual/es/function.echo.php

Anexo de este capitulo:

Como no podemos enumeraros todos los posibles errores que se pueden generar al escribir
código en PHP os vamos a mostrar lo que ocurre, es decir, lo que se muestra en el
navegador cuando se genera un para que simplemente sepáis que es un error de código.

<?php

echo "hola"

echo "adiós";

?>
Como veis falta el ; nuestro navegador mostrara:

Salida:

Parse error: syntax error, unexpected T_ECHO, expecting ‘,’ or ‘;’


in /opt/lampp/htdocs/Pruebas/pruebas.php on line 12

El próximo día seguiremos trabajando otras cosas más con el echo, como por ejemplo,
cómo imprimir dos cadenas diferente de forma separada. De cara al futuro nos vendrá bien.
También veremos inclusión de HTML dentro del php, y también veremos los comentarios
que son muy sencillos y agilizan mucho la escritura/lectura de código.
Volumen IV : Echo
Cuando nosotros escribimos una cadena de texto en PHP usamos echo y entre comillas la
cadena de texto, por ejemplo:

Hasta ahora lo hemos hecho así, pero PHP también nos permite separar esa cadena de
texto en varias del siguiente modo:

O con . lo que es llamado concatenación(Se vera en el futuro con mas precisión)

Otra de las peculiaridades de PHP que tienen que ver con el echo es la posibilidad de incluir
etiquetas HTML en el código PHP . Vamos a ver unos ejemplos con el echo.

Primero unos saltos de linea(en HTML la etiqueta para el salto de linea es <BR> o <br>)

Lo que imprimirá:

Ahora vamos a darle estilo “Titular” de HTLM solo al Zone.


Lo que imprime:

Espero que esto se haya entendido bien, porque iremos viendo etiquetas HTML dentro del
código durante el curso.

Pues esto es todo por ahora con el echo, asi que vamos con los comentarios.

En PHP hay dos tipos de comentario ,los de una linea y los de varias lineas , su sintaxis es la
siguiente:

// abre un comentario de una sola linea

/* abre un comentario hasta que se encuentre un */ puede ser de una linea o varias lineas

Este es un tipo de sintaxis de comentarios en PHP y la verdad es que son los que mas se ven
cuando se leen códigos.

También tenéis otro estilo de comentarios al estilo Shell de Unix:


Los comentarios estilo Unix son siempre de una sola linea.

Es aconsejable usar solo un tipo de sintaxis en vuestros scripts, ya que eso mejora bastante
la legibilidad del código. Usad la que queráis en cada script pero una vez que empecéis a
escribir en una quedaos con esa, al menos en ese script.

Bueno esta sesión ha quedado mas corta de lo normal pero es mejor no empezar con
variables , así que ya sabéis estad atentos que la siguiente es importante.
Volumen V : Variables
Pues bien , lo primero que vamos a ver hoy es la declaración de variables
en PHP y como mostrarlas por pantalla.

Para declarar una variable lo único que necesitamos es anteponer el


símbolo $ al nombre de la variable que queramos definir

El nombre no puede empezar con un número ni con algunos caracteres como los : , así que
recomendamos empezar con una letra o con un _ . Una vez hecho esto, igualar a valor que
queramos darle (atentos que si el valor es una cadena de texto va entre comillas dobles “”).
Lo veremos mejor con un ejemplo:

Como veis a continuación de la declaración he aprovechado para mostraros como se


imprimen por pantalla las variables. Es muy simple , se escribe el nombre de la variable con
el $ incluído entre las comillas de una cadena que se va a mostrar con echo y el propio
lenguaje sustituirá el nombre de la variable por su valor.

Ahora antes de continuar explicando una cosa referente a la representación de variables,


vamos a ver como se daría como valor un número:

Pues ahí lo tenéis sin comillas. Sé que estáis pensando que imprimiría lo mismo con
comillas que sin ellas, paciencia que cuando avancemos lo iremos entendiendo.

Ahora hablaremos de un tema que a más de uno le causa dolores de cabeza a pesar de ser
muy simple.

Hasta ahora hemos estado representando por pantalla todo mediante echo y una cadena
entre comillas dobles “”, bien pues hay otro método para representar por pantalla, echo
comillas simples ‘. Existe una principal diferencia entre estos dos métodos , cuando usamos
“” el intérprete sustituye el nombre de la/las variables por su valor, mientras que si usamos »
no lo hace, solo muestra el nombre de la/las variables en la cadena.

Marchando un ejemplo:
Y esto imprime lo siguiente:

hola REDESZONE
hola $redeszone

Existen alguna diferencia mas entre las dos formas pero por ahora vamos a quedarnos aquí
para empezar con tipos.

Tipos:

Como habéis visto, en las declaraciones de variables en PHP a diferencia de otros lenguajes
no hay que especificar el tipo (double,integer,string…), esto ocurre por que PHP es un
lenguajes dinámicamente tipado. No obstante aunque no sea necesario especificar el tipo,
los tipos EXISTEN! Así que, a por ellos:

El primer tipo que vamos a ver es el entero o Integer:

Pues como su nombre indica este tipo define números enteros, no hay mas que decir,
pueden ser positivos o negativos, y no solo admite notación decimal, también octal y
hexadecimal.
Nota: El numero entero máximo que PHP puede almacenar en un integer suele depender
de la arquitectura del procesador.

Ejemplos:

Float o número en coma flotante:

Números decimales del tipo X.XXX (ejemplos 2.313.|2.3…). No hay mucho mas que decir
excepto que PHP no solo admite la nomenclatura tradicional, sino que también pueden ser
introducidos en notación científica por ejemplo.

Ejemplos:

Booleanos:

Bien, los booleanos son variables que solo pueden tomar verdadero o falso, pero se puede
ver como 0 o 1. Es más, si se intenta representar un booleano verdadero mostrara 1 mientras
que si se intenta mostrar un booleano falso no se mostrara nada.

Ejemplo.
Null

Básicamente una variable sin valor, vacía.


Ejemplo.

Hasta aquí la sesión de hoy.

Antes de despedirnos, debéis saber que en la próxima sesión veremos Strings o Cadenas de
texto, sin duda el tipo más extenso de los que vamos a ver en las próximas sesiones, puede
incluso que nos ocupe una sesión entera, si no es así, incluiremos un poco de arrays (ya que
el tipo object lo veremos mas adelante).

Nos vemos en el siguiente volumen!


Volumen V : Variables II y Tipos
Hoy nos toca hablar del tipo String o Cadena de caracteres y de los arrays.
Tendremos una sesión larga y con “miniejercicio” al final.

Ya hemos visto cómo se declara una variable y cómo ésta adquiere el tipo
String (cuando es una cadena de texto $cadena = “hola”;), de lo que no se
había hablado hasta ahora es de los caracteres especiales o caracteres de
escape.

Los caracteres de escape sirven para representar caracteres, como el


propio nombre indica, especiales, por ejemplo los saltos de linea o
retornos de carro entre otros.

A continuación quedan expuestos algunos en esta lista:

n avance de línea

r retorno de carro

t tabulador horizontal

\ barra invertida

$ signo del dólar

» comillas dobles

Ejemplos de uso:

Que pasaría si dentro de una cadena queremos introducir precisamente ‘, pues sin
problemas, la escapamos:

Y si fuese con comillas dobles:


Escapando una barra invertida:

Quedaos por ahora con los sencillos como el símbolo del dólar. El resto lo iremos viendo si
es necesario durante el curso en ejemplos.

Ahora vamos a introducir dos nuevas formas de representación de cadenas de texto. Las
formas son las Heredoc (creemos que también se llama texto incrustado, por si lo veis por
ahí sabed que es lo mismo) y Nowdoc.

Heredoc, sería la representación de una cadena de forma literal , pero sustituyendo el valor
de las variables (expandiendo las variables). En este tipo de representación no hacen falta
escapar caracteres para representar caracteres especiales.

Ejemplo:

identificadordeinicio puede ser cualquier cadena de texto siempre que no se encuentre


dentro del texto. <<< se pone antes del identificadordeinicio para definir que empieza una
representación HEREDOC.

Después del identificadordeinicio no puede haber nada , ni siquiera un espacio en blanco, y


después del segundo identificadordeinicio tampoco puede haber nada, y este tiene que
estar sin tabulaciones es decir completamente a la izquierda.

Nowdoc: Hace exactamente lo mismo que HEREDOC pero sin sustituir el valor de las
variables.

Ejemplo:
Como podéis ver, la sintaxis simplemente difiere con la Heredoc en que en este caso se
añaden unas comillas simples al primer identificador de inicio

Comentaros antes de empezar con las Arrays que los identificadores en estas sentencias
típicamente suelen ser EOD y EOT.

También se puede añadir valor a las variables en formato HEREDOC o NOWDOC.

Vamos con los Arrays:

Un array o matriz (en algunos lugares podéis ver que las matrices o arrays son nombradas
como vectores o arreglos) un tipo de estructura de datos, la cual puede almacenar varios
valores en varias posiciones.

Para que lo entendáis mejor vamos a comparar un array con una tabla la cual tiene cada
casilla identificada por un número.

Si tuviésemos esa tabla y nosotros eligiéramos el índice o posición 2, estaríamos cogiendo el


valor MANZANA, fácil ¿no?, pues ese es el fundamento basico de los arrays. Pero los arrays
son mucho mas que esto, en PHP posen una increíble flexibilidad puesto que pueden
formarse con ellas otras estructuras de datos más complejas agrupándolas entre sí, no
obstante por ahora vamos a ver los arrays mas sencillos, los unidimensionales (los que se
parecen a una tabla con índices) y si en el futuro necesitamos formar estructuras de datos
mayores serán explicarán.

En las arrays necesitamos un índice (también llamado key,clave…) y un valor a almacenar, la


declaración de una array seguiría esta estructura:

$nombredelaarray = array(“indice” => “valor”,”otroindice”=>”otrovalor”….);

vamos a ver un ejemplo de declaración y uso de un array:


salida: redeszone

Tanto indice01 como indice02 pueden ser cualquier cadena de texto o un cualquier entero,
y comentar también que el operador => sirve para relacionar el índice (key ,clave…) con el
valor real al que corresponde.

También puede darse el caso de querer declarar la array sin índices, con lo que se van
asignando números del 0 al número de elementos del array:

Como veis, se asigna automáticamente a cada valor un índice siguiendo un orden


ascendente empezando por 0.

Caso particular

Este os toca a vosotros investigar con él a ver si sabéis como funciona (lo he dejado fácil con
el nombre de los valores), si tenéis dudas preguntáis por aquí, estaremos encantados de
contestaros siempre y cuando sepamos la respuesta.

Aclaración: Se ha introducido la etiqueta de salto de línea dentro del valor que se


almacena en el array con el fin de que se vea que pueden ser usadas etiquetas también
en el valor del array, pero no es recomendable hacerlo así, la forma correcta seria
metiendo salto de línea entre cada echo en el que se muestre algún valor del array
También investigad lo que se ha comentado más arriba sobre asignar el valor a las variables
en formato HEREDOC y NOWDOC. En el siguiente volumen antes de empezar con el nuevo
contenido , os daremos la solución de como se hace, aunque creemos que habiendo leído
el curso desde el principio no tendréis ningún tipo de problema para conseguirlo.

Nos vemos en la siguiente entrega , hablaremos un poco del cambio de tipos, el forzado de
tipos, y si no se hace muy pesado, también hablaremos de operadores.
Volumen VI : Constantes y variables predefinidas
A menudo necesitaremos definir constantes en nuestros códigos, para
ello bien podríamos crear una variable y no volver a asignarla valor, pero
mejor utilizamos la función define que nos permite asignar un valor que
no podrá ser manipulado.

Su sintaxis:

define ( “nombredelaconstante”, “valor”);

Simplemente ahora funciona igual que una variable pero no puede cambiar su valor y no
hay que ante ponerles $ y para representarlas no hay que usar “” ni » , simplemente un echo
seguido de la constante.

Variables predefinidas:

En PHP existen una serie de variables predefinidas, que almacenan cierta información. De
estas variables preestablecidas hay que distinguir entre las variables superglobales (serán
globales a todo el programa, es decir las podemos usar en cualquier parte, ya veremos más
adelante el ámbito de las variables) y las que no lo son.

Antes de continuar con este volumen aclarar, que en este, se van a explicar que son estas
variables, y para que se usan, no se van a dar ejemplos aún, pero serán usadas en futuras
sesiones por tanto serán explicadas, si no lo fueran, tendrían que ser buscadas por parte
del lector en la web oficial de PHP, donde se detallan.

Esta sería la lista de variables superglobales:


$_SERVER
$_FILES
$_GET
$_POST
$_SESSION
$_COOKIE
$_REQUEST
$_ENV
$GLOBALS

Estas variables predefinidas, en realidad son arrays, lo que quiere decir que como todo array,
tienen un nombre y una serie de índices asociados a unos valores.
La función de estas variables es proporcionarnos información. Como se puede ver, el
nombre del array, indica sobre que vamos a obtener la información en general, y el indicará
sobre que vamos a obtener la información en particular.

Vamos a verlo con un ejemplo porque explicado sin ejemplo puede resultar un tanto
confuso.

Ejemplo:
*Vamos a obtener el nombre del servidor y la dirección ip de un supuesto visitante que hace
una petición a nuestro servidor.

*CUIDADO: Para imprimir por pantalla este tipo de


variables no se usan “”.

Bien como se ve en el anterior script para mostrar el nombre del sevidor, se muestra el valor
asociado a ‘SERVER_NAME’ en la array $_SERVER.

El nombre de la matriz nos indica que vamos a obtener algo relacionado con el servidor, y el
índice nos dice que va a ser el nombre del servidor.

El procedimiento para mostrar la dirección del visitante es la misma pero cambiando el


índice.

El uso de las variables superglobales es muy parecido en muchos casos similar para todas y
se irá viendo en ejemplos a lo largo del manual.

Si queréis ver todos los índices de una array superglobal, podéis buscarla en la web oficial de
php.

Variables no superglobales:

Como se ha dicho anteriormente, existen variables predefinidas no superglobales.

Esta sería la lista de variables no superglobales:

$HTTP_RAW_POST_DATA
$http_response_header
$argv
$argc

Por ahora el uso de estas variables no es relevante , es conveniente saber que existen, pero
serán vistas en el futuro.
Nos vemos en el volumen siguiente , en el que por fin empezaremos con bucles y
sentencias de control.
Volumen VII : Bucles
Los bucles nos permiten repetir una serie de instrucciones hasta que se
cumpla una condición o mientras se cumpla una condición.

Bucle While

Este bucle nos permite repetir una serie de instrucciones mientras que se cumpla una
condición.

Su sintaxis seria la siguiente:

while(condicion)
{
Sentencias;
}# Fin del bucle, si no se cumple la condición.

Bucle Do

Este bucle hace lo mismo que el While, salvo por una diferencia, en éste, la condición se
evalúa al final del bucle, es decir aunque no se cumpla la condición , las sentencias del bucle
se ejecutaran al menos una vez.

Su sintaxis es la siguiente:

do{
Sentencias;
}
while(condicion);
## Fin del bucle, si no se cumple la condición.

Bucle For
El bucle For nos permite repetir una serie de instrucciones hasta que se cumpla una
condición.

El bucle For consta de los siguientes elementos:Un entero inicializado a un valor cualquiera,
un valor que indicara el final del bucle cuando el entero adquiera ese valor y una operación
de incremento/decremento al entero.

Su sintaxis seria la siguiente:

for(entero=valor;entero =,<,>…valor;entero++,entero–…){
Sentencias;
}#Fin del bucle.

*Donde dice =,<,> indica que esos son algunos de los operadores que podemos utilizar para
establecer el valor en el que terminará el bucle. Al igual que donde pone entero++,entero–
indica que puede ser cualquiera de las dos opciones entre otras.

Bucle Foreach

El bucle Foreach es generalmente usado para recorrer arrays.

Su sintaxis es:

foreach($array as $key=>$valor){
sentencias;
}#fin del bucle

La parte ($array as $key=>$valor) puede presentar un poco de complicación, sobretodo a las


personas que nunca antes hayan programado, así que vamos a explicarla un poco.

$array , es la array que vamos a recorrer


$key , puede ser cualquier variable, es simplemente como nos vamos a referir a los índices,
keys o claves de la matriz a recorrer.
$valor , puede ser cualquier variable, es simplemente como nos vamos a referir a los valores
asociados a los índices, keys o claves.
EJERCICIO para el próximo día.

Hacer una script que muestre la tabla de multiplicar del número 2 utilizando los bucles
explicados en esta sesión.

Hasta aquí dura la sesión de hoy, en el próximo volumen hablaremos sobre If, else , else if ,
break y continue.
Volumen VIII : If, else , else if , break y continue
Hoy aprenderemos las sentencias de control básicas como If, else, else if,
break y continue.

Estas sentencias son fundamentales para implementar condiciones.

A continuación tenéis el nuevo volumen.

Vamos a empezar viendo el uso del if.

Nota antes de empezar: Los códigos de ejemplo se presentan solos, sin la salida que
producirían ya que se alargaría demasiado el volumen . Lo ideal sería que copiáseis(mas
bien escribiéseis, ya que es una imagen) vosotros el código para ver que imprimiría en
pantalla.

El if es una estructura de control de flujo condicional, es decir ejecuta una serie de


instrucciones si se cumple una condición. Es decir algo así:

Si-se-cumple-esta-condición
{
ejecuto esta serie de instrucciones;
}

La sintaxis de un if, seria la siguiente:


if(condicion)
{
instrucciones a ejecutar; # Solo se ejecutan si se cumple la condición.
}#fin del if

Con un ejemplo se vera mejor:

Vamos ahora a ver para que se utiliza el else. El else es una sentencia que se utiliza siempre
junto con el if, el else sirve para establecer qué instrucciones se ejecutarán en el caso de que
no se cumpla la condición establecida por el if.

Si-se-cumple-esta-condición
{
ejecuto esta serie de instrucciones;
}si-no-se-cumple
{
ejecuto esta otra serie de instrucciones;
}

Sintaxis:
if(condicion)
{
instrucciones a ejecutar; # Solo se ejecutan si se cumple la condición.
}
else
{
instrucciones a ejecutar si no se cumple la condición; # Solo se ejecutan si no se cumple la
#condición
}

Unos ejemplos:

Vamos ahora con else if. Esta sentencia se usa para anidar varios if, es decir establecer
según varias condiciones unas u otras series de instrucciones a ejecutar.

if(condicion)
{
instrucciones a ejecutar; # Solo se ejecutan si se cumple la condición.
}
else if(condicion)
{
instrucciones a ejecutar;# Solo si se cumple esta otra condición.
}
else
{
instrucciones a ejecutar si no se cumple la condición; # Solo se ejecutan si no se cumple
#ninguna condición
}

Unos ejemplos:
Ahora vamos a ver las sentencias break y continue.

La sentencia break sirve para salir de el bucle o la anidación de bucles que se desee.

Mediante números podemos elegir hasta que bucle queremos salir en el caso de que
estemos en una serie de bucles anidados, si estamos en una anidación de 3 bucles y solo
queremos salir del último , podríamos usar break 1, si queremos salir de los 2 últimos break 2
y así sucesivamente.

Vamos a verlo con un ejemplo que se entenderá mejor.

La sentencia continue se utiliza en los bucles para saltar la iteración actual y continuar con
la siguiente en el bucle.
Veamos un ejemplo:

Antes de acabar con este volumen , os dejamos la solución al ejercicio del volumen anterior.
¡Os esperamos en el siguiente!
Volumen IX : Funciones
En el volumen de hoy vamos a ver las funciones en PHP.

Como muchos sabréis uno de los cometidos de la informática (entre


otros) es la automatización de procesos, trabajos o tareas (como queráis
llamarlos) repetitivas.

Los lenguajes de programación no olvidan esa tarea de automatización y


para ello entre otras cosas, ponen a nuestra disposición las funciones.

Las funciones no solo tienen esta utilidad, tienen varias, pero para muchos programadores
consideran la función mas importante la de automatizar un proceso que se repetirá X veces
durante la creación de un programa. Otra función es por ejemplo aportar más legibilidad al
código.

Tras esta aclaración vamos a ver como se crearían funciones en PHP

Funciones en PHP

La estructura de una función en PHP sería la siguiente:

function nombredelafuncion(argumentos)
{
Cuerpo de la función
}

*No os preocupéis por lo de argumentos, lo veremos mas adelante.

Para utilizar previamente programada en PHP, debemos llamarla cuando la necesitemos,


en la parte del código donde la necesitemos, eso se hará de la siguiente forma:

nombredelafuncion(argumentos);

y así, llamaríamos a nuestra función en PHP.

Vamos a ver un ejemplo de función que imprima en pantalla ¡Hola Redeszone!


Funciones con argumentos en PHP

Tranquilos , ahora viene la pregunta del millón que seguramente os estéis haciendo si
nunca antes habíais programado, ¿Qué es eso de los argumentos?

Los argumentos son una serie de datos o parámetros que se le pueden dar a una función
para operar con ellos.

Veamos un ejemplo, con una función que imprima un hola y el argumento.

Funciones que devuelven un valor

Una función puede retornar un valor por medio de la sentencia return. La sentencia return
indica que la función devolverá el valor siguiente a return.

La sintaxis de esta sentencia sería return valoraretornar;

Ahora al realizar una llamada a la función, hay que asignarle el resultado de la llamada a una
variable y luego imprimirla.

Ejemplo:

Funciones implementadas por PHP

Como en la mayoría de lenguajes de programación , PHP dispone de unas funciones


digamos ya programadas y que el programador puede usar a su gusto.

Un ejemplo serían las funciones para el manejo de cadenas de texto (strings), una de ellas
es por ejemplo int strlen(string $string);. Esta función lo que hace es devolver el número de
caracteres de la cadena de texto.

NOTA: int antes de una función en la ayuda de PHP, indica que la función devuelve un
entero, el string $string indica que la función recibe como argumento un string.
Veamos un ejemplo:

Como seguramente estéis pensando, es imposible explicar y enumerar todas las funciones
que nos brinda PHP.¡¡Pues en realidad no, es posible!!, están todas (o si no todas la gran
mayoría) en la ayuda de PHP (como siempre). ¿Qué queremos decir con esto?, pues
básicamente que nos llevaría muchísimo enumerar y explicar todas las funciones de PHP,
así que iremos explicando las que vayamos usando durante el manual, si necesitáis más
información sobre cualquier otra o ampliar la explicación la tenéis en la ayuda.

Anexo del volumen: Ámbito de la variables en PHP

En PHP como en otros lenguajes de programación las variables tienen un ámbito. Las
variables pueden ser globales o locales.

Que una variable sea global quiere decir que se puede acceder a ella desde cualquier punto
del código (parte principal del código,función…).

En PHP una variable es global cuando esta declarada en la parte principal del código,
digamos por ahora (ya que no hemos visto objetos) las que están fuera de las funciones.

Las variable locales por otro lado , se establecen dentro de las funciones y solo pueden
acceder a ellas las funciones donde están declaradas.

Si ahora mismo probáis desde una función acceder a una variable global veréis que no os
deja, veremos como hacerlo en volúmenes posteriores.

Esto es todo por hoy , nos vemos en el siguiente volumen, y ya sabéis cualquier duda, crítica
o comentario, lo dejáis abajo.

En el siguiente volumen veremos los Tipos de paso de argumentos y el ámbito de las


variables.
Volumen IX (Parte II). Argumentos y ámbito de las
variables
En la parte anterior de este mismo volumen vimos como se pasaban
argumentos a las funciones.

Si habéis estado programando con el tema de los argumentos y las


funciones os habréis dado cuenta de que cuando pasas un argumento a
una función, el argumento que has pasado, fuera de la función no
modifica su valor.

Veamos un ejemplo mejor , ya que esto puede resultar algo confuso.

Esto ocurre porque estamos pasando el argumento por valor. Podemos decir que al pasar
un argumento por valor, el intérprete lo que hace es crear una copia del argumento, esa
copia será pasada y luego será destruída quedando el valor inicial (aunque no es así
exactamente, pero no nos vamos a meter en estos temas).

Paso de argumentos por referencia

El paso de argumentos por referencia se diferencia del paso de argumentos por valor en
que los cambios realizados en el argumento, persisten fuera de la función, es decir, si
realizamos por ejemplo un incremento a un argumento pasado por referencia dentro de
una función, fuera de esa función, lo que le has pasado por argumento seguirá
incrementado.

Para pasar un argumento por referencia simplemente hay que añadir antes de él un & en la
declaración de la función.

Vamos con un ejemplo para que quede mas claro.


Ámbito de las variables y uso de Globals/$GLOBALS

Como comentábamos en el anterior volumen respecto a las variables globales, aunque


tengamos una variable global definida, no podemos utilizarla sin más dentro de una
función. Para solucionar este pequeño inconveniente existen varias formas, vamos a ver
algunas de ellas.

Uso de globals.

El uso de globals se reduce simplemente a poner dentro de una función


global variable_global_a_la_que_queremos_acceder para así, tener acceso a ella como
variable global.

Ejemplo:

Uso de Globals[‘variableglobal’]

Esta es otra forma de acceder a las variable globales. Se utiliza la variable superglobal
Globals[] de la siguiente forma Globals[‘variableglobal’] donde variableglobal es una variable
global ya definida.

Ejemplo:
Volumen X. include(),require(),include_once() y
require_once()
Hoy veremos la funciones include(),require(),include_once() y
Require_once().

Las funciones include() y require() , son practicamente iguales, sólo se


diferencian en un pequeño detalle, así como las funciones include_once()
y require_once() que también son casi iguales entre sí.

A continuación podréis ver las mínimas diferencias entre ellas y para qué
sirven.

Por esto, vamos a explicar con ejemplos include() e include_once().

La función include() sirve para incluir un archivo externo en el actual (con el que estamos
trabajando).

Pensemos por un momento que tenemos un archivo llamado suma.php, y en él tenemos


una función que suma los dos números (solo esa función) que se le den como argumentos.
Nosotros estamos realizando un proyecto en php que consta de diferentes archivos .php y
en muchos de ellos deberemos sumar dos números con una función, pues bien, ¿no sería
molesto tener que estar creando la función en cada uno de ellos si ya la tenemos creada en
suma.php?. Para evitar esto, existe include, cada vez que necesitemos sumar, podríamos
hacer un include(suma.php); y usar la función suma en nuestro archivo como si estuviese
declarada allí.

Éste sería uno de los usos de include(); , pero vamos a explicar cómo funciona. La función
include(); incluye todo un documento en texto plano, es decir, si contiene texto plasmará
texto, si contiene html plasmará html, si tiene html + php pues lo plasmará igual en el
documento donde esté el include();.

¿Que quiere decir esto?, pues básicamente que no sólo podemos incluir funciones, sino
también simple texto, un archivo php completo (variables,funciones…Todo).
Un punto a tener en cuenta es que si hacemos un include(); dentro de una función, la
inclusión estaría dentro del ámbito de esa función, es decir, no sería global, así que por
ejemplo no podréis usar variables del include(); que se ha hecho dentro de una función
fuera de la misma.

Ahora vemos como se utiliza include(); :

El uso de include(); es sencillo y se limita a include (la ruta del archivo que quieres incluir); la
ruta puede ser escrita directamente o estar contenida en una variable. La ruta también
puede ser remota, por ejemplo una web, include(http://www.google.es);.

Antes de ponernos con los códigos de ejemplo, vamos a ver la dichosa diferencia entre
require(); e include();. Básicamente la diferencia es que con require(); si el archivo no existe,
se genera un error y se interrumpe el script, mientras que con include(); solo se generará
una advertencia (warning).

Nota: si usáis versiones antiguas de PHP, es mejor que reviséis la documentación de vuestra
versión ya que hace relativamente poco, include() y require(), tenían más diferencias.

Vamos a ver unos ejemplos antes de ver para que sirve require _once() e include_once().

Otro ejemplo incluyendo variables:


Nota: Como ya vamos trabajando simultáneamente con varios archivos , podré un
comentario en el código cuál es cada archivo (en la parte superior).

Nos metemos ahora con require_once() e include_once(). Como he explicado antes, entre
ellas existe la misma diferencia que entre include() y require().

Tanto require_once() e include_once() simplemente lo que hacen es incluir sílo si éste no ha


sido incluido ya, si ha sido incluido, la función no hará nada.

Ahora, os vamos a dar un consejo haciendo algo que no nos gusta hacer (adelantarnos
comentando algo que no hemos visto) en este manual pero que vemos necesario.

Dentro de poco veremos la interacción de scripts PHP (tanto orientado a la creación de


web, como a scripts para ser ejecutados en consola) con el usuario, es decir , pedir
información al usuario y procesar esa información. ¿A qué viene esto aquí?, pues viene
básicamente a que cuando eso sea explicado tenéis que tener cuidado con el
include/require y pedir información.

No nos vamos a extender pero si estáis desarrollando un sitio web en PHP, ¡¡¡¡JAMÁS,
JAMÁS!!! podéis dar al usuario la opción de elegir que se incluye (ni local, ni remoto) sin
acotar el dominio de la inclusión (sin decir: sólo puedes incluir estas X rutas). Si dejáis que el
usuario sea quien elija qué se incluye en la web mediante un include/require algún día os
encontraréis posiblemente en el mejor de los casos un reporte de seguridad y en el peor un
deface/robo de bases de datos/borrado completo del site, backdors en fin…, hemos visto
muchas cosas ya ¿no?, para qué explicar que más puede pasar.
Volumen XI : Comunicación usuario-script
Tanto en este volumen como en su segunda parte que veremos dentro
de una semana, vamos a hablar sobre la comunicación del script con el
usuario.

Centrándonos en esta parte veremos la comunicación enfocada a


cuando estamos creando un sitio web, mientras que en la segunda
parte veremos la comunicación con el usuario cuando estamos creando
un script para consola.

Antes de comenzar con el grueso del manual, es importante advertir que


para comprender este volumen es necesario tener unos conocimientos
mínimos de lenguaje HTML (como bien se dijo en la introducción del
curso que se necesitaría).

Super globales $_GET[“”] & $_POST[“”]

Estos dos arrays superglobales, nos servirán para recoger toda la información que el usuario
introduzca en nuestro script.

El usuario podrá introducir la información de distintas “formas” y mediante dos métodos


definidos por el protocolo HTTP, estos métodos son GET y POST.

Como véis, cada una de las superglobales coinciden con el nombre de los métodos, cada
una recogerá la información que sea enviada por el método que hace referencia a su
nombre ($_GET recogerá la información enviada por GET mientras que $_POST recogerá la
enviada por POST).

La sintaxis para recoger la información no varía en cada una, se usan prácticamente igual,
sería de esta forma:

$_GET[“Nombre_de_la_variable_donde_esta_contenida_la_informacion]

Se verá mejor en los ejemplos, pero antes , vamos a explicar de que formas se puede
introducir la información.

Paso de datos por URL

Técnicamente hablando no es una forma de comunicación entre el usuario y el script,


podría usarse a modo de, pero sería muy confuso.
No obstante hemos decidido incluirlo aquí puesto que cuando la persona que está
diseñando la web fuerza a pasar una variable por url , si el usuario puede modificar el
contenido de esa variable, estaría pasando una información al script y en muchos casos
obteniendo algo diferente. Esta explicación puede resultar algo confusa, pero en los
ejemplos se entenderá mejor.

Para pasar datos por URL deberemos añadir a el nombre de nuestra pagina
?nombre_variable=contenido&nombre_otravariable=contenido&….
de esa forma podemos pasar desde 1 hasta las variables que queramos por url.

Os estaréis preguntado como se podría hacer eso de forma que el usuario no tenga que
estar escribiendo todo el rato la dirección con toda la ristra de variables, típicamente se hace
mediante links en HTML:

<a href=»”miweb.php’?variable=contenido»>Nombre del link</a>(Por ejemplo. Hay muchas


formas de linkear en html).

Una vez que el usuario ha pinchado en ese link nosotros podemos extraer el valor de la
variable del siguiente modo:

$_GET[“variable”] donde variable es el nombre de la variable contenida en el link.

NOTA IMPORTANTE: LAS Variables pasadas por URL siempre, SIEMPRE! , van por GET.

Vamos a ver un ejemplo en el que linkeamos desde una web a un texto, según el contenido
de la variable idioma mostramos el texto en ingles o en español.

Envío de información mediante formularios HTML.

Aviso: La parte de formularios HTML no será explicada con detalle en este manual.
Otra forma de comunicación es mediante los formularios HTML. Un formulario HTML
recoge la información mediante diversos elementos(cajas de texto, radio botones etc.). Esta
información es enviada a otra parte de la web (otra página) o a la misma mediante método
POST o GET. Todos los elementos del formulario HTML, van ligados a un nombre, mediante
este nombre recogeremos en nuestro script PHP los valores de esos formularios.

El nombre del elemento equivaldría a la variable cuando hablamos de paso de variables por
url es decir para recoger la información se haría de la siguiente forma:

$_GET[“nombre_del_elemento”] , igual con post.

Vamos a ver un ejemplo, el típico ejemplo de formulario de datos personales, vamos a


recoger los datos de una persona y a mostrarlos .

Ejemplo:

“Deberes”: No son de PHP, pero es necesario que cualquier persona que este programando
un sitio web o que tenga en mente hacerlo, conozca la diferencia entre el envió mediante
POST y GET, así que si no la conocéis buscadla.

Os agilizamos un poco la búsqueda dandos un poco de información sobre POST y GET_

GET pasa automáticamente siempre las variables por url,POST no.


Debido a la diferencia enunciada mas arriba GET puede utilizarse directamente , sin
formularios.POST no.
Las variables enviadas por GET tienen límite de tamaño,POST no.
GET es usado típicamente para pedir información o enviarla cuando no va a ser procesada,
mientras que POST suele ser utilizado para enviar información que va a ser procesada o
usada por algo(almacenada,actualizada…).
Ya hemos terminado por hoy, pero antes de despedirnos, os dejamos a vuestra elección si
queréis que se haga un apéndice del manual explicando de forma algo más amplia como
usar los formularios HTML. Si queréis que se haga, dejad un comentario abajo y si vemos
que hay un número aceptable de comentarios pidiendo el apéndice lo haremos sin ningún
problema.
Volumen XI : Comunicación usuario-script (parte II) +
Introducción a ejecución en consola
Aunque PHP en principio fue diseñado para la creación de sitios web
dinámicos, el lenguaje con el paso de los años se fue ampliando,
superando así ese horizonte y convirtiéndose en un lenguaje de scripting
muy completo.

Debido a esta evolución, PHP puede ser ejecutado en una consola como
cualquier otro lenguaje de scripting, también es posible realizar
interfaces gráficas para código PHP pero en este manual no vamos a
tocar ese ultimo tema y a centrarnos por lo menos en esta parte en la
ejecución en consola.

Como nunca antes hemos hablado de la ejecución en consola vamos a


hacer una introducción antes de ponernos con la comunicación que es lo
de lo que realmente va este volumen.

Introducción a la ejecución en consola

Para ejecutar PHP en consola, no es necesario tener instalado Apache, simplemente es


necesario tener instalado PHP. PHP puede bajarse directamente desde su web e instalarse,
nosotros optamos por instalar XAMPP o algún paquete similar, con eso nos vale. No
obstante os dejamos la dirección por si algún día queréis instalarlo por separado por
ejemplo para ejecutar solo en consola.

http://www.php.net/downloads.php

Como nosotros ya lo tenemos instalado, vamos a usar el que ya tenemos (os iremos
explicando qué hacer si lo habéis descargado he instalado de forma separada).

Ahora os vamos a explicar que aspecto tiene un script destinado a la ejecución en consola:

Como podéis ver , no tiene ni parte <body>,ni <head> ni nada(no nos hacen falta no
estamos codeando una web), simplemente un código en PHP.
Como se ejecuta un script PHP en consola:

Para ejecutar el script deberemos poner en nuestra consola(Terminal,Konsole,Simbolo del


sistema,…)

En linux:

php rutadelscript/script.php argumentos_si_fueran_necesarios

En windows:

“ruta_de_php/php” “rutadelscript/script.php argumentos_si_fueran_necesarios”

Tras poner esa linea en la consola, el contenido del script se mostrara en la consola.

Nota: En estas dos capturas, como se puede ver los scripts no llevan argumentos,luego
veremos un ejemplo de como ejecutar un script con argumentos.

Como se programa para consola:

Se programa exactamente igual que cuando estamos desarrollando una web, simplemente
hay que pensar que no estamos ejecutando el código en un servidor, por tanto las
superglobales referentes a información del servidor no estarán disponibles,tampoco estarán
disponibles ni POST ni GET.

Y ahora por fin , la comunicación (recoger datos del que introduce el usuario) del script
en consola.

La comunicación en consola se hace por medio de argumentos que se incluyen al ejecutar


el script, no se puede pedir información al usuario mientras el script esta en ejecución.

Tenemos dos arrays (en realidad $argc no es un array) principales para interactuar con los
argumentos, son $argv y $argc.

$argv recoge todos los argumentos y pone cada uno en un índice empezando por el índice
1 (el 0 es el nombre del script), mientras que $argc recoge el numero de argumentos que
han sido pasados al script.
Veamos un ejemplo antes de terminar:

Vamos a mostrar todos los argumentos (de dos formas) y el número de ellos,

Y ahora vamos a llamarlo desde la consola pasando algún argumento y vemos como se
muestra en consola:

Por hoy hemos acabado, nos vemos en el siguiente volumen,que será de ejercicios
prácticos.
Volumen XII: Ejercicios I
Los ejercicios podrán ser realizados tanto en consola como ejecutando en
un servidor (a menos que se indique alguno de los métodos como
obligatorio), eso ya depende de vosotros.

A continuación os dejamos con el listado de ejercicios que os


proponemos en el entrega de este miércoles.

Lista de ejercicios:

Ejercicio 1:

Realizar un script que sea capaz de dar la vuelta (es decir representar empezando por el
final) una cadena de texto (string) dada por el usuario.

Ejercicio2:

Realizar el ejercicio 1 , pero usando funciones.

Ejercicio3:

Ampliar el ejercicio 2 , para que nos muestre el numero de vocales que tiene la string antes
de darle la vuelta (usando funciones).

Ejercicio4:

Separar las funciones de dar la vuelta a un string y contar sus vocales en dos archivos .php
diferentes, y usar esas funciones incluyendo esos archivos en otro llamado por
ejemplo funciones.php.
Volumen XII : Ejercicios I parte II. Solución
En esta entrega exponemos las soluciones a los ejercicios planteados el
miércoles.

Cualquier duda que tengáis, podéis poner un comentario donde os


responderemos encantados.

A continuación os proponemos una posible solución a los cuatro


problemas planteados.

Solución Ejercicio 1:

Explicación (mirar también los comentarios del código):

Lo que hacemos es recibir una cadena y averiguar su longitud, luego mostramos la longitud
simplemente por comodidad.

Copiamos la cadena (igualando las variables aunque se podrían usar otros métodos) a una
nueva variable en nuestro caso $_cadena_invertida.

Ahora empezamos a recorrer con un bucle las posiciones de $_cadena_invertida en orden


ascendente y las de $cadena en orden descendente a la vez que copiamos(como antes
igualando las variables) , la posición de $cadena a $_cadena_invertida.

Por último , mostramos el resultado con $_cadena_invertida.

Solución Ejercicio 2 y 3:
Explicación:

La primera función es simplemente igual que el ejercicio 1 pero pasando la cadena como
argumento de la función.

La segunda función lo que hace es recibir una cadena como argumento y pasarla a
minúsculas, una vez ahí compara cada letra con las vocales, si encuentra una coincidencia
suma 1 a una variable llamada $vocales que representa las vocales encontradas.

Solución Ejercicio 4:

Explicación:

Las funciones están definidas en el archivo funciones_ejercicio.php, lo que hacemos es un


simple include y ya podemos usarlas en el código con el que estamos trabajando

Los ejercicios han sido realizados para ser ejecutados en un servidor html, no obstante no
hemos puesto ningún método de recogida de datos (simplemente hemos puesto una
variable que representaría al dato , en este caso la string) para no confundir a la gente que
lo hagan en consola, pero como bien sabéis si lo hacéis en consola tendréis que usar argv y
si lo hacéis en servidor, pues por ejemplo formularios HTML.
Aquí termina el volumen de hoy, el próximo miércoles volveremos a ver teoría y si no hay un
cambio de planes empezaremos a ver objetos.
Volumen XIII : Orientación a objetos en PHP
Primero explicaremos que es eso de la programación orientada a objetos
y en que se diferencia de lo que hemos estado haciendo hasta ahora.

¿Os parece interesante?, pues vamos con ello.

La programación orientada a objetos (POO), es un paradigma de


programación, que como su propio nombre indica usa objetos como
base. La POO nació entorno a los años noventa, no obstante hoy en día se
sigue utilizando, y muchos lenguajes de programación dan soporte para
ella, algunos ejemplos de lenguajes que aceptan el paradigma de POO
son , Java, C# o C++ , entre otros, y como no, PHP también.

Como bien se ha citado arriba, la POO se basa en objetos, ¿pero qué es exactamente un
objeto?, pues un objeto no es más que una unidad pequeña dentro de todo el código que
en tiempo de ejecución realiza una o varias tareas, y que se relaciona con otros objetos si es
(objetos con objetos).

Un objeto tiene un comportamiento especifico dentro del programa, ese comportamiento


viene definido por unos métodos que modifican o consultan el estado del objeto. El estado
del objeto viene dado por los atributos.

Podemos hacernos una idea básica, simple y por tanto no exactamente correcta, como que
un objeto es una agrupación de una serie de datos relacionados y una serie de acciones que
tienen que ver con esos datos.

Dicho así puede sonar un poco abstracto y difícil de entender pero no os preocupéis, pronto
entenderéis esa definición.

Para definir objetos, necesitamos la clases. Las clases son en sí una “plantilla”, o una
definición (si se prefiere) que se usan para dar “forma” a los objetos. Por así decirlo, los
objetos se crean a partir de las clases. Por ello decimos que “un objeto es una instancia de
una clase en tiempo de ejecución”.

Ya que sabemos que ahora definimos los objetos con las clases en nuestro código, vamos a
pasar a ver los elementos que tiene una clase y su estructura independientemente del
lenguaje en el que estemos programando (en volúmenes futuros empezaremos a ver como
se usa todo esto que estamos aprendiendo en PHP).

Por ahora vamos a ver la idea básica de clase y por tanto sus elementos básicos.
Una clase debe de poseer un nombre, una serie de métodos y unos atributos, así de simple,
ya lo iremos complicando. En el Curso de Java ya habéis aprendido muchas cosas sobre
esto.

Vamos a ver que es cada una de estas cosas.

Un nombre, es un nombre, no tiene más , simplemente es un nombre que definiría a la


función en el código , y con ese nombre nos referiremos a esa función.
Por conveniencia, se suelen dar nombres de sustantivos singulares a las clases, cuando nos
pongamos a programarlas veréis por qué.

Un atributo, es simplemente un dato asociado al objeto/clase que estamos creando, ese


dato bien puede ser por ejemplo una variable.

Un método es una “acción” que realiza el objeto, y que suele acceder a los atributos ya sea
para modificarlos o consultarlos. Ya veremos como se escriben métodos en PHP.

Antes de acabar, vamos a ver con ejemplos del mundo real que podría ser una clase en
nuestro código.

– Pues uno de los ejemplos que se pone casi siempre para este tipo de cosas es un coche,
vamos a ver qué nombre tendría la clase coche, qué atributos y qué acciones (algunas/os de
ellas/os).

El nombre de la clase esta claro: Coche

Atributos: Hay que buscar ideas que estén relacionadas con un coche y en este caso, esas
ideas tienen que definir al coche.

Algunas de esas ideas pueden ser: Ruedas, Luces, Gasolina, Color, Marca, Modelo….

Métodos:Los métodos serían las acciones que realiza el propio coche, por ejemplo, arrancar,
frenar, indicar el nivel de gasolina, encender/apagar las luces…

– Vamos a ver algún ejemplo más como por ejemplo una clase persona:

Nombre: Persona
Atributos: Edad, Altura, Peso…
Métodos: Saludar, Levantarse, Sentarse, Hablar,….

Ahora «Deberes» para el próximo día: Estructuraos (como en los ejemplos) una clase
teléfono móvil que será con la que empezaremos a programar en el volumen siguiente.

Esta parte es muy importante entenderla bien, ya que el paradigma POO es muy usado en
la actualidad y muy potente, si de verdad te gusta la programación y quieres aprender a
programar, si vas a seguir aprendiendo cuando este curso acabe, ya sea PHP u otro
lenguaje, si entiendes estas nociones básicas , será mucho mas fácil abrirte camino con
cualquier lenguaje que soporte POO e ir ampliando mucho más la información sobre este
paradigma.
Volumen XIV : Solución ejercicio de herencia + Clases
Abstractas + Poliformismo
Hoy vamos a solucionar el ejercicio propuesto de herencia, en el que planteábamos cómo
hacer el inventario de una tienda de teléfonos móviles, es decir los teléfonos móviles en sí.

¿Te has perdido alguna entrega? Aquí tenemos el recopilatorio de Curso de PHP.

A continuación tenéis la entrega de hoy.

Para esta solución, hemos creado una clase teléfono_movil y hemos heredado un clase
teléfono(Xperia Arc) de ella.

En la primera clase la hemos instanciado como un HTC Desire HD

En la clase heredada hemos modificado el constructor para que los parámetros marca y
modelo sean asignados como Xperia Arc. Posteriormente con la clase instanciada hemos
usado métodos de la clase base para que veáis que no necesitamos definirlos de nuevo.
Salida:

CLASES ABSTRACTAS

En muchas ocasiones nos veremos en situaciones en las que necesitamos programar un


serie de clases pero no podemos dar a algunos o a todos los métodos una definición
todavía.

Cuando nos vemos en esta situación, lo más usual es recurrir a las clases abstractas.

Las clases abstractas son un tipo de clases que no se instanciarán, simplemente sirven
como una plantilla para crear otras clases a partir de la herencia.

Lo peculiar de estas clases es que permiten definir métodos abstractos, que para
entendernos son métodos que solo están definidos , es decir no tienen cuerpo solo su
definición. Podríamos decir que el método no hace nada hasta que es sobrescrito en una
situación de herencia aunque no sea realmente cierto.

Para definir una clase abstracta deberemos anteponer la palabra reservada abstract antes
de la declaración de la clase.
Abstract class mi_clase_abstracta {

Para definir métodos abstractos debemos hacer exactamente lo mismo pero esta vez con la
declaración del método.

Abstract class mi_clase_abstracta {

#MÉTODOS

abstract function mi_metodo_abstracto();

Ejemplo de clase abstracta sencilla:

POLIMORFISMO

Es hora de hablar del polimorfismo, vamos con ello.

El polimorfismo es una característica que tienen todos lo lenguajes, o al menos deberían


tenerlo. El polimorfismo consiste en que dos clases diferentes, generalmente descendientes
(que heredan de otra), tienen métodos iguales pero que en cada clase realizan acciones
diferentes.

Bien pues hasta aquí el volumen de hoy, se que se nos hace corto a todos pero , no
queremos empezar con visibilidad por ahora ya que es un tema que es mejor explicarlo por
separado cuando todo esto ya esté muy asentado.

En el próximo volumen daremos visibilidad y si nos da tiempo algo más. Seguro que
algunos de vosotros ya habréis investigado y os habréis dado cuenta de que estamos
usando para definir atributos en las clases var y eso esta obsoleto (Deprecated), es de PHP 4,
si es así nos habéis pillado, pero en realidad estaba todo preparado, en el volumen siguiente
veremos como deshacernos del var usando palabras reservadas para la visibilidad.
Volumen XV : Visibilidad
Como ya comentamos en el anterior volumen, en este volumen nos
vamos a olvidar del VAR a la hora de declarar atributos de clases. La
razón de esto es simplemente que VAR esta obsoleto (deprecated) en
PHP 5.

¿Que hacia VAR exactamente?, la respuesta es declarar el atributo como


Public, ahora veréis que es y lo comprenderéis todo.

Visibilidad, palabras reservadas.

Para este volumen de visibilidad vamos a ver 3 palabras clave Public, Protected y Private.
Vamos a ver qué hacen.

Public: El atributo/método puede ser accedido desde cualquier sitio(que lo permita) sin
restricción .
Protected: Solo puede ser accedido desde la propia clase y desde una clase que hereda de
ésta.
Private: Solo puede ser accedido por la clase en las que esta definido el método/atributo
privado.

Como estaréis pensando, para acceder a métodos/atributos protegidos y privados,


tendremos que acceder desde otros métodos de la clase, no podremos llamar al
método/atributo directamente con nombredeinstanciacion->metodo/atributo.

Visibilidad en atributos

Para asignar una visibilidad a los atributos de clase, lo que tenemos que hacer es
simplemente sustituir el VAR que poníamos antes (con el que aprendimos a crear las
clases) por una de las palabras reservadas vistas anteriormente.

Vamos a ver unos ejemplos de visibilidad de atributos.

En la captura tenéis unos atributos con visibilidad y unos intentos de acceso a ellos. En el
comentario pone si sería válido o no el acceso. También el código que genere error está
comentado, podéis copiar el código y descomentarlo para ver que pasaría en las situaciones
de error.
Visibilidad en métodos

Para asignar una visibilidad a los atributos de clase, hay que anteponer al function, la
palabra reservada que elijamos según que tipo de visibilidad queramos darle.
Visibilidad en situaciones de herencia.

Aquí dejamos un ejemplo de visibilidad con herencia.

Esto es todo por hoy, sabemos que es bastante corto pero esperamos poder ponernos con
volumenes más largos.
Volumen XVI : Final y static
En este volumen vamos a ver dos palabras reservadas muy relacionadas
con las clases, final y static.

A continuación tenéis el volumen de hoy.

Empecemos por la parte de FINAL.

La palabra final , nos permite hacer que un método no pueda ser sobrescrito por una clase
que hereda de ella (clase hija).

También nos hace posible definir una clase final, de la cual no se podrá heredar.

Vamos a ver un ejemplo:

¿Ha sido fácil no?, esto es todo sobre final.

Vamos ahora con STATIC.


Static nos permite crear métodos los cuales no necesitan una instancia de clase para ser
llamados, estos métodos se llaman estáticos.

También se nos permite crear atributos static que no podrán ser accedidos desde una clase
instanciada pero sí desde métodos estáticos.

Importante: Un método estático no puede acceder a un atributo no estático, es importante


simplemente porque es un problema común que puede darnos quebraderos de cabeza.

Dentro de un método para acceder a un atributo (estático), debemos usar el


operador self seguido de un :: ($this no está contemplado cuando estamos hablando de
métodos estáticos)

self::atributoestatico;

Para llamar a un método estático (sin instanciar la clase), lo que tenemos que hacer es
poner el nombre de la clase , seguido de un operador de resolución de ámbito, es decir un ::
y el nombre del método.

Nombredelaclase::nombredelmetodo

Para acceder a un atributo, es igual pero con el nombre del atributo.

Ejemplo de clase con métodos estáticos:


Bueno, esto ha sido todo por hoy, ¿corto verdad?, la razón es que este es nuestro último
volumen de clases como tal, el resto sobre clases que veamos será en el futuro o en
volúmenes dedicados a otras cosas pero que estén relacionadas con las clases o hagan uso
de ellas.
Volumen XVII : Cookies
Antes de ponernos a ver como utilizamos nuestras cookies en PHP, sería
conveniente explicar qué es una cookie.

Una cookie no es más que un bloque (muy muy pequeño)


de información que se almacena en el lado del cliente (hablando de
servidores HTTP). Este bloque de información es enviado al servidor que
creó la cookie originalmente incluyéndola en la sección de cabecera de la
petición.

La cookie enviada puede tener algún significado (representar una información X) para un
servidor o no. En el caso afirmativo, esa información representativa será usada para ejercer
algunas acciones internas del servidor.

Un ejemplo, cuando nosotros visitamos una tienda online, muchas veces aunque no nos
registremos, si agregamos algo al carro, cerramos y volvemos abrir la web, veremos que
seguimos conservando los artículos en el carrito. Esto ocurre porque esos artículos han sido
guardados junto a una identificación en una cookie y al reenviarla nuestro navegador, el
servidor detecta que tenemos ciertos artículos en el carrito. Ya vimos qué pasa al aceptar
las cookies.

Bien, como ya están explicadas, vamos a ver como crear y manejar cookies en PHP, manos
a la obra. Siempre puedes bloquear o aceptar cookies en una web.

Para generar cookies en PHP, vamos a usar la función setcookie(), es la función principal
para esta tarea. Esta función recibe varios argumentos por este orden:

NOMBRE (El nombre de la cookie)


VALOR (El valor que queremos guardar en la cookie)
TIEMPO DE EXPIRACIÓN (El tiempo que va a tardar la cookie en expirar desde la fecha
actual (usando time()), en segundos)
RUTA (Ruta de la cookie, donde va a ser valida)
DOMINIO (Dominio para el que se define la cookie. Generalmente sirve para hacer visible la
cookie para todo el servidor/dominio que envía la cookie)
SEGURA (Indica si la cookie sólo puede transmitirse mediante SSL)
SOLOHTTP(La cookie solo puede ser accedida por html no por lenguajes de scripting, tipo
javascript)

Vamos a ver un ejemplo sencillo de como crear una cookie:


Ya que sabemos crear cookies , vamos a ver como recuperar los valores de una cookie ya
creada.

Todas la cookies que recibe nuestro servidor en las cabeceras de las peticiones PHP las
guardará en una array superglobal (ya vimos que eran este tipo de arrays)
llamada $_COOKIE[].

La utilización de este ARRAY es fácil, simplemente hay que meter como índice el nombre
de la cookie y estaremos accediendo a su valor.

Antes de despedirnos por hoy, os vamos a dejar un ejemplo en el que se ve de forma fácil
cómo se usan las cookies. En este ejemplo vamos a ver si está creada la cookie idioma, si es
así mostramos un mensaje en el idioma que tenga almacenada la cookie como valor, si no
es así la creamos con el valor inglés.

Esto es todo por hoy , una sesión corta pero útil, podéis ir investigando más sobre la cookies
mientras esperáis al miércoles que viene para poder seguir aprendiendo nuevas cosas
sobre PHP.

Os esperamos!
Volumen XVIII : Sesiones
A continuación, tenéis la sesión de hoy.

Para usar una sesión en PHP , lo primero es saber como iniciar una sesión , se hace de la
siguiente manera , simplemente hay que llamar a la función session_start() y ella sola se
encarga de crear la sesión.

En todos los scripts que vayan a tocar cualquier sesión se debe hacer un session_start().

Nota: Como véis, la sesión se inicia antes de cualquier tipo de html, tanto es así que está
fuera de las etiquetas.

Ahora, una vez creada la sesión, vamos a “operar” un poco con ella.

Como hemos dicho antes, las sesiones son un conjunto de información que perdura hasta
que el usuario cierra el navegador. Esa información se almacena en variables de sesión.

Las variables de sesión residen en una array llamada $_SESSION[], esto quiere decir que
vamos a usar mucho esa array para crear y recuperar variables de sesión.

Vamos a ver como crear una variable de sesión y como recuperarla (recuperar su valor):

La primera linea del código crea la variable y establece el valor de la variable, la segunda
linea recupera el valor y lo muestra por pantalla.

Nota: Si no habéis modificado el php.ini, en principio os debería dejar crear variables de


sesión igual que en ejemplo, si no es así, es por que por alguna razón habéis modificado el
php.ini activando o desactivando ciertas opciones que os obligarán a usar la función
session_register() a pesar de haber sido declarada obsoleta.
Ahora que ya sabemos almacenar información en las sesiones,vamos a jugar un poco más
con el concepto global de sesión (es decir, abarcando toda la información dentro de una
sesión propiamente dicha), lo primero que vamos a ver es como establecer y cómo
consultar el nombre de una sesión.

Para esta tarea vamos a utilizar la función session_name(); esta función realiza una tarea u
otra según el valor que le pasemos como argumento, si no le pasamos nada, nos devuelve
el nombre de la función, si le pasamos algo como argumento, establece ese argumento
como nombre de sesión.

Nota: Si se cambia de nombre a una sesión y se quiere acceder a ella desde otro punto del
proyecto (otra parte de la web/otro script) es necesario hacer un session_name(nombre)
donde nombre, el nombre de la sesión que queremos usar, es decir el nombre al que le
hemos puesto a la sesión

En el código se muestra el nombre de la sesión antes y después de ser cambiado, es decir el


nombre por defecto y el nombre cambiado.

Vamos ahora a ver como liberar una variable de sesión y como terminar la sesión cuando
nosotros queramos y no cuando se cierre el navegador.

Para liberar una variable:

Nota: En versiones anteriores de PHP existía la función session_unregister() que ahora esta
obsoleta.

Si queremos liberar todas la variables usaremos la función session_unset()

Ahora, si quisiéramos borrar la sesión usaremos session_destroy(). Session_destroy() no


borra las variables de sesión sino la cookie de la sesión.
Por esto es recomendable antes de destruir siempre usar session_unset() y borrar la cookie
(esto útimo lo veremos en algún ejemplo)

Ejercicio: Crear dos partes de una web una que se llame index.php y cree una sesión y otra
que se llame como se quiera y que muestre la información de la sesión, libere las variables y
luego borre la sesión.
Volumen XIX : Sesiones II (ejercicio) e introducción a
ficheros
Lo primero de todo, vamos a dar una posible solución al ejercicio de
sesiones que planteamos la semana pasada.

A continuación tenéis el ejercicio resuelto y la introducción a los ficheros.

Primero vamos con el index.php

Como veis en esta parte, creamos la sesión y también unas cuantas variables de sesión.
Ponemos un link a la pagina que la mostrará.

Ahora mostrar.php
Mostramos las variables de entorno sin más.

Manejo básico de ficheros en PHP

Ahora que ya nos hemos afianzado un poco con las sesiones vamos a ver un poco el manejo
básico de ficheros en PHP.

Antes de empezar a manejar ficheros, es importante comentar que no vamos explicar paso
por paso algunas funciones como por ejemplo filesize() que devuelve el tamaño de un
fichero de texto, o file_exists()que comprueba si existe el fichero. Si se tienen dudas con
alguna de las funciones usadas pero no explicadas aquí, se pueden hacer dos cosas
preguntar o buscar en la ayuda oficial de PHP.

Una vez dicho esto, vamos a ver ficheros.

Vamos a empezar por la función fopen() que es una de las funciones básicas para el trabajo
con ficheros, esta función, si es de las que vamos a ver en profundidad, vamos con ella.

La función fopen() nos sirve para abrir un archivo, para ello necesitamos pasarla dos
argumentos, el primero es la ruta del archivo/nombre del archivo (si está en el directorio en
el que está el script) que queremos abrir, y la segunda un flag que indicará el método de
apertura.

Los métodos de apertura son los siguientes:


‘r’ Apertura en modo solo lectura, situando el puntero al principio del fichero.

‘r+’ Apertura en modo lectura y escritura, situando el puntero al principio del archivo.

‘w’ Apertura en modo sólo escritura; situando el puntero al principio del archivo, elimina
todo el contenido previo del archivo. Si el archivo no existe intenta crearlo.

‘w+’ Apertura en modo lectura y escritura; situando el puntero al principio del archivo,
elimina todo el contenido previo del archivo. Si el archivo no existe intenta crearlo.

‘a’ Apertura en modo sólo escritura; situando el puntero al final del archivo. Si el archivo no
existe se intenta crear.

‘a+’ Apertura en modo lectura y escritura; situando el puntero al final del archivo. Si el
archivo no existe se intenta crear.

Existen otras 4 pero si las vemos, será más adelante.

Nota: Al abrir un fichero en PHP hacemos uso de un puntero, que indica desde donde
vamos a empezar a realizar las acciones pertinentes, si está en el principio del archivo,
empezará desde ahí sobrescribiendo lo que se encuentre por delante (hasta donde
sobrescriban esas acciones, si no sobrescriben todo, quedará rastro del contenido anterior),
en cambio si el fichero esta al final añadirá contenido, al contenido que hubiese
previamente, por último si el puntero está en otro punto, las acciones empezarán desde ahí
conservando todo lo que este tras el puntero y sobrescribiendo el resto con las nuevas
acciones (hasta donde estas ocupen, si no sobrescriben todo, quedará rastro del contenido
anterior).

La función fopen() devuelve un descriptor de fichero, que es algo así como un identificador
del fichero sobre el que estamos trabajando y que será solicitado por muchas funciones
usadas para manejo de archivos.

Ejemplo de uso de la función fopen():

Nota: en el ejemplo se comprueba previamente si el archivo existe, y se usa fclose() para


cerrarlo, fclose() lo veremos mas adelante.

Cerrar un archivo

Tan simple como pasarle a la función fclose() el descriptor del archivo.(ejemplo arriba).
Hasta aquí hemos llegado, la semana que viene seguiremos con ficheros y empezaremos a
leer/escribir ficheros.
Volumen XX : Manejo básico de ficheros
Vamos primero a ver como se escriben archivos para posteriormente
leerlos.

Antes de empezar , es recomendable leer de nuevo el volumen anterior para repasar las
formas de apertura con fopen de los ficheros.

Escritura de ficheros.

Para escribir un fichero en PHP, lo primero que necesitamos hacer es abrir el fichero como
hacíamos en el volumen anterior.

Una vez abierto, usaremos fputs() que en realidad es un alias de fwrite().

fputs(), recibe como argumentos lo primero el descriptor de fichero devuelto por fopen en
la apartura, en segundo lugar recibe la cadena que va a ser escrita, en tercer y ultimo lugar ,
opcionalmente recibe una cantidad(length) que lo que hace es detener la función cuando
se alcance el la cantidad especificada de datos escrita .

Un ejemplo:

Lectura de ficheros

Para leer un fichero , al igual que para escribirlo hay que abrirlo, aunque antes es
conveniente comprobar si existe, para ello podemos usar file_exist().

Una vez abierto , vamos a usar fread() para leer los datos contenidos en el fichero.

fread() recibe como argumentos un descriptor de fichero una cantidad a leer. Si se


especifica cantidad mayor al tamaño del fichero, generalmente fread() termina de leer en
EOF(End of file), aunque también puede parar por otro tipo de eventos que quizá
comentemos más adelante en el curso.

Por ultimo decir que la cadena leída es devuelta por fread().

Ejemplo:
Existen otras funciones para leer ficheros como por ejemplo fgetc() que obtiene un carácter
desde donde esta situado el puntero del fichero en ese momento, después de leer avanza el
puntero.

La función recibe el descriptor de fichero.

Cuestiones relacionadas con la situación del puntero en el fichero.

Como comentamos en el volumen anterior, cuando abrimos un fichero, estamos situando


un puntero en un determinado lugar del fichero, y ese puntero será el encargado de
decirnos desde donde vamos a empezar a operar sobre el fichero. Es decir desde que parte
del fichero vamos a empezar a ejecutar los cambios.

En esta parte del volumen vamos a ver cosas relacionadas con el puntero del fichero y
vamos a aprender a movernos con el puntero por el fichero, volver al principio, establecerlo
al final etc.

La función de mayor importancia en esta parte del volumen es fseek(), la cual permite situar
el puntero en el lugar donde nosotros queramos. La función recibe 3 argumentos que son
los siguientes:

El primero es el descriptor de archivo (valor devuelto por fopen()).


El segundo es la cantidad de posiciones que queremos avanzar.
El tercero es la posición desde la que se avanza, pudiendo ser :

SEEK_SET – Inicio de fichero


SEEK_CUR – Posición actual
SEEK_END – Final de fichero

Otra función que nos será útil a la hora de movernos por los ficheros es la función rewind()
que sitúa el puntero en el inicio del fichero. La función recibe como argumento el descriptor
del fichero.

Ejercicio: Intentad leer a partir del carácter 16 de un texto 5 posiciones, luego leer el carácter
20 usando para moverse por el fichero fseek().

Nota: Si no hacéis el ejercicio realmente no pasa nada, ya que nadie os está evaluando, solo
proporcionándoos algo de información, no hay ejemplos de fseek() precisamente para que
podáis investigar o preguntar aquí sobre ello mientras hacéis el ejercicio.
Nota2: El fichero tiene que contener mas de 20 caracteres.

Nota3: Importante:En Linux pueden aparecer problemas a la hora de crear/modificar


ficheros, si os aparece un error del tipo permiso denegado, tendréis que cambiar los
permisos de la carpeta (en la que estáis creando el fichero, generalmente donde estáis
haciendo las pruebas) para que «otros» puedan escribir en ella.

Por hoy hemos terminado, la próxima seguiremos con PHP, y antes de empezar el nuevo
volumen la solución/ejemplo del ejercicio.
Volumen XXI : Manejo básico de ficheros 2
Lo primero que vamos a tratar en este volumen es la solución al ejercicio
que planteamos la semana pasada.

Aquí tenéis la solución del ejercicio:

[php]
<?php
$fd = fopen(«fichero»,»r»);
fseek($fd,16,SEEK_SET);#Mueve el puntero a la posición 16 desde el inicio.
echo «Lectura1:»;
echo fread($fd,5); #Lee 5 posiciones
echo «<br>»;
echo «Lectura2:»;
fseek($fd,20,SEEK_SET);#Mueve el puntero a la posición 20 desde el inicio.
echo fread($fd,1); #Lee 5 posiciones
echo «<br>»;
fclose($fd);
?>
[/php]

Como véis vamos moviéndonos por el fichero con el fseek(), y vamos leyendo con fread().

Ahora vamos a ver un tema bastante importante en cuanto al tratamiento de ficheros se


refiere, el envío de ficheros.

Envío de ficheros

Seguramente como todos los que leéis este curso navegáis habitualmente, habréis visto al
menos uno , un campo en un formulario HTML que nos permite enviar un fichero al
servidor, resumiendo en una palabra, un uploader. Hay también cursos de Community
Manager gratuitos.

Pues bien hoy, vamos a ver como se crean esos uploader, y como se gestionan los archivos
enviados al servidor, como estaréis pensando, vamos a verlo desde el lado del servidor en
vez de como lo vemos usualmente al navegar (lado del cliente).

Lo primero deberemos crear un formulario HTML con un campo de tipo file, que será el
encargado de solicitar el fichero. Por supuesto, el destino del formulario será el script.php
que va a gestionar el archivo enviado.

[php]
<!DOCTYPE >

<html>
<body>

<?php
echo «Uploader Redeszone-Cliente»;
?>

<form action=»script.php» method=»post» enctype=»multipart/form-data»>


<input name=»file» type=»file» size=»40″ />
<input name=»enviar» type=»submit» value=»UF» />
</form>

</body>

</html>
[/php]

Nota: Si investigáis por vuestra cuenta sobre uploaders, veréis que en muchos sitios hablan
de un campo para limitar el tamaño del fichero que se sube. Realmente nuestro consejo es
que uséis otros modos (como controlarlo en el script.php) para controlar el tamaño del
archivo porque realmente ese campo en infinidad de navegadores no funciona,ya que no es
interpretado.

Ahora vamos a crear el código del script para gestionar el archivo recibido y guardarlo
donde nosotros queramos.

Para almacenar los archivos que se han subido PHP usa una array global llamada $_FILES,
en la cual deberemos usar dos índices, el primero es el archivo (tal y como nos hemos
referido a él en el formulario HTML) y el segundo, la información a la que queremos acceder.

$_FILES [“file”][“size”]
$_FILES [“file”][“name”]
$_FILES [“file”][“type”]

A pesar de poder acceder a esos campos, el fichero no está aún completamente subido,
está en un directorio de archivos temporales, hay que copiarlo al directorio de destino que
queramos.

Para ver el archivo almacenado en el directorio temporal podemos usar:

$_FILES [“file”][“tmp_name”] #Ruta+nombre en el almacenamiento temporal


Y para copiarlo podemos usar la función copy.

Ejemplo:

[php]
<!DOCTYPE >

<html>
<body>

<?php

$size = $_FILES[«file»][‘size’]; #Almacenamos el tamaño del fichero subido


$file = $_FILES[«file»][‘name’]; #almacenamos el nombre del fichero

echo $file; #Imprimimos el nombre del fichero


echo «<br>»;
echo $size;#Imprimimos el tamaño del fichero
echo «<br»;

$path = «./».basename($_FILES[«file»][‘name’]); #Guardamos en path la ruta completa de


donde vamos a guardar el fichero
#lo hacemos selecionando el directorio donde vamos a guardar(en nuestro caso el actual ./)
y le concatenamos el nombre del fichero pasado por
#basename

copy($_FILES[‘file’][‘tmp_name’],$path) #Copiamos el fichero temporal al directorio final.

?>

</body>

</html>
[/php]

Nota: Basename, extrae de una cadena de texto una posible ruta (si existe).

No hemos metido en el ejemplo muchas florituras, ni comprobaciones para se entienda


bien el concepto, pero en una aplicación real serían necesarias. Antes de guardar un archivo
en el servidor, habría que realizar comprobaciones de seguridad (limitar los directorios
accesibles, requerir extensión específica a los archivos, protección contra bytes nulos…),
también habría que comprobar si copy da error o si se ha guardado bien el fichero, entre
otras cosas, pero si nos ponemos con esto no avanzamos y como este es un curso básico, os
invitamos a que investigues sobre esto por vuestra cuenta,

Nos vemos en el siguiente volumen!!


Volumen XXII : Archivos remotos y autentificación
básica
Hoy nos toca abordar dos temas , ya que el primero, es bastante corto y
simple de explicar, y el volumen se quedaría un poco pequeño, el
segundo tiene un poco mas de miga, y aunque no lo toquemos muy
profundamente servirá para hacernos una idea y que podáis seguir
indagando vosotros mismos si lo deseáis.

Antes de empezar, recordaros a todos que tenéis en este enlace el índice


del curso, por si alguno quiere encontrar un volumen pasado, o por si
alguien acaba de empezar a seguir el curso y quiere ponerse al día.

Una vez dicho esto vamos con lo que nos ocupa, vamos a empezar por
tratamiento de archivos remotos.

Archivos remotos

PHP nos da la oportunidad (siempre que este configurado para ello, y en nuestra versión
por defecto lo está, ya que lleva desactivada la opción –disable-url-fopen-wrapper y el
allow_url_fopen en ON) de abrir URLs HTML y FTP como si fuesen ficheros, es decir
operando con ellas con las funciones que hasta ahora habíamos visto para ficheros.

Vamos a ver como leer una URL y mostrarla entera, por ejemplo www.redeszone.net :

Código 1

Nota: Como veis el flag de modo de apertura es R, read.

En el caso de FTP, habría que identificarse con un usuario y contraseña y abrir la URL del
FTP con el flag W, luego escribir el archivo, siempre que este no exista ya. Ya que no se nos
da la posibilidad de modificar/sobrescribir solo de crear un fichero.

Ejemplo de url valida(según el manual oficial de PHP):


ftp://user:[email protected]/path/to/file

Autentificación en PHP
Con PHP también podemos realizar autentificaciones para ciertas partes de nuestro sitio
web (esta parte esta orientada a programación web con PHP).

Como hemos dicho mas arriba, este tema lo vamos a tocar un poco por encima para que
podáis profundizar si lo deseáis por vuestra cuenta, y si lo hacéis no tengáis ningún
problema partiendo de esta base.

En este apartado vamos a ver la autentificación HTTP Basic (podéis encontrar mucha
información en internet sobre ella, pero básicamente se trata de un servicio de
autentificación basado en nombre y contraseña).

Nosotros para este ejemplo/explicación vamos a meter las credenciales en una cadena de
texto, aunque realmente suelen estar en archivos externos,archivos de apache (si se hace
vía Apache) o en bases de datos. Lo hacemos así porque no vamos a hablar de como
implementar la autentificación vía Apache, y porque si residieran en archivos externos,
sabemos como leerlos. En cuanto a bases de datos no hemos visto nada…aún.

Vamos con ello:

Código 2

Nota: Como siempre que hablamos algo de seguridad, recordaos que como esto es un
ejemplo, tiene bastantes deficiencias y sería necesario mejorarlo. De hecho no es muy
recomendable hacer implementaciones de autentificación de esta manera.

Volveremos el miércoles que viene con nuevos contenidos de PHP, esperadnos!


Volumen XXIII : Sockets en PHP I
Hoy vamos a ver un tema bastante importante en la programación en
general y en algunos casos particularmente en PHP, vamos a hablar
de sockets. Antes de ponernos a programar sockets , no estaría de más
explicar un poco por encima sin introducirnos demasiado en el tema qué
es un socket. Podéis leer sobre qué es un socket y diferencias con los
puertos.

Un socket es una API , que permite a una computadora comunicarse con sí misma o con
otra, siempre que estén unidas en red.

Realmente no son las computadoras las que se comunican entre sí, sino los procesos que
hay ejecutándose en ellas. Para realizar esta tarea el socket se vale de la pila de protocolos
TCP/IP.

Ya que sabemos más o menos lo que es un socket vamos a ponernos manos a la obra para
implementarlos en PHP. Anteriormente ya trabajamos con sockets en Java, cliente-
servidor en TCP, cliente-servidor en UDP.

Lo primero que vamos a hacer es ver en vivo cómo funciona un socket, con un pequeño
ejemplo (muy simple, sin tratamiento de errores y para un sólo cliente), y luego vamos a
explicar el código para que se entienda mejor. Puedes aprender por Internet de
Community Manager con algunos cursos.

Nota: Este código está pensado para ejecutarse en consola/terminal.


Nota2: Como la consola puede asustar a muchos (esperamos que no), vamos a intentar
utilizarla sólo en este ejemplo.

En este caso se están comunicando dos máquinas. Una de las máquinas es un Kubuntu
10.10 y la otra un Backtrack 5 (Usamos ips privadas porque las máquinas están en red LAN, si
no lo estuviesen habría que usar ips publicas, nombres de host,…).

Backtrack 5 se comportará como un servidor que recibirá los mensajes de Kubuntu 10.10

Nota: Hemos creído conveniente utilizar la estructura cliente-servidor para el ejemplo


porque consideramos que es la forma más simple para transmitir la ida de los sockets.
Código-Cliente(Básico)

[php]

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_connect($sock,’192.168.0.23′,’8000′);

socket_write($sock,»Hola»,strlen(«Hola»));

socket_close($sock);

echo «Fin del programa»;

[/php]

Código-Servidor(Básico)

[php]

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);


socket_bind($sock,»192.168.0.23″,»8000″);
socket_listen($sock, 5);
$socket=socket_accept($sock);
$mensaje = socket_read($socket,4,PHP_NORMAL_READ);

socket_close($socket);

socket_close($sock);

[/php]

Recordad que estos códigos están hechos de la manera mas básica posible, es decir tienen
carencias absolutamente en todos los aspectos. En
resumidas cuentas, si vais a utilizar sockets para algo más que trastear, JAMÁS hagáis un
cliente-servidor así (sin comprobaciones de errores,carentes de elementos de seguridad
etc,…)

Bueno una vez comentado esto, vamos a pasar a explicar los códigos, y ver para qué se usa
cada función.
Vamos a empezar con la función principal de los sockets en PHP

[php]socket_create(int $domain , int $type , int $protocol);[/php]

Esta función es la encargada de crear un socket en PHP. Devuelve un socket por tanto tiene
que estar igualada a la variable con la que vamos a representar el socket.

Los argumentos que recibe son los siguientes:


Dominio.

Entre los posibles dominios, están los siguiente:

AF_UNIX Familia de protocolos de comunicación local.


AF_INET Protocolos basados en Ipv4.
AF_INET6 Protocolos basados en Ipv6.

Tipo:

Es el tipo de socket que vamos a crear, como ya vimos anteriormente, vamos a usar los
sockets básicos (los más sencillos) que son:

SOCK_STREAM Proporciona flujos de bytes orientados a conexión, secuenciados, fiables y


full-duplex.

SOCK_DGRAM Socket para datagramas (no orientado a conexión, entrega no fiable).

A parte de estos dos , existen otros dejamos aquí sus especificaciones (según el manual
oficial de PHP):

“SOCK_SEQPACKET Proporciona una ruta de transmisión de datos orientada a conexión


secuenciada, fiable, de dos direcciones para datagramas de longitud máxima fija; se
requiere un consumidor para leer un paquete entero con cada llamada de lectura.

SOCK_RAW Proporciona acceso al protocolo de red sin formato. Este tipo especial de socket
se puede usar para construir manualmente cualquier tipo de protocolo. Un uso común para
este socket es realizar solicitudes ICMP (como ping).

SOCK_RDM Proporcional una capa de datagramas fiable que no garantiza el orden. Lo más
seguro es que esto no esté implementado en su sistema operativo.”
Protocolo:

Indica el protocolo sobre el que vamos a construir nuestro socket:

PHP soporta tres protocolos aunque realmente en el curso solo vamos a ver los siguientes 2:

TCP (Orientado a conexión , entrega fiable…).

UDP (No orientado a conexión, sin entrega fiable…).

Bien una vez explicada esta función, en la siguiente sesión vamos a ver qué hacen el resto
de funciones del código para finalmente comentar que va pasando en cada línea del código
en general. Podéis ir investigando sobre sockets que es un tema muy interesante, además
os dejamos con lo más interesante, ver como funcionan.
Volumen XXIV : Sockets en PHP II
Hoy vamos a empezar recordando el código del cliente-servidor. Podéis
leer sobre cómo funciona un socket TCP y UDP y para qué sirve.

Código-Cliente (Básico)

[php]

<?php
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($sock,’192.168.0.23′,’8000′);
socket_write($sock,»Hola»,strlen(«Hola»));
socket_close($sock);
echo «Fin del programa»;
?>

[/php]

Código-Servidor (Básico)

[php]

<?php
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock,»192.168.0.18″,»8000″);
socket_listen($sock, 5);
$socket=socket_accept($sock);
$mensaje = socket_read($socket,4,PHP_NORMAL_READ);
?>

[/php]

y ahora vamos a terminar de explicar lo que nos faltaba.

Empezamos por el cliente:

socket_connect (resource socket,int dirección, int puerto);

Como su nombre indica esta función conecta nuestro socket a una dirección remota,
usando para ello el puerto que especifiquemos.

La función recibe como argumento el socket que se va a utilizar,una ip y un puerto.

socket_write (resource socket,string buffer, int longitud);


Esta función sirve para “escribir” en el socket, es decir para mandar un “mensaje” al socket
remoto con el que está interactuando.

La función recibe el socket sobre el que vamos a escribir, el buffer que almacena el mensaje,
y el tamaño del buffer.

socket_close (resource socket);

Cierra un socket, y cancela su conexión.

Recibe el socket que se va a cerrar.

Servidor:

socket_bind (resource socket,int dirección,int puerto);

Vincula un socket con una dirección y un número de puerto.

Recibe el socket, la dirección y el número de puerto.

socket_listen (resource socket,int backlog);

Pone a escuchar conexiones un socket a la dirección y puerto a la que está vinculado.

Recibe el socket que va a ponerse a escuchar y un entero (backlog);

socket_accept (resource $socket);

Acepta una petición de una conexión entrante a socket.

Recibe como argumento un socket previamente creado y vinculado.

Devuelve un socket.

socket_read (resource $socket,int longitud,int tipo)

Lee datos entrantes en un socket.

Recibe el socket que se va a leer, la longitud del mensaje que se va a leer, y como parámetro
opcional el tipo de lectura.

Devuelve el flujo de datos leído.

Ya sabemos que hace cada función ahora vamos a ver qué hace el cliente y el servidor
cuando se están “ejecutando”.
El cliente crea un socket TCP, que conecta a la IP de servidor, en caso de que este esté
escuchando (para lo que el servidor ha debido crear un socket debidamente vinculado, y
haberlo puesto a escuchar) la conexión se completará.

Si la conexión se ha completado, el cliente envía un mensaje (hola) y el servidor lo recibe,


una vez hecho estos, ambos cierran el socket.

Esto es todo por hoy, la próxima semana volveremos hablando de los errores en sockets y
como gestionarlos, por ahora es mejor no empezar con eso en esta sección.
Volumen XXV : Sockets en PHP III
Vamos a empezar con los temas referidos a las opciones del socket.
Podéis leer sobre qué es un socket TCP y UDP y para qué sirven.

Estableciendo opciones

Los sockets, como sabemos, tienen un serie de opciones que configuramos al crearlos, al
conectarlos o al vincularos, lo que no sabíamos, es que los sockets a parte de esas opciones
tienen otras opciones que podemos configurar a nuestro gusto.

Para configurar estas opciones podemos utilizar la función:

socket_set_option(resource $socket , int $level , int $optname ,[]$optval);

Donde:

$socket es el socket sobre el que se va a aplicar la función.

$level es el nivel del protocolo .

$optname es el nombre de la opción a configurar (normalmente el nombre está


representado por una constante en texto aunque el argumento sea integer).

$optval es el valor.

El nivel puede ser representado con SOL_SOCKET,SOL_TCP,…, o mediante la función


getprotobyname().

Consultando opciones

Igual que podemos configurar las opciones para los sockets podemos consultar el valor de
esas opciones, esto lo haremos mediante la función.

[] socket_get_option ( resource $socket , int $level , int $optname );

Donde:

$socket es el socket del cual vamos a consultar su opción.

$level es el nivel del protocolo.

$optname es el nombre de la opción a consultar (normalmente el nombre está


representado por una constante en texto aunque el argumento sea integer).

Esta función puede devolver un valor de diferentes tipos.


NOTA: La lista de opciones la podemos encontrar completa en la web oficial de PHP en la
sección dedicada da la funcion socket_get_option( resource $socket , int $level , int
$optname), no las listamos aquí, ya que son una serie considerable de opciones.

Vamos a ver unos ejemplos con esto que acabamos de ver.

[php]
<!–?php
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_bind($sock,»localhost»,»8000″);

socket_listen($sock, 5);

$socket=socket_accept($sock);

#Establece la opción
socket_set_option($socket,SOL_TCP,SO_RCVBUF,12);
$opcion = socket_get_option($socket,SOL_TCP,SO_RCVBUF);
#Muestra el valor de la opción
echo ‘La opción tiene el valor ‘.$opcion.’;

$mensaje = socket_read($socket,1024,PHP_NORMAL_READ);

echo $mensaje;

socket_close($sock);

socket_close($socket);
?>;
[/php]

Nota: Para que este código funcione, es necesario conectarse mediante telnet o netcat a
nuestra IP local y al puerto 8000 para enviar el mensaje al que está escuchando.

Para conectar por netcat, una vez instalado, debemos ejecutar lo siguiente en una consola
nc localhost 8000.

Si estamos en Windows debemos cambiar al directorio donde tenemos alojado el netcat,


esto lo podemos hacer con el comando cd.

Con telnet debemos abrir un terminal (o cmd en Windows) y teclear telnet, pulsar intro. Una
vez hecho esto estaremos en telnet. Para abrir la conexión es necesario teclear:

open localhost 8000


Una vez que estamos conectado escribimos cualquier mensaje que queramos enviar y
observaremos el resultado donde estemos ejecutando el script (ya sea en consola o en el
servidor xampp).

Tratamiento de errores sockets

Como muchas funciones, las encargadas de manejar sockets pueden fallar en un


determinado momento, dando como resultado un error que habría que gestionar.

En esta parte del volumen, vamos a explicar como identificar el error para gestionarlo (en el
manual nos vamos a limitar a identificar el error e imprimirlo por pantalla, ya que la gestión
del mismo depende de cada uno).

Para detectar error en sockets vamos a utilizar la función:

integer socket_last_error ([ resource $socket ] );

Esta función tiene una peculiaridad bastante interesante, veamos.

En el caso de pasarle un socket como argumento, la función devuelve el último error que se
ha producido en el socket, sin embargo si no se le pasa ningún argumento, lo que hará será
devolver el último error que ha causado la ultima función relacionada con sockets que ha
sido llamada

Como podéis observar el error devuelto es de tipo integer(int) es decir un tipo numérico, por
tanto la verdad no nos proporciona mucha información como tal un número de error
(código de error). Para solventar esta situación usaremos la función:

string socket_strerror ( int $cerror);

Donde:
$cerror es un código de error.

La función lo que hará será “traducir” ese código de error y mostrar un texto con el error de
forma más o menos detallada.

Como veis, en este caso la función falla cuando devuelve false, no obstante no con todas las
funciones es así, para saber que valor devuelven en caso de error es necesario buscar la
función en la referencia de PHP.

Vamos a ver un ejemplo [A ejecutar en consola]:

[php]
<?php

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);


if ((socket_bind($sock,3525632532,»8000″)==false))
{
#Como podéis ver la dirección no es válida, generará un error
echo «Fallo en la vinculación del socket: » . socket_strerror(socket_last_error($sock)) . «n»;
}

if ((socket_listen($sock, 5) ==false))
{
echo «Fallo en la escucha: » . socket_strerror(socket_last_error($sock)) . «n»;
}

$socket=socket_accept($sock);

$mensaje = socket_read($socket,1024,PHP_NORMAL_READ);

echo $mensaje;

socket_close($sock);

socket_close($socket);

?>
[/php]

Esto ha sido todo por hoy, volveremos la semana que viene y empezaremos nuevo tema.
¡Esperadnos!
Volumen XXVI : Bases de datos y PHP.
Bien hoy vamos a empezar un tema que pasaremos quizá algo por
encima pero que merece la pena ver, este tema es el manejo de bases de
datos en PHP.

¿Porque vamos a pasar un poco por encima?, Pues es simple, nuestro objetivo es aprender
a manejar mínimamente bases de datos con PHP ,lo cual no requiere demasiado tiempo
hablando en el campo de las bases de datos, lo que realmente lleva tiempo es aprender a
crear una base de datos sólida, funcional y aprender a gestionarla, y eso, es independiente
del lenguaje de programación que se use para administrarla, por esta razón no nos vamos a
centrar en ese tema.

Una vez aclarado esto , vamos a ello!

No vamos a necesitar nada más a nivel de software, con todo lo que tenemos instalado ya,
nos servirá. A nivel de conocimientos nos vendría bien aprender un poco de SQL para
manejarnos con mas fluidez por las bases de datos, ya que vamos a tener que usarlo. No
obstante la mayoría de las partes importantes que se utilicen de SQL serán explicadas
brevemente.

Nota: Para usar menos SQL y facilitar un poco el aprendizaje de esta parte, hemos pensado
en que la creación de la base de datos la haremos en modo visual (no consola) con
PHPmyadmin.

Como hemos mencionado en la nota, la creación de las bases de datos la vamos a realizar
por la herramienta PHPmyadmin (incluída en Xampp). Vamos ahora a ver un poco por
encima esta herramienta.

PHPmyadmin es una herramienta creada en PHP, con el fin de gestionar bases de datos
MySQL de forma fácil. Esta herramienta está incluida en el pack que instalamos al iniciar el
curso, para acceder a ella simplemente tenemos que arrancar el servidor como siempre,
pero en la barra de direcciones poner localhost, entraremos a la pantalla de Xampp y en el
menú de la izquierda esta el acceso a la herramienta por medio de un link.
Una vez dentro observaremos una pantalla como esta:

A la izquierda tenemos unas bases de datos ya creadas y a la derecha tenemos lo necesario


para crear una nueva, que es lo que nosotros vamos a hacer.

Vamos a dejar la creación de la base de datos para la siguiente entrega, y vamos a ver ahora,
como se organiza una base de datos MuSQL.

Lo primero que hay que decir es que las bases de datos MySQL siguen el modelo relacional,
siendo simplistas se puede decir que el diseño de la base de datos constaría de una serie de
entidades y unas relaciones entre estas entidades.

La información guardada en la base de datos esta gestionada por tablas, y dentro de cada
tabla por filas y columnas, donde a cada intersección entre fila y columna se le denomina
campo (de nuevo con una explicación muy simple).

Ejemplo de una ficticia tabla llamada USUARIOS:

Jalths La pass de Jalths


Juan La pass de Juan
… …
… …

Esto es todo por hoy, volveremos en el próximo volumen para seguir con esto de las bases
de datos.
Volumen XXVI : Bases de datos y PHP II
Vamos a retomar el punto donde lo dejamos la semana pasada,
estábamos explicando de forma muy simple como era una base de datos
MySQL (que son las que vamos a usar), también comentamos como las
íbamos a gestionar.

Una vez recordado todo esto, vamos a pasar al tema de hoy, crear la base de datos y un par
de tablas para familiarizarnos con el control de PHPmyadmin.

Vamos con ello. Lo primero es arrancar el servidor como siempre y acceder al PHPmyadmin
como explicábamos en la anterior sesión.

Nos encontraremos en la misma pantalla que en la entrega anterior. Esta vez vamos a
cambiar el cotejamiento por UTF 8_general_ci (También dependiendo de la situación
podemos usar otro cotejamiento, pero nosotros usaremos el UTF8), y le ponemos un
nombre la base de datos en el campo de texto. Una vez hecho esto pulsamos crear.

Como veis, la pantalla se ha refrescado, ahora estáis por así decirlo en el zona de
administración de la base de datos que acabamos de crear. Veremos algo como esto:

A nosotros por ahora nos interesa:

– SQL, que nos permitirá interactuar con la base de datos usando el lenguaje SQL.

– Buscar, quizá lo usemos para buscar algo en la base de datos en algún momento puntual.

– Tracking, para mirar las tablas de la base de datos entre otras cosas que no vamos a ver.

– Generar consultas, para general consultas como su propio nombre indica.

– Privilegios, quizá nos metamos con la gestión de privilegios aunque realmente es un tema
que no incumbe al manual de PHP.
Ahora vamos a crear una nueva tabla, si pinchamos en estructura (o si estamos ya en ella) y
nos saldrá un campo de texto donde introducir el nombre de la tabla y otro para le número
de campos.

Nosotros vamos a crear la típica tabla de usuarios en la que se almacena un usuario y una
contraseña, por lo tanto llamaremos a la tabla usuarios. Introducimos el nombre y número
de campos (2, usuario y contraseña) y le damos a crear.

De nuevo se refrescará la pantalla , apareciendo en ella algo como esto:

Rellenamos como en la captura y pulsamos grabar.

Ahora una breve explicación de que es cada cosa que hemos rellenado:

– Campo: Nombre que identificará a la columna

– Tipo: Tipo del que va a ser cada campo(un símil con programación seria el tipo de cada
variable). En nuestro caso son dos VARCHAR.

– Longitud: Longitud del campo (“tamaño que puede almacenar”).

– Predeterminado:El valor que se introduciría como predeterminado en el caso de no


recibirlo(en nuestro caso lo dejamos en blanco porque por ahora no nos interesa).

– Atributos: Por ahora no lo tocamos.


– Nulo: Indica si el campo puede ser null.

– Índice: Presenta varias opciones para el índice:clave primaria,único,… .Por ahora vamos a
establecer usuario como clave primaria.

– Auto_increment: Autoincremento por cada entrada de la tabla.Por ahora lo dejamos sin


marcar.

Por ahora el resto no lo vamos a tocar , así que lo dejamos tal y como está, y ya estaría
creada la tabla y la base de datos.

Por ahora hemos terminado con PHPmyadmin, ahora vamos a ver como conectarnos a
nuestra base de datos mediante PHP.

[php]
<?php
Echo "Conectando a BBDD";

mysql_connect("localhost","root","");#Conectar a un servidor donde hay alojada una base de


datos
#usando la función mysql_connect que recibe como argumentos
#el servidor,usuario y contraseña.(para localhost hemos dejado
#los valores por defecto , aunque no es recomendable.

mysql_select_db("PHPRZ");#Conectar a la base de datos PHPRZ


#usando la función mysql_select_db
#donde PHPRZ es el nombre de vuestra base de datos

?>
[/php]

Nota: La mejor forma para gestionar la conexión a bases de datos y todo este tipo de cosas
en PHP , bajo nuestra opinión, es crear una clase y cada método realice una acción/o varias
relacionadas. Por ejemplo crear una clase manejarBD que tenga un método que sea
conectaráBD y que reciba como argumentos el usuario, contraseña y nombre de la BD.

En este ejemplo no hemos realizado esto por el hecho de no añadir complejidad al ejemplo.

Por hoy hemos terminado, volvemos la semana que viene con más sobre PHP y bases de
datos. Aprenderemos a introducir sentencias en SQL a la base de datos mediante PHP.
Volumen XXVII : Bases de datos y PHP III
Estamos hoy aquí de nuevo para aprender un poco de PHP , y hoy
seguimos con lo que dejamos la semana pasada sobre bases de datos.

Vamos a recordar un poco que hicimos la semana pasada y la anterior:

– Aprendimos a usar PHPMyadmin.


– Aprendimos a crear una base de datos usando el asistente.
– Aprendimos a conectarnos al servidor y a la base de datos.

Hoy vamos a introducir datos a la base de datos y luego a recuperar datos


de ella y mostrarlos por pantalla.

Para realizar esta tarea vamos a utilizar dos scripts en PHP uno para introducir los datos y
otro para leerlos, vamos a llamar a uno introducir.php y al otro leer.php.

[php]
<?php
Echo "Insertando en BBDD";

mysql_connect("localhost","root","");#Conectar a un servidor donde hay alojada una base de


datos
#usando la función mysql_connect que recibe como argumentos
#el servidor,usuario y contraseña.(para localhost hemos dejado
#los valores por defecto , aunque no es recomendable.

mysql_select_db("PHPRZ");#Conectar a la base de datos PHPRZ


#usando la función mysql_select_db

$result = mysql_query("INSERT INTO Usuarios VALUES (‘Jalths’,’Contraseña’)");


$result = mysql_query("INSERT INTO Usuarios VALUES (‘Bron’,’ContraseñadeBron’)");

?>
[/php]

Como veis usamos varias funciones PHP:

resource mysql_query ( string $query );

Esta función envía la consulta contenida en el string $query a la base de datos, devolviendo
la respuesta en resource (es decir devuelve un resultado).
Pero sin duda lo que más os llamará la atención es algo con lo que no estamos muy
relacionado, el SQL.

Veis que tenemos una sentencia SQL:

INSERT INTO X VALUES(‘’X’X’X’’X’);

Esta sentencia INSERT INTO lo que hace es insertar una serie de valores (especificados más
adelante) en la tabla X . VALUES define los valores (por orden) para cada campo de la tabla
previamente especificada.

En nuestro caso insertamos dentro de Usuarios los valores (‘USUARIO’,’PASSWORD’); , ya


que usuario y password son los campos por orden de la tabla usuarios.

Nota: En este ejemplo estamos introduciendo PASSWORD de ejemplo, están en texto claro
(sin cifrar), es muy importante que jamas en un contexto real se realice un almacenamiento
de contraseñas en texto plano.

[php]
<?php

echo "Conectando a BBDD <br>";

mysql_connect("localhost","root","");#Conectar a un servidor donde hay alojada una base de


datos
#usando la función mysql_connect que recibe como argumentos
#el servidor,usuario y contraseña.(para localhost hemos dejado
#los valores por defecto , aunque no es recomendable.

mysql_select_db("PHPRZ");#Conectar a la base de datos PHPRZ


#usando la función mysql_select_db

$result = mysql_query("SELECT * FROM Usuarios");

while ($row = mysql_fetch_row($result))


{
echo "<br>";
echo $row[0];#Primer campo
echo "<br>";
echo $row[1];#Segundo campo
}

?>
[/php]

En este segundo script, podéis ver que seguimos usando la misma función para enviar la
consulta a la base de datos, pero esta vez pasamos el resultado por otra función.
array mysql_fetch_row ( resource $result );

Lo que hace esta función es básicamente mostrar el resultado como un array en el que
cada iteracción corresponde con una fila de la base de datos.

Pero sin duda al igual que antes , lo que más os estará llamando la atención será la porción
de código SQL.

SELECT FROM X

Bien en nuestro caso es :

SELECT * FROM Usuarios

Lo que hace esta consulta es seleccionar de la tabla USUARIOS todas las filas (todo el
contenido de la tabla).

Esto es todo por hoy, esperamos desde Redeszone que os haya gustado y que esperéis la
nueva entrega que estará pronto en la web. Mientras tanto podéis ir mirando algo de SQL
básico, pero como ya os comentamos, es opcional.
Volumen XXVIII : Bases de datos y PHP IV
Hoy nos toca ver como actuaríamos para interactuar con una base de
datos PostgreSql y PHP. En este caso, no vamos a crear el servidor
PostgreSql, por lo que para el que no esté muy familiarizado con los
servidores de bases de datos PostgreSql puede que esta entrada del
curso no le resulte muy útil. No obstante aconsejamos leerla para ver el
parecido con la anterior entrada (Muchos gestores de bases de datos
interactúan de una forma muy similar en PHP).

Para situarnos en contexto, en esta entrada, debemos tener creado ya el servidor y la base
de datos PostgreSql , sin tablas creadas.

Nota: Supondremos que la base de datos tiene una tabla llamada Users.

Después de esta pequeña introducción, vamos con el grueso de la entrada:

Conexión:

Para conectar al servidor y seleccionar la base de datos lo haríamos de la siguiente manera:

[php]
#######Credenciales#######
#Debe rellenar la información de acuerdo con su servidor / base de datos
$_Servidor = «servidor»;
$_Password = «password»;
$_User = «usuario»;
$_DBname = «Nombre de la base de datos»;
#############################

echo «Conectando a la base de datos»;

$_dbconn = pg_connect(«host=».$_Servidor.» port=5432 dbname=».$_DBname.»


user=».$_User.» password=».$_Password);
[/php]

Como puede verse, es muy parecido a lo que se hizo en entregas anteriores con MySql. Una
simple función que recibe como argumentos la información relacionada con el servidor y la
base de datos.

Se ha optado por introducir la información por medio de variables, en vez de directamente


en la llamada a la función simplemente por motivos de claridad del código, pero podéis
meter directamente los argumentos en la llamada a la función si os gusta más. Hay cursos
para estudiar Big Data por Internet que pueden ayudarte a adquirir más conocimientos.

Ejecución de consultas:

Para lanzar consultas a la base de datos haremos lo siguiente:

[php]
$_result = pg_query($_dbconn,»SELECT * FROM Users»); #Nota: suponemos que existe la
tabla Users.

while ($row = pg_fetch_row($_result))


{
echo «Valor1: $row[0] Valor2: $row[1] Valor3: $row[2]» ;
echo »
«;
}
/*Existen otras formas de hacer una consulta, nosotros hemos elegido esta por su
sencillez,como siempre
si queréis indagar en el resto de formas podéis mirar la ayuda de PHP consultar esta
función y por
supuesto si os quedan dudas, podéis preguntar y os ayudaremos todo lo que podamos*/
[/php]

Como se puede ver, se lanza la consulta mediante la función pg_query() y se almacena el


resultado en $_result, este resultado es pasado por la función pg_fetch_row() y almacenado
el resultado en la array $row. Para mostrar el resultado procederemos como si se tratase de
un array normal (de hecho, es un array normal).

Por hoy damos por concluido el PHP, ha sido una entrega corta pero útil ya que hemos visto
como se manejan bases de datos PostgreSQL y también hemos visto las similitudes a nivel
de sintaxis al manejar dos motores de bases de datos diferentes .Volveremos en cuanto
podamos con nuevas cosas sobre PHP, como siempre, sabéis que podéis aportar
sugerencias y temas a tratar en el curso con un simple comentario.

En la siguientes sesió , a menos que pidáis algo más concreto sobre bases de datos,
empezaremos con algo nuevo, hasta entonces podéis ir pensando si queréis leer sobre algo
en especial.

También podría gustarte