Documente Academic
Documente Profesional
Documente Cultură
Software propietario
Plataformas Microsoft Varios lenguajes (VBScript, JavaScript)
Caractersticas de PHP
Ms rpido que ASP
Lenguaje ms fcil y potente Integracin perfecta con 8 servidores HTTP Acceso a 20 tipos de Bases de Datos Diseo modular de fcil ampliacin Licencia abierta
IT Colima Ene-Jun 2009 4
Historia y Desarrolladores
Fechas Inicio del desarrollo en otoo de 1994 PHP Versin 1 en primavera 1995 PHP Versin 2 1995-1997 PHP Versin 3 1997-2000 PHP Versin 4 en el segundo trimestre de 2000 Equipo de Desarrollo (195 personas con acceso al CVS) Zeev Suraski y Andi Gutmans (Israel) Shane Caraveo (Florida) Stig Bakken (Norway) Andrei Zmievski (Lincoln, Nebraska) Sascha Schumann (Dortmund, Germany) Thies C. Arntzen (Hamburg, Germany) Jim Winstead (Los Angeles) Sam Ruby (Raleigh, NC) Rasmus Lerdorf (San Francisco)
IT Colima Ene-Jun 2009 5
PHP 5
El 13 de julio de 2004, fue lanzado PHP 5, utilizando el motor Zend Engine II (o Zend Engine 2). La versin ms reciente de PHP es la 5.2.4 (30 de agosto de 2007), que incluye todas las ventajas que provee el nuevo Zend Engine 2 como: Soporte slido y REAL para Programacin Orientada a Objetos ( o OOP) con PHP Data Objects. Mejoras de rendimiento. Mejor soporte para MySQL con extensin completamente reescrita. Mejor soporte a XML ( XPath, DOM... ). Soporte nativo para SQLite. Soporte integrado para SOAP. Iteradores de datos. Excepciones de errores.
PHP 6
Est previsto el lanzamiento en breve de la rama 6 de PHP, cuando se lance esta nueva versin, quedarn solo dos ramas activas en desarrollo (PHP 5 y 6) pues se ha comunicado que PHP 4 ha sido discontinuado desde el 13 de Julio de 2007. Las diferencias que encontraremos frente a PHP 5.* son: Soportar Unicode Limpieza de funcionalidades obsoletas como register_globals, safe_mode... PECL Mejoras en orientacin a objetos
Estadsticas de uso
3,314,634 Dominios, 637,746 Direcciones IP 19,823,296 Dominios analizados PHP instalado en el 16.7% de todos los dominios 1,322,329 Servidores Apache analizados 429,589 (32.49%) PHP 247,642 (18.73%) Frontpage 133,414 (10.09%) mod_perl 111,576 (8.44%) mod_ssl 78,030 (5.90%) OpenSSL 46,404 (3.51%) ApacheJServ
IT Colima Ene-Jun 2009 8
Plataformas soportadas
Plataformas (actualidad): UNIX (todas las variantes) Win32 (NT/W95/W98/W2000) QNX Mac (WebTen) OS/2 BeOS Servidores: Apache (UNIX,Win32) CGI fhttpd ISAPI (IIS, Zeus) NSAPI (Netscape iPlanet) Java servlet AOLServer Roxen Plataformas (en perparacin): OS/390 AS/400
Servidores (en preparacin): Apache 2.0 WSAPI (O'Reilly WebSite) phttpd thttpd
10
2. El lenguaje PHP
11
2.2. Delimitadores
<? echo 'Primer mtodo de delimitar cdigo PHP'; ?> <?php echo 'Segundo mtodo, el ms usado'; ?> <script language="php"> echo 'Algunos editores (como el FrontPage) Slo entienden este mtodo'; </script> <% echo 'Mtodo de compatibilidad con ASP'; %>
IT Colima Ene-Jun 2009 13
ASP
15
16
17
2.4. Comentarios
/* Comentarios estilo C. * Pueden extenderse durante varias lneas. */ // Comentarios estilo C++. Hasta fin de lnea. # Comentarios estilo Perl. Hasta fin de lnea.
18
19
20
2.5.2.
PHP realiza conversiones automticas de tipo: $mivar = 123; echo $mivar; // Se convierte a string $mivar = 3; // Se convierte a entero $mivar = 2 + $mivar; // para realizar la suma
21
2.5.2.
Operador cast:
$mivar = (string)123;
2.5.4. Referencias.
Se definen con el carcter &: $alias = &$variable
Se puede eliminar una referencia con la funcin unset(): $a = 1; $b = &$a; unset ($a); // Pero $b sigue valiendo 1
IT Colima Ene-Jun 2009 24
Punto flotante.
$MiVar = 1.3e4;
Arrays.
$MiVar[2] = 123;
Strings.
$MiVar = Cadena de texto\n;
Objetos:
IT Colima Ene-Jun 2009 $MiVar = new MiClase(); 25
26
Si se delimitan entre comillas simples (), las variables no se expanden y adems las nicas secuencias de escape que se reconocen son \\ y \' (barra invertida y comillas simples.)
IT Colima Ene-Jun 2009 30
Se puede acceder a cada carcter como si fuera un array: $cad2 = Tercer carcter de \$cad : $cad[2];
IT Colima Ene-Jun 2009 32
2.7. Constantes.
Las constantes se definen con la funcin define(): define(SALUDO, Hola, mundo!); echo La constante SALUDO vale . SALUDO; Las constantes en PHP se diferencian de las variables en que: no llevan el smbolo del dlar delante. puede accederse a ellas desde cualquier parte del cdigo donde han sido definidas, sin restricciones de mbito como en las variables. no pueden ser redefinidas o borradas una vez definidas. IT Colima Ene-Jun 2009 slo pueden contener valores escalares, no vectores.33
Comportamiento mixto en variables y funciones: En las variables, las maysculas y minsculas IMPORTAN. En los nombres de funciones y palabras reservadas, las maysculas NO IMPORTAN.
34
Operacin $a + $b $a - $b $a * $b $a / $b $a % $b
Resultado Suma de $a y $b. Diferencia entre $a y $b. Producto de $a y $b. Cociente de $a y $b. Resto de la operacin $a/$b.
35
2.9.2.
Auto-incremento y auto-decremento.
Resultado Incrementa $a en 1, y Pre-incremento devuelve $a (incrementado). Devuelve $a, y despus lo Post-incremento incrementa en 1. Decrementa $a en 1, y Pre-decremento despus lo devuelve. Devuelve $a, y despus lo Post-decremento incrementa en 1.
36
38
OperacinNombre
Resultado Asigna el valor de una variable o $a = $b Asignacin expresin del segundo trmino a la variable del primer trmino. Compara si el valor de los dos $a == $b Igualdad operandos es el mismo. Compara si el valor es el mismo y, $a === $b Identidad adems, el tipo coincide.
IT Colima Ene-Jun 2009 39
$var1 = 1; $var2 = 1; $var3 = 1; ($var1 == $var2) ($var1 == $var3) ($var1 === $var2) ($var1 === $var3)
// Asignacin
// // // //
Cierto, son iguales Son iguales (tras conversin) Cierto, son idnticas FALSO, el tipo no coincide
40
$var1 = 1; $var2 = 2; if( $var1 = $var2 ) { echo iguales; } else { echo distintas; }
IT Colima Ene-Jun 2009 41
2.9.6. Comparaciones.
Operacin Nombre Resultado Cierto si el valor de $a no es $a != $b No igual igual al de $b. Cierto si $a no es igual a $b, o $a !== $b No idntico si no tienen el mismo tipo. Cierto si $a es estrictamente $a < $b Menor que menor que $b. Cierto si $a es estrictamente $a > $b Mayor que mayor que $b. Cierto si $a es menor o igual $a <= $b Menor o igual que que $b. Cierto si $a es mayor o igual $a >= $b Mayor o igual que que $b.
IT Colima Ene-Jun 2009
42
43
+=
-=
*=
/=
%=
&=
^=
.=
>>=
<<=
44
2.9.9. Precedencia.
, or xor and print = += -= *= /= .= %= &= |= ^= ~= <<= >>= ?: || && | ^ & == != === !== < <= > >= << >> +-. */% ! ~ ++ -- (int) (double) (string) (array) (object) @ [ new
45
46
47
2.10.4. for
for (expresin1; expresin2; expresin3) { comandos } $factorial5 = 1; for ($i = 2; $i <= 5; $i++ ) { $factorial5 *= $i; }
IT Colima Ene-Jun 2009 49
for ($factorial5 = 1, $i = 2; $i <= 5; $i++ ) { $factorial5 = $factorial5 * $i; } for ($factorial5=1, $i=2; $i<=5; $factorial5*=$i, $i++);
50
51
2.10.5. foreach
foreach (array as variable) { comandos } $a = array (1, 2, 3, 17); foreach ($a as $v) { print "Valor actual de \$a: $v.\n"; } // // // // Valor Valor Valor Valor actual actual actual actual de $a: 1 de $a: 2 de $a: 3 IT Colima Ene-Jun 2009 de $a: 17
52
53
2.10.6. switch
switch (variable) { case valor1: comandos1 case valor2: comandos2 ... case valorN: comandosN default: comandosDefault }
IT Colima Ene-Jun 2009
54
56
$x = "hello"; // asignamos una cadena a $x if( $x ) // se evala a cierto $x = ""; if( $x ) // cadena vaca // evala a falso // // // // Excepcin: cero en una cadena evala a falso (se convierte a entero)
57
$x = "0"; if( $x )
$x = array(); if( $x )
58
Class Yod {} // clase vaca $x = new Yod(); if( $x ) // se evala a falso Class Yod { // clase no vaca var $x = 1; } $x = new Yod(); if( $x ) // se evala a cierto
IT Colima Ene-Jun 2009 59
60
2.12. Funciones.
61
function enlace($url) { echo <a href= $url>Pulsa aqu</a>; } Echo enlace(http://www.itcolima.mx); Echo <br>;
Echo enlace(http://localhost);
IT Colima Ene-Jun 2009 63
64
function &buscar_cliente($nombre) { // ... buscamos ... return $registro; } $cliente = &buscar_cliente(Juan); echo $cliente->dni;
IT Colima Ene-Jun 2009 65
require(cabecera.inc); If ($incluir == TRUE) { $ficheros = array(uno, dos, tres); foreach ($ficheros as $fichero) { include($fichero); } }
IT Colima Ene-Jun 2009 66
3. Programando en PHP
67
3.1.1. Forms.
formulario.html
<form action=datos.php" method="POST"> Su nombre: <input type=text name=nombre><br> Su edad: <input type=text name=edad><br> <input type=submit> </form>
datos.php
<?php echo Tu nombre es:.$_POST[nombre].<br>; echo Tu edad es:.$_POST[ edad].<br>; echo Tu edad es:.$edad.<br>; // con register_globals=on ?>
IT Colima Ene-Jun 2009 68
70
3.2. Cookies.
int setcookie (string nombre [, string valor [, int fin [, string camino [, string dominio [, int seguro]]]]]) setcookie(PruebaCookie, expirar dentro de una hora, time() + 3600); setcookie(PruebaCookie, , time());
IT Colima Ene-Jun 2009 71
3.3. Sesiones.
bool session_start(void); bool session_register (mixed name [, mixed ...]) bool session_destroy(void); // Ejemplo, un contador session_start(); print($contador); $contador++; session_register("contador"); <A HREF="siguiente.php?<?=SID?>">Continuar</A>
IT Colima Ene-Jun 2009 72
$nombre = '/etc/shadow'; $fichero = @fopen ($nombre, 'r'); if( !$fichero ) { die("No se pudo abrir el fichero ($nombre)"); }
IT Colima Ene-Jun 2009 73
74
75
string substr (string cadena, int inicio [, int tamao]) $str $str $str $str = = = = substr('abcdef', substr('abcdef', substr('abcdef', substr('abcdef', 2, 3); -2); -2, 1); 1, -2); // // // // cde ef e bcd
76
int strpos (string cadena, string referencia [, int inicio]) int strrpos (string cadena, char referencia) $i // $i // $s // $s // = strpos('cadena de prueba', 'de'); $i = 2 = strpos('cadena de prueba', 'de', 5); $i = 7 = strrpos('cadena de prueba', 'de'); $s = 7 = strstr('cadena de prueba', 'de'); $s = dena de prueba
IT Colima Ene-Jun 2009 77
78
<?php $salto_linea = "\n"; $cadena = " cadena con varios espacios en blanco " ; echo $salto_linea . $cadena . " tamao: " . strlen($cadena); echo "<br>"; echo $salto_linea . ltrim($cadena) . " tamao: ".strlen(ltrim($cadena)); echo "<br>"; echo $salto_linea . chop($cadena) . " tamao: ".strlen(chop($cadena)); echo "<br>"; echo $salto_linea . trim($cadena) . " tamao: ".strlen(trim($cadena)); ?>
IT Colima Ene-Jun 2009 80
82
83
alumno@hotmail.org alumno@gmail.com
IT Colima Ene-Jun 2009 84
85
86
87
Tipo de Operador
Ejemplo aAy6% @
Descripcin Letras, digitos y cualquier carcter especial Precede un caracter especial con el signo \ para cancelar su significado Nueva linea, tabulacin y retorno de carro Cdigos de control Cdigos hexadecimales Empieza con Termina con cualquier carcter includo en [ ] cualquier carcter excepto aAeEiou cualquier carcter hexadecimal (0 a 9 o a a f) cualquier carcter cualquier espacio (espacio \n \r o \t) cualquier letra cualquier digito cualquier carcter que no sea un espacio 1 o mas (algunos) 0 o mas (quizas algunos) 0 0 1 (quizas a) 4 exactos 4 o ms entre 4 y 8
Delimitadores $ [aAeEiou] [^aAeEiou] [a-fA-F0-9] . Grupo de carcteres [[:space:]] [[:alpha:]] [[:digit:]] [^[:space:]] + * ? Agrupaciones aplicadas a elementos {4} {4,} {4,8}
Alternar Agrupando
| () (?: )
una u otra
88
La primera parte, [a-z] +, nos dice que aceptar una letra, o conjunto de letras, sin espacios y en minsculas, que pueden corresponderse con el nombre de usuario de la cuenta de correo. Despus aceptar un smbolo @, seguido de otro conjunto de caracteres, correspondientes al servidor de correo. La ltima parte de la expresin la componen los smbolos \ ., que indican que tiene que aparecer un punto que separe la descripcin del servidor del dominio y la cadena org , que obliga a que todos los correos sean de dominio no gubernamental.
89
90
91
92
^[a-z\.]+@[a-z\.]+\.(org|com|net|edu)$
93
94
Secuencias de formato
El carcter de tanto por ciento. Entero en binario. Entero como carcter ASCII. Entero en decimal. Double en punto flotante. Entero en octal. Cadena. Entero en hexadecimal (minsculas). IT Colima Ene-Jun 2009 Entero en hexadecimal (maysculas).
95
96
$busca = DAlton; // Habr que escapar el apstrofe $sql = SELECT * FROM usuarios WHERE apellido = \ . addslashes($busca) . \;
97
string system (string comando [, int valor_salida]) echo system(finger $usuario); Qu pasa si $usuario=pepe ; apachectl stop ? string escapeshellcmd (string comando)
98
99
100
array split (string delimitador, string cadena [, int lmite]) $fecha = "12/4 2000"; $campos = split ('[ /.-]', $fecha);
101
102
Ordena el array por contenido en orden ascendente. Ordena por contenido en orden descendente. Ordena por el ndice en orden ascendente. Ordena por el ndice en orden descendente.
103
106
int copy (string origen, string destino) int rename (string origen, string destino) int unlink (string fichero)
107
3.6.4. Directorios.
int chdir (string directorio) int mkdir (string nombre, int modo) int rmdir (string nombre)
int opendir (string nombre) string readdir (int identificador) void closedir (int identificador)
108
$direcotrio = opendir('.'); while (($fichero = readdir($directorio)) !== FALSE) { echo "$fichero\n"; } closedir($directorio);
109
// Contenido de recibir.php echo Recibido el fichero: ".$fichero_name."<br>; echo Tamao del fichero: . $fichero_size . <br>; echo Tipo mime: . $fichero_type . <br>; rename($fichero, $fichero_name);
IT Colima Ene-Jun 2009 110
112
114
116
117
120
122
En lugar de un interface , se ha optado por utilizar una clase abstracta, porque se tiene claro que el mtodo set_nombre() tiene que funcionar as. Tambin se define el mtodo abstracto get_nombre() , que obligatoriamente debe ser declarado en la clase que herede de sta. En realidad, un interface es una clase que tiene todos sus mtodos abstractos
IT Colima Ene-Jun 2009 123
125
127
$link = mysql_connect ("www.mmlabx.ua.es", "nobody", ""); if (!$link) { die ("No se pudo conectar"); } print ("Conexin realizada"); mysql_close ($link);
IT Colima Ene-Jun 2009 129
131
while ($fila = mysql_fetch_array($asignaturas)) { echo $fila[codigo] . . $fila[nombre] . \n; } while ($fila = mysql_fetch_object($asignaturas)) { echo $fila->codigo . . $fila->nombre . \n; }
IT Colima Ene-Jun 2009 133