Publicado el 23 de Diciembre del 2018
1.343 visualizaciones desde el 23 de Diciembre del 2018
198,3 KB
34 paginas
Creado hace 12a (08/04/2013)
PHP
Aplicaciones Web/Sistemas Web
Juan Pavón Mestras
Dep. Ingeniería del Software e Inteligencia Artificial
Facultad de Informática
Universidad Complutense Madrid
Material bajo licencia Creative Commons
PHP
PHP: Hypertext Preprocessor
Lenguaje de script que se ejecuta en el servidor
El resultado se devuelve al navegador como HTML
Capacidad para:
• Generar páginas de contenido dinámico
• HTML, imágenes, videos, PDF, XML, etc.
• Crear, abrir, leer, escribir, cerrar ficheros en el servidor
• Utilizar bases de datos
• Procesar datos de formularios
• Enviar y recibir cookies
• Control de acceso de usuarios al sitio web
• Encriptar datos
Alternativas
CGI/Perl
Microsoft ASP y ASP.NET (C# y Visual Basic .NET como lenguajes)
JSP/Java servlets
ColdFusion (Adobe)
Juan Pavón - UCM 2012-13
Aplicaciones Web / Sistemas Web
2
Instalación y configuración
Instrucciones de instalación de PHP en sitio web oficial:
http://php.net/manual/en/install.php
Requiere también la instalación de una base de datos
• MySQL
• PostgreSQL
Configuración de PHP
Fichero php.ini
Se puede ver con phpinfo()
Editores PHP
http://free-php-editor.com/
http://en.wikipedia.org/wiki/List_of_PHP_editors
• Aptana Studio
• Eclipse con PHPEclipse o PHP Development Tools
• Netbeans
• Notepad++
• Adobe Dreamweaver
Juan Pavón - UCM 2012-13
PHP
PHP en un servidor Web
web Servidor Web dinámico
Cliente
Navegador
«request»
GET index.php
código
HTML
Servidor Web
httpd
Intérprete PHP
(Genera HTML)
Busca página index.php
Consulta
index.php
Repositorio
de páginas
Base de
datos
Juan Pavón - UCM 2012-13
PHP
3
4
Funcionamiento de PHP
holamundo.php
<html>
<head>
<title>Hola Mundo PHP</title>
</head>
<body>
<?php echo '<h1>Hola Mundo PHP</h1>'; ?>
</body>
</html>
intérprete PHP
<html>
<head>
<title>Hola Mundo PHP</title>
</head>
<body>
<h1>Hola Mundo PHP</h1>
</body>
</html>
GET holamundo.php
Juan Pavón - UCM 2012-13
PHP
Versiones de PHP
Personal Home Page Tools (PHP Tools)
Creado por Rasmus Lerdorf (1995) para mostrar su CV y guardar
datos, como las consultas a su página web
PHP 4 (2000), con el motor Zend Engine 1.0
PHP 5 (2004), con el motor Zend Engine II
Nuevo modelo de objetos, mejoras de rendimiento y mayor soporte de
integración con otras herramientas y lenguajes
Actualmente 5.5 (2013)
Web oficial: http://www.php.net
Licencia PHP
Similar a GNU GPL, pero con restricciones en el uso del término "PHP"
Otros usos
Extensiones para poder hacer aplicaciones gráficas
• PHP-Qt
• PHP-GTK
Para scripts en línea de comandos
• PHP-CLI (Command Line Interface)
Juan Pavón - UCM 2012-13
PHP
5
6
PHP
Elementos del lenguaje
Código PHP
El servidor procesa código PHP en ficheros con extensión .php
Un fichero .php puede contener texto de varios tipos:
• Código PHP
• Código HTML
• Código JavaScript
El código PHP normalmente está embebido en texto HTML
<?php ... ?>
• Sintaxis recomendada
<? ... ?>
• Short tags: Requiere que esté habilitada con la propiedad
short_open_tag on en el fichero de configuración php.ini
<script language="php"> ... </script>
• Como scripts en HTML (poco habitual)
<% ... %>
• Estilo de ASP (no válido a partir de PHP 5.3)
• Requiere que esté habilitada con la propiedad asp_tags on en el
fichero de configuración php.ini
Juan Pavón - UCM 2012-13
PHP
8
Código PHP
Evaluación de expresiones en línea
<?= expresión ?>
• Equivale a <?php echo(expresión) ?>
<html>
<head>
</head>
<body>
</body>
</html>
<title>Evaluación de expresiones en línea</title>
<!‐‐ Expresión en línea ‐‐>
<p>2+2= <?= 2 + 2 ?></p>
<!– Forma habitual de incluir código PHP ‐‐>
<p>2+2= <?php echo(2 + 2); ?></p>
Juan Pavón - UCM 2012-13
PHP
9
Inclusión de ficheros PHP
Se pueden incluir otros ficheros con funciones de inclusión PHP:
require('/directorio/fichero');
include('/directorio/fichero');
require_once('/directorio/fichero');
include_once('/directorio/fichero');
• require produce un error fatal y la terminación del script si falla
• include solo produce un warning
• include_once y require_once para incluir definiciones estáticas
El directorio desde donde se buscan los includes se define en la
directiva include_path del fichero php.ini
<html>
<?php
require ($_SERVER['DOCUMENT_ROOT'].'cabecera.php');
?>
<body>
<p>La cabecera de este documento la ha generado un programa PHP.
</p>
</body>
</html>
Juan Pavón - UCM 2012-13
PHP
10
Sintaxis de PHP
PHP distingue entre mayúsculas y minúsculas
Instrucciones
Todas las instrucciones acaban con ;
• Solo la última instrucción puede no acabar en ;
Se recomienda escribir cada instrucción en una línea
• Aunque pueden ir en varias líneas
• Los espacios y las líneas en blanco no se consideran
<?php
echo "Hola Mundo";
?>
Comentarios
<?php
echo
"Hola Mundo";
?>
Este sí
<?php
echo "Hola
Mundo";
?>
// o # para comentarios hasta el final de la línea
/* ... */ para comentarios en varias líneas
Juan Pavón - UCM 2012-13
PHP
11
Generación de código HTML
Indistintamente con echo o print
void echo(string argument1 [, ...string argumentN])
int print(argument)
Son similares salvo que print
• Solo tiene un argumento (echo puede tener varios)
• print devuelve 1 (significa que ha generado la salida)
$usuario = "Juan";
echo "<p>Bienvenido $usuario</p>";
print "<p>Bienvenido $usuario</p>";
print("<p>Bienvenido $usuario</p>");
<p>Bienvenido Juan</p><p>Bienvenido Juan</p><p>Bienvenido Juan</p>
Juan Pavón - UCM 2012-13
PHP
12
Generación de código HTML
Cuando hay varios argumentos a los que se les quiere aplicar un
formato: printf
integer printf(string format [, mixed args])
Tipos:
• %b
• %c
• %d
• %f
• %o
• %s
• %u
• %x
número binario
carácter ASCII
número entero
número en coma flotante
número en octal
string
número decimal sin signo
hexadecimal
printf("%d kilos de caramelos cuestan %.2f euros", 3, 27.90);
3 kilos de caramelos cuestan 27.90 euros
sprintf() hace lo mismo pero genera un string que se puede
asignar a una variable
Juan Pavón - UCM 2012-13
PHP
13
Variables
Todas las variables empiezan con el signo '$'
$identificador
El identificador comienza por letra o subrayado '_'
El resto de caracteres pueden ser letras, números o subrayado '_'
El identificador tiene en cuenta mayúsculas y minúsculas
Se definen automáticamente en su primera utilización
No se declara el tipo de las variables
Se puede averiguar con gettype() o var_dump()
Las variables se pueden asignar
Por valor
Por referencia (con &)
• Un cambio en la referencia también se aplica a la variable original
$x = 'equis';
$_x = &$x;
$_x = 'x';
echo $x;
echo $_x;
// referencia a $x
// x
// x
PHP
Juan Pavón - UCM 2012-13
14
Variables
Ámbito de variables
Local
• Una variable definida en una función está limitada a dicha función
• Se elimina al acabar la ejecución de la función
• Salvo si la variable se declara como static
• Las variables static solo se usan en la función
• En las siguientes invocaciones a la función preservan su valor anterior
Global
• Una variable definida fuera de una función
• Se pueden definir en una parte y usarse en otra
• Pero no dentro de las funciones
• A menos que se declare en la función con la palabra clave global
• O que se acceda con el array $GLOBALS[indice]
• Existen durante todo el tiempo de proceso del fichero
• Al acabar de procesar la página se eliminan las variables globales
• Nuevas ejecuciones definen nuevas variables globales
Superglobal
• Siempre disponibles
• Variables predefinidas en el lenguaje, como $GLOBALS
Juan Pavón - UCM 2012-13
PHP
15
Ejercicio
Variables
¿Cuál será la salida del siguiente código?
<?php
?>
$x=1;
$y=2;
function prueba() {
$x=9;
echo $x.' ';
echo $GLOBALS['x'].' ';
global $y;
$y = $x + $y;
}
prueba();
echo $x.' ';
echo $y.' ';
Juan Pavón - UCM 2012-13
PHP
16
Variables superglobales
Variables predefinidas del lenguaje (son arrays asociativos)
$GLOBALS: Referencia a las variables disponibles en el ámbito global
$_SERVER: Información del entorno del servidor y de ejecución
$_GET: Variables que se han pasado al script en un GET
$_POST: Variables que se han pasado al script en un POST
$_FILES: Elementos (ficheros) que se han pasado al script en un POST
$_COOKIE: Variables pasadas al script como cookies HTTP
$_REQUEST: contiene el contenido de $_GET, $_POST y $_COOKIE
$_ENV: Variables del entorno del servidor
$_SESSION: Variables disponibles para la sesión actual
echo $_SERVER['SERVER_NAME'];
echo $_SERVER['SERVER_ADDR'];
echo $_SERVER['REMOTE_ADDR'];
echo $_SERVER['HTTP_USER_AGENT'];
echo $_SERVER['DOCUMENT_ROOT'];
// nombre del (virtual) host
// IP del servidor
// IP del cliente
// El navegador del cliente
// Directorio raíz de los docs
echo 'Mi usuario es ' .$_ENV["USER"] . '.';
echo 'Hola ' . htmlspecialchars($_GET["nombre"]);// http://ejemplo.com/?nombre=Juan
echo 'Hola ' . htmlspecialchars($_COOKIE["nombre"]); // si existe el cookie nombre
Juan Pavón - UCM 2012-13
PHP
17
Evitar register_globals
Antiguamente se utilizaba la directiva register_globals (en
php.ini) para permitir la inicialización automática de variables
globales
En PHP 4.2.0 se decidió que fuera desactivada por defecto
A partir de PHP 5.4.0 está eliminada
• http://www.php.net/manual/es/faq.using.php#faq.register-globals
Agujero de seguridad:
<?php
// Se usa la variable $authorized para indicar si el usuario tiene privilegios
if (authenticated_user()) {
$authorized = true;
}
// Como no se ha inicializado previamente a false,
// si register_globals está activado, podría inicializarse,
// por ejemplo, desde una petición GET auth.php?authorized=1
// que le daría el valor inicial como true.
// Con código como el siguiente entraría como usuario autorizado:
if ($authorized) {
include "/datos/muy/privados/l
Comentarios de: PHP (0)
No hay comentarios