Curso Básico de PHP y Apache
Curso Básico de PHP y Apache
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.
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.
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.
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.
Nota: Es el que usaremos en el curso pero podéis usar el que mas os guste, para correr los
scripts valdrá igual.
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.
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:
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
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
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.
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:
Explorar: Abre la carpeta WWW (En el siguiente volumen veremos para que sirve), esta
carpeta se encuentra en el directorio de instalación.
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).
<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.
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).
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.
?> 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
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:
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:
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á:
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 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.
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.
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:
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:
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:
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
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).
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.
n avance de línea
r retorno de carro
t tabulador horizontal
\ barra invertida
» comillas dobles
Ejemplos de uso:
Que pasaría si dentro de una cadena queremos introducir precisamente ‘, pues sin
problemas, la escapamos:
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:
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.
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.
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:
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.
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:
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.
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.
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 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:
$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.
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.
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
Su sintaxis es:
foreach($array as $key=>$valor){
sentencias;
}#fin del bucle
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.
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.
Si-se-cumple-esta-condición
{
ejecuto esta serie de instrucciones;
}
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.
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.
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.
Funciones en PHP
function nombredelafuncion(argumentos)
{
Cuerpo de la función
}
nombredelafuncion(argumentos);
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.
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.
Ahora al realizar una llamada a la función, hay que asignarle el resultado de la llamada a una
variable y luego imprimirla.
Ejemplo:
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.
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.
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).
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.
Uso de globals.
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().
A continuación podréis ver las mínimas diferencias entre ellas y para qué
sirven.
La función include() sirve para incluir un archivo externo en el actual (con el que estamos
trabajando).
É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.
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().
Nos metemos ahora con require_once() e include_once(). Como he explicado antes, entre
ellas existe la misma diferencia que entre include() y require().
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.
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.
Estos dos arrays superglobales, nos servirán para recoger toda la información que el usuario
introduzca en nuestro script.
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.
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:
Una vez que el usuario ha pinchado en ese link nosotros podemos extraer el valor de la
variable del siguiente modo:
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.
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:
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.
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.
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:
En linux:
En windows:
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.
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.
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.
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:
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.
Solución Ejercicio 1:
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.
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:
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.
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).
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.
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).
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.
Para esta solución, hemos creado una clase teléfono_movil y hemos heredado un clase
teléfono(Xperia Arc) de ella.
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
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.
#MÉTODOS
POLIMORFISMO
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.
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.
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.
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.
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.
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.
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.
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
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:
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.
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
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.
Nota: En versiones anteriores de PHP existía la función session_unregister() que ahora esta
obsoleta.
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.
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.
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.
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.
‘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.
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.
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.
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.
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.
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:
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.
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.
[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().
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»;
?>
</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.
Ejemplo:
[php]
<!DOCTYPE >
<html>
<body>
<?php
?>
</body>
</html>
[/php]
Nota: Basename, extrae de una cadena de texto una posible ruta (si existe).
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
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.
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.
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.
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.
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
[php]
socket_connect($sock,’192.168.0.23′,’8000′);
socket_write($sock,»Hola»,strlen(«Hola»));
socket_close($sock);
[/php]
Código-Servidor(Básico)
[php]
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
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.
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:
A parte de estos dos , existen otros dejamos aquí sus especificaciones (según el manual
oficial de PHP):
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:
PHP soporta tres protocolos aunque realmente en el curso solo vamos a ver los siguientes 2:
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]
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 el socket sobre el que vamos a escribir, el buffer que almacena el mensaje,
y el tamaño del buffer.
Servidor:
Devuelve 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.
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á.
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.
Donde:
$optval es el valor.
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.
Donde:
[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.
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:
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).
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:
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.
[php]
<?php
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.
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:
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).
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:
– 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.
– 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.
Ahora una breve explicación de que es cada cosa que hemos rellenado:
– 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.
– Índice: Presenta varias opciones para el índice:clave primaria,único,… .Por ahora vamos a
establecer usuario como clave primaria.
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";
?>
[/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.
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";
?>
[/php]
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.
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.
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
?>
[/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
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.
Conexión:
[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»;
#############################
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.
Ejecución de consultas:
[php]
$_result = pg_query($_dbconn,»SELECT * FROM Users»); #Nota: suponemos que existe la
tabla Users.
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.