Apuntes PHP
Apuntes PHP
!
"
Lenguaje.
− Lenguaje orientado a la web.
− Lenguaje de programación de scripts.
− Es ejecutado en el servidor web: Server Side.
− Es embebido en páginas HTML.
"
Historia y Futuro.
− Iniciado por Rasmus Lerdorf en 1994.
− Primera versión pública: 1995 Personal Home Page
Tools
− Parser reescrito a mediados de 1995: PHP/FI versión
2 con soporte de mySQL.
− Finales de 1996: PHP/FI usado en más de 15.000
webs.
− Mediados de 1997: 50.000 webs.
− Zeev Suraski y Andi Gutmans reescriben el parser de
PHP/FI y aparece PHP versión 3.
− Para finales de este verano se espera la versión 4 de
PHP, con el parser de nuevo reescrito que supondrá
muchas mejoras en soporte de objetos, velocidad de
ejecución y disponibilidad para múltiples plataformas y
programas.
"
Integración en la web.
− Embebido en página HTML. TAGS.
− Intérprete como módulo de Apache.
− Intérprete como CGI.
"
Autentificación HTTP.
− Mediante cabeceras HTTP, ó métodos mas complejos
con cookies, identificadores en urls o directorios.
"
"
Upload de ficheros.
− Gestión de campos FILE en formularios, limitación de
tamaño, etc.
"
Manejo de cookies.
"
"
"
"
"
Módulo de Apache.
− A partir de RPMs de Red Hat 6.0.
− A partir de código fuente.
"
CGI.
− A partir de RPM de Red Hat 6.0.
− A partir de código fuente.
"
CGI.
− Configuración del servidor para usar el intérprete de
php para los ficheros de la extensión .php3.
"
<SCRIPT Language="php">
echo ("hola\n");
</SCRIPT>
#
Enteros.
Son admitidos los siguientes formatos:
$a = 1234; # decimal
$a = −123; # decimal negativo
$a = 0123; # octal (83 en decimal)
$a = 0x12; # hexadecimal (18 en decimal)
#
Strings.
Las cadenas de texto pueden ser definidas entre
comillas dobles o simples.
$texto="cadena";
$texto=’cadena’;
La diferencia es que con comillas dobles se realiza
expansión de variables y de los caracteres de escape \n
\t \r \\ \$ y \".
Con comillas simples sólo se procesa \\ y \’.
<? $var="hola";
echo "$var que tal"; # imprime: hola que tal
echo ’$var que tal"; # imprime: $var que tal ?>
Las strings se concatenan con puntos:
<? $var=$cadena." otra cadena ".$otra_var; ?>
#
Arrays.
PHP soporta arrays escalares y asociativos, al igual que
Perl.
$a[0] = "abc";
$a[1] = "def";
$b["identificador"] = 13;
$c[] = "test1"; # equivalente a $c[0]="test1"
$c[] = "test2"; # equivalente a $c[1]="test1"
$bidimensional[0][1]="posición 0,1";
$bidimensional["id"][3]="mezcla asociativo y normal";
Las funciones array y list pueden ser usadas para
construir arrays.
#
Objects.
Los objetos en PHP versión 3.0 son útiles y usables,
pero aú no son lo suficientemente potentes como para
construir sistemas de objetos complejos.
class mi_objeto {
function hacer_cosas () {
echo "Haciendo cosas.";
}
}
$a = new mi_objeto;
$a −> hacer_cosas ();
Aritméticos:
+, −, *, / y % ($a + $b, etc...)
"
Strings:
. (Concatena strings: $a= $cadena . " texto";)
"
Asignación:
El operador de asignación fundamental es =. Sobre él
hay variaciones como .=, +=, *=, etc...
"
Sobre bits:
& (And), | (Or), ~ (Not), << (Mult. x2, desplaz izq.), >>
(Div. /2, despaz. dcha.)
"
Lógicos:
And, or, xor, !, &&, ||, ^
"
De comparación:
==, !=, <, >, <=, >=, (expr1) ? (expr2) : (expr3);
"
Prioridad de operadores:
new
[y(
! ~, ++ −− y castings
*/%
+−.
<< >>
< <= > >=
== !=
&
^
|
&&
||
?:
= += −= *= /= .= %= &= != ~= <<= >>=
print
and
xor
or
,
Agrupan statements.
"
while
while (expr) statement
while (expr): statement ... endwhile;
"
do ... while
do { statements } while (expr);
"
for
for (inicial; condicion; incremento) statement
for (inicial; condicion; incremento): statement; ...; endfor;
"
break
"
continue
"
switch
switch ($i) {
case 0:
print "i es igual a 0";
break;
case 1:
print "i es igual a 1";
break;
case 2:
print "i es igual a 2";
break;
default:
print "i no es igual a 0, 1 o 2"
}
"
require
require ’header.inc’;
Inserta el fichero una sóla vez, sin ejecutarlo, y luego se
interpreta el script entero.
"
include
include($fichero);
Inserta el fichero y lo evalua cada vez que se encuentra.
"
function
function ejemplo ($arg_1, $arg_2, ..., $arg_n) {
echo "funcion de ejemplo.\n";
return $valor;
}
return devuelve el resultado de la función.
Los argumentos pueden ser pasados por valor ($arg1,
$arg2) o por referencia (con (&$arg1, &$arg2))
PHP también admite establecer valores por defecto para
los argumentos, y que no se produzca una advertencia
en caso de que alguno no sea especificado:
function ejemplo ($arg_1, $arg_2="nada") {
if ($arg_2=="nada") {
echo "No se ha pasado el segundo argumento"
}
echo "funcion de ejemplo.\n";
return $valor;
}
"
class
class nombre {
var variable;
...
function nombre_metodo ($param) {
$this−>variable=$param;
}
...
}
PHP posee gran cantidad de funciones para todo tipo de
tareas.
Con los ejemplos se irán viendo funciones y aprendiendo su
uso.
Siempre es aconsejable programar con el manual de
referencia e ir buscando las funciones a utilizar en cada
caso.
PHP define automáticamente variables de cookies,
formularios enviados via POST o GET.
También las variables de entorno impuestas por apache
aparecen como variables más.
Adicionalmente existen una serie de constantes
relaccionadas con PHP:
#
__FILE__
Nombre del script que se está ejecutando.
#
__LINE__
Linea del script que se está ejecutando.
#
PHP_VERSION
Version de PHP en uso. Ej: ’3.0.11’.
#
PHP_OS
Nombre del sistema operativo en uso. Ej: ’Linux’.
#
TRUE
Contiene el valor verdadero.
#
FALSE
Contiene el valor falso.
#
E_ERROR
Error no recuperable.
#
E_WARNING
Error en alguna parte, pero se continua la ejecución.
#
E_PARSE
Error de sintaxis encontrado por el parser. Irrecuperable.
#
E_NOTICE
Algo ha pasado, pero no llega a la categoría de error. Uso
de strings sin comillas en arrays, acceso a variables no
definidas, etc.
Veamos que maneras existen en la programación web de
almacenar e interactuar con el usuario
"
Cookies.
SetCookie("nombre[]",$valor,time()+3600,"/dir/",".dominio.e
s",1);
"
Urls GET.
Añadir ?var=valor a todas las URL de una página. Algo
engorroso.
"
while($row = mysql_fetch_object($result)) {
echo $row−>user_id;
echo $row−>fullname;
}
"
Instalación y necesidades.
−Servidor con soporte PHP.
−Base de datos MySQL, PostgreSQL, Oracle ó ODBC.
−Requiere configurar el fichero prepend.php3 para que se
ejecute antes de cualquier fichero .php3.
−Configuración de la base de datos, editando el fichero
local.inc de phplib.
"
Autentificación
page_open(array("feature" => "classname"))
Con las features: auth y perm.
"
Phorum (http://www.phorum.org)
"
IMP (http://horde.org/imp/)
"
auto_append_file [fichero|none]
Nombre del fichero que es automáticamente añadido al
final de los script php3 a no ser de que se terminen con
exit(). El fichero es insertado con la función include() por lo
que se busca en el include_path.
#
auto_prepend_file [fichero|none]
Fichero añadido al principio, llamando a include().
#
display_errors [On|Off]
Imprimir o no los errores en el código HTML resultante.
#
doc_root directorio
Determina el directorio donde se encuentran los
documentos php3. Si estamos en el modo seguro sólo
esos scripts se pueden ejecutar.
#
engine [On|Off]
Útil para configurar algunos directorios de Apache sin
parser php3.
#
error_log [fichero|syslog]
Indica el fichero donde se deben notificar los errores
encontrados en scripts. Si se usa la palabra syslog en NT
los errores son notificados al even log y en UNIX por los
mecanismos tradicionales de syslog.
#
error_reporting nivel
Selecciona que sucesos son notificados: error_reporting()
1 − normal errors
2 − normal warnings
4 − parser errors
8 − non−critical style−related warnings
#
open_basedir directorio
Sólo los ficheros de dentro de ese directorio pueden ser
abierto y leidos por las funciones fopen u otras.
Seguro ante symlinks.
Permite especificar varios directorios separados por : en
UNIX y por ; en Windows. El directorio . Es tratado como
el actual, donde se encuentra el script en ejecución.
#
gpc_order [GPC|GCP|PCG|PGC|CGP|CPG]
Orden de parsing de las variables recibidas. Se puede
omitir uno de los métodos de recepción.
#
ignore_user_abort [On|Off]
Completar la ejecución de los scripts aunqueel usuario
pare y cierre la conexión.
#
include_path directorios
Directorios donde include() y require() buscan los ficheros.
Directorios múltiples separados por : en UNIX y , en
Windows.
#
log_errors [On|Off]
Define si los errores serán enviados al log del servidor.
#
magic_quotes_gpc [On|Off]
Comillas y \ son transformados a \" \’ y \\ para operaciones
(Get/Post/Cookie) automáticamente.
#
magic_quotes_runtime [On|Off]
Lo mismo pero para todas las funciones que devuelvan
texto de bases de datos o similares.
#
max_execution_time segundos
Máximo tiempo permitido de ejecución del script.
#
memory_limit numbytes
Máxima memoria consumida por un script.
#
short_open_tag [On|Off]
Uso de tags reducidos <? ?>
#
asp_tags [On|Off]
Uso de tags estilo ASP <% %> y <%=$variable %>
#
track_errors [On|Off]
Si está habilitado, el último mensaje de error estará
almacenado en la variable global $php_errormsg
#
track_vars [On|Off]
Habilita los arrays asociativos $HTTP_GET_VARS,
$HTTP_POST_VARS y $HTTP_COOKIE_VARS
#
upload_tmp_dir directorio
directorio temporal usado mientras se hace upload de
ficheros.
#
user_dir directorio
Directorio base de los usuarios donde les es permitido
colocar scripts php3, limitado en caso de habilitar el modo
seguro.
#
SMTP dirección
Nombre DNS o dirección IP que debe usar PHP en
Windows como servidor SMTP para el envio de correo.
#
sendmail_from email
Dirección usada por PHP como From: en los mensajes.
#
sendmail_path path
Ruta y parámetros con que debe llamarse al sendmail
para enviar correo. /usr/sbin/sendmail −t por ejemplo.
safe_mode [On|Off]
Habilitar el modo seguro de PHP.
#
safe_mode_exec_dir directorio
Directorio donde se encuentran los programas que están
permitidos ejecutar desde los scripts.
debugger.host direccion
Nombre DNS ó dirección IP de la máquina usada como
debugger.
#
debugger.port puerto
Puerto de la máquina donde se envia la información.
#
debugger.enabled [On|Off]
Habilita/deshabilita el debugger.
#
enable_dl [On|Off]
Usable con PHP como módulo de Apache. Permite cargar
librerías dinámicamente.
#
extension_dir directorio
Directorio donde se encuentran las extensiones.
#
extension nombre
Para definir que extensiones queremos cargar al arrancar.
Una linea extension=nombre por cada módulo.
*.allow_persistent [On|Off]
Habilita conexiones persistentes (mejoran el rendimiento).
#
*.max_persistent número
Máximo de conexiones persistentes.
#
bcmath.scale número
Número de decimales usado en las funciones BC_Math
<HTML>
<HEAD>
<TITLE>Ejemplo 1</TITLE>
</HEAD>
<BODY>
<?php echo "Hola Mundo\n<BR>" ?>
<?php echo ’Hola Mundo\n<BR>’ ?>
<? echo "Hola Mundo\n<BR>" ?>
<% echo "Hola Mundo\n<BR>" %>
<? $hola="Mundo";
$saludo="Hola ".$hola;
echo "Hola $hola\n<BR>";
?>
<%= $saludo %>
<?php
echo ("<BR>".
"y la despedida ".
"final...\n<BR>");
$despedida[]="Adios";
$despedida[]="mundo";
$despedida[]="cruel";
while (list($pos,$palabra)=each($despedida)) {
echo "$palabra"." ";
?>
</BODY></HTML>
#
Formulario típico
En una página HTML:
<FORM ACTION="recibir_login.php3" METHOD="POST">
Login: <INPUT TYPE="text" NAME="login"><BR>
Password: <INPUT TYPE="text" NAME="passwd"><BR>
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
Código PHP sencillo para recibir los datos:
<?
echo "Login: $login \n<BR>";
echo "Password: $passwd \n<BR>";
?>
#
Establecer la conexión
#
Liberar memoria
$nombre_campo_file
Nombre temporal del fichero en el disco del servidor.
#
$nombre_campo_file_name
Nombre original del fichero en el navegador del cliente
#
$nombre_campo_file_size
Tamaño en bytes del fichero subido.
#
$nombre_campo_file_type
Tipo mime del fichero, si el navegador proporciona esta
información.
nombre_campo_file es el nombre que elijamos para el
campo FILE del formulario. De esa manera se puede
soportar la subida de varios ficheros de una vez, o
añadiendo al nombre los corchetes para que se comporte
como array.
PHP recibe la identificación del navegador y aparece dentro
de los scripts como la variable global:
$HTTP_USER_AGENT
Consultándola y actuando en consecuencia se puede
personalizar la página para cada navegador. Es buena idea
ver detectores como los javascript de Netscape para ver que
condiciones cumple cada navegador.