1. Introducción
2. Instalación de PHP en Linux con Apache y MySQL
3. Instalación de PHP en Windows 95/98/NT con Apache y MySQL
4. Seguridad y PHP
5. Lenguaje PHP
6. Variables
7. Constantes
8. Expresiones y operadores
9. Estructuras de Control
10. Funciones
11. Clases y objetos
12. Manejo de Errores
13. Creación de Imágenes GIF
14. Problema de la autentificación de un Usuario con PHP
15. Cookies
16. Utilización de ficheros remotos
17. Manejo de conexiones
18. Conexiones a bases de datos
19. Funciones de PHP
20. Direcciones de Interés
Ahora está disponible la versión 3 de PHP, o la versión 4 no definitiva, Profesional Home Pages, la solución para la construcción de Webs con independencia de la Base de Datos y del servidor Web, válida para cualquier plataforma. El objetivo final es conseguir la integración de las paginas HTML con aplicaciones que corran en el servidor como procesos integrados en el mismo, y no como un proceso separado, como ocurría con los CGIs. Igualmente interesa que dichas aplicaciones sean totalmente independientes del navegador (lo que no ocurría con otros lenguajes basados en scripts, como JavaScript o VisualBasic Script), independientes de la plataforma y de la Base de Datos.
Perl ha sido el lenguaje que ha servido como estándar para construir CGIs durante mucho tiempo, y aún sigue siendo una de las mejores soluciones para desarrollar aplicaciones Web portables, ya que trabaja sobre cualquier servidor Web que soporte CGIs, y sobre cualquier plataforma que soporte Perl, que son la mayoría, incluso ha servido para desarrollar módulos que extienden la funcionalidad de los servidores. Pero nada tiene que envidiar PHP. PHP, está más orientado a conexiones entre páginas Web y servidores donde se almacenan toda clase de Bases de Datos.
Soporta un único "Safe Mode", es decir, un mecanismo de seguridad que permite que varios usuarios estén corriendo scripts PHP sobre el mismo servidor. Este mecanismo está basado en un esquema de permisos de ficheros, permitiendo el acceso a aquellos ficheros que son apropiados por el mismo identificador de usuario que el del script que está intentando acceder a ese fichero, o bien cuando el fichero está en el directorio que es propiedad del mismo identificador de usuario que el del script que está intentando acceder.
PHP es un lenguaje de programación soportado por HTML. La sintaxis está heredada de C, Java y Perl. Este lenguaje está orientado para los constructores de páginas Webs, permitiendoles crear páginas dinámicamente generadas de forma rápida.
Para ilustrar esto podemos ver un simple ejemplo:
<html> <head> <title>Example</title> </head> <body> <?php echo "Hi, Esto es un Script PHP";?> </body> </html>Esto es muy parecido a cualquier otro Script escrito en Perl o C. El código de PHP está incluido en tags especiales "<?,?>".
Lo que hace diferente a PHP es que el código que se deba ejecutar se ejecuta siempre en el servidor.
Así, al ejecutar el script anterior, el cliente recibirá sólo los resultados de la ejecución por lo que es imposible para el cliente acceder al código que generó la página.
Además de esto, PHP soporta la utilización de otros protocolos como IMAP, SNMP, NNTP, POP3 o HTTP a nivel de socket.
- Adabas D
- dBase
- Empress
- FiclePro
- informix
- InterBase
- Solid
- Sybase
- Velocis
- Unix dbm
- mSQL
- MySQL
- Oracle
- PosgreSQL
Al principio, PHP sólo estaba compuesto por algunas macros que facilitaban el trabajo a la hora de crear una página Web. Hacia mediados de 1995 se creo el analizador sintáctico y se llamó PHP/F1 Versión 2, y sólo reconocía el texto HTML y algunas directivas de mSQL. A partir de este momento, la contribución al código fue pública.
El crecimiento de PHP desde entonces ha sido exponencial, y han surgido versiones nuevas como la actual, PHP3 y la incipiente PHP4.
En este apartado se describe el proceso de instalción de la base de datos MySQL, de un servidor web Apache con PHP, en una máquina con sistema operativo Linux o Unix.
Lo primero que se debe hacer es conseguir los paquetes necesarios, y que mejor para ello que diriguirnos a las páginas web (o cualquiera de sus mirros) de los programas en cuestión:
Lo primero que se debe hacer es escoger un directorio de instalación, aunque lo normal sería en /usr/local, /urs/src, o bien en /opt. Para el ejemplo se va a seleccionar /usr/local aunque el proceso sería idéntico para cualquier otro.
Una vez bajados los paquetes se suponen almacenados en el direcctorio
/root/install y el primer paso es descomprimir.
Se crean enlaces sencillos al código fuente:cd /usr/local tar zxvf /root/install/apache-1.3.x.tar.gz tar zxvf /root/instal/mysql-3.22.x.tar.gz tar zxvf /root/instal/php-3.0.x.tar-gz
Se preparan los fuentes para la compilación de Apache:ln -s /usr/local/apache-1.3.x /usr/local/apache ln -s /usr/local/mysql-3.22.x /usr/local/mysql ln -s /usr/local/php-3.0.x /usr/local/php
Se compila e instala MySQL:cd /usr/loca/apache ./configure --prefix=/usr/local/apache
Se crean las bases de datos del sistema MySQL:cd /usr/local/mysql ./configure --witout-debug --prefix=/usr/local/mysql make make install cp /usr/local/support-files/mysql.server /etc/rc.d/init.d/mysql chmod 755 /etc/rc.d/init.d/mysql
Se inicia el servidor MySQL:/usr/local/mysql/bin/mysql_install_db
Se asigna Password de administrador de MySQL (root):/etc/rc.d/init.d/mysql start
Ahora le toca el turno a la compilación de PHP como módulo de Apache:/usr/local/mysql/bin/mysqladmin -u root password "clave"
Compilación de Apache:cd /usr/local/php ./configure --with-mysql=/usr/local/mysql \ --with-apache=/usr/local/apache \ --enable-track-vars make make install #cp php3.ini-dist /usr/local/lib/php3.ini
Para definir las extensiones de los scripts PHP, hay que añadir las siguientes lineas en el fichero de configuración de apache (httpd.conf):cd /usr/local/apache ./configure --prefix=/usr/local/apache \ --activate-module=src/modules/php3/libphp3.a # si hemos compilado PHP4 utilizaremos #--activate-module=src/modules/php4/libphp4.a # quitar los comentarios para habilitar el módulo de proxy #--activate-module=src/modules/proxy/libproxy.a make make install
Ahora ya sólo resta arrancar el servidor, copiando primero el script de arranque en /etc/rc.d/init.d.AddType application/x-httpd-php3 .php3 AddType application/x-httpd-php3 .php AddType application/x-httpd-php3 .phtml
Para comprobar la instalación creese un fichero llamado test.php3 con la siguiente línea:cp /usr/local/apache/bin/apachecte /etc/rc.d/init.d/apache /etc/rc.d/init.d/apache start
Colóquelo en el directorio de documentos de Apache y llámelo desde el navegador. Si todo está correcto, aparecerá una página con información general a cerca del entorno de PHP.<?php phpinfo() ?>
NOTA: Esta instalación es básica, si se desea hacer una instalación más completa será necesario acudir a los manuales que figuran al final de este tutorial.
Lo primero que se debe hacer es conseguir los programas necesarios,
y que mejor para ello es diriguirse a las páginas web (o cualquiera
de sus mirros) de los programas en cuestión:
La instalación de estos programas es muy fácil, PHP y MySQL vienen comprimidos en formato ZIP y sólo los tenemos que descomprimir en una carpeta, mientras que Apache es autoejecutable:
Descomprimimos PHP en "C:\php3"Una vez instalados los programas, sólosólo queda hacer pequeños ajustes de configuración:
Descomprimimos MySQL en "C:\mysql"
Hacemos "doble click" en el fichero de Apache y aceptamos el directorio de instalación por defecto "C:\Archivos de Programas\Apache Group\Apache".
Editar el fichero de configuración http.conf que se halla
en "C:\Archivos de Programas\Apache Group\Apache\conf\"
Buscar la línea:
#ServerName new.host.nameQuitar el comentario (#) y la cambiarla por:
ServerName http://localhostIndicamos el directorio de PHP:
ScriptAlias /php3 "C:\php3"Definir la extensión de los script PHP:
AddType application/x-httpd-php3 .php3Y asignar la aplicación para las extensiones PHP:
AddType application/x-httpd-php3 .php
AddType application/x-httpd-php3 .phtml
Action application/x-httpd-php3 "/php3/php.exe"Por defecto los ficheros que son accesibles desde el navegador se encuentran el la carpeta htdocs del directorio de Apache, pero es posible cambiarla:
DocumentRoot "C:\www" <Directory "C:\www"> ...... <Directory>
Para configurar PHP, primero se debe buscar el fichero php3.ini-dist
y renombrarlo a php.ini, editarlo y cambiar:
La expresión "extension_dir" por:
extension_dir = C:\php3Para añadir soporte para MySQL buscar la línea:
; extension = php3_mysql.dllY cambiarla por:
extension = php3_mysql.dllCopia el fichero php3.ini en "C:\windows\"
Para la ejecución de los programas instalados:
C:\Archivos de Progrmas\Apache Group\Apache\apache.exeTambién se puede arrancar el servidor Apache desde el menú de inicio:
C:\mysql\bin\mysqld.exe
#Para la versión shareware
C:\mysql\bin\mysqld-shareware.exe
Inicio->Programas->Apache Web Server->StartPara comprobar la instalación creese un fichero llamado test.php3 con la siguiente línea:
Colóquelo en el directorio de documentos de Apache y llámelo desde el navegador. Si todo está correcto, aparecerá una página con información general a cerca del entorno de PHP.<?php phpinfo() ?>
NOTA: Esta instalación es básica, si se desea hacer una instalación más completa será necesario acudir a los manuales que figuran al final de este tutorial.arriba
Por ejemplo, si accedemos al sistema de ficheros mediante la línea:
http://my.host/cgi-bin/php?/etc/passwd
En http, todo lo que se pase detrás del símbolo ? es la línea de argumentos que el interfaz CGI interpreta. Curiosamente, si a un sistema Linux, le pasas la instrucción /etc/passwd, el sistema intenta ejecutar este comando y esto puede ser un fallo en la seguridad.
Otro posible ataque, intenta acceder a los ficheros del servidor web a los que no se debe tener acceso. Para evitar esto, existen opciones de configuración que redirigen todas las peticiones al intérprete de PHP forzando un chequeo de acceso al fichero que se pide.
Algunas de estas opciones de seguridad son:
- Si se activa la opción disable-force-cgi-redirect se obliga a que tanto las peticiones del tipo http://my.host.cgi-bin/php/dir/script.php3 como las peticiones del tipo http://my.host/dir/script.php3 sean analizadas por el intérprete PHP.
- Otras opciones posibles en la configuración es combinar la direcctiva Action y AddHandler mediante estas opciones se configura la redirección de las llamadas para que sean intérpretadas.
Esta opción ha sido probada en Apache y a este servidor se refiere.
Action php3-script /cgi-bin/php Addhandler php3-script.php3
- La tercera opción es utilizar las directivas doc_root y user_dir.
Estas directivas se utilizan en servidores Web que no disponen de la facilidad del redireccionamiento. Supongamos que un script no se ejecuta correctamente, en este caso, el código se muestra en pantalla y esto puede violar la propiedad intelectual de ese script.Para solucionar esto, se colocan todos los scripts PHP ejecutables en un directorio, que indica la directiva doc_root asegurando así que todo lo que esté en ese directorio será ejecutado y nunca mostrado al usuario.
Si esta directiva se combina con user_dir se permitirá ejecutar, ante llamadas del tipo: http://my.host/~user/doc.php3 ficheros que estén en el directorio que indica user_dir bajo el directorio /home/user/.
- Otra práctica muy segura es mantener la instalación del intérprete fuera del arbol web. Si esto es así, se deberán hacer los ficheros php ejecutables, modificando los atributos del fichero y además se deberá incluir en la primera línea del script la dirección del intérprete, #!/usr/local/bin/php por ejemplo.
- <? .... ?> Sólo si se activa la función short_tags() o la bandera de configuración short_open_tag.
- <?php .... ?>
- <script languaje="php"> .... </script>
- <% .... %> Sólo si se activan los tags para ficheros 'asp' con la bandera de configuración asp_tags.
Respecto al tipo entero y flotante, no hay mucho que decir, así que detallaremos sólo los tipos String, Arrays, Objetos y Juggling.
- Enteros
- Flotantes
- String
- Arrays
- Objetos
- Juggling
$variable = <<< EODEsta última sintaxis sólo se puede utilizar con PHP 4. Las operaciones con cadenas son exactamente igual que en PERL.
Ejemplo de cadena
que ocupa
varias líneas
EOD;
Ejemplo:
$a[]="hola"
La instrucción anterior añade el string hola al final del array 'a'. Los arrays pueden ser ordenados utilizando las siguientes funciones: asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort() y uksort() .
Otras funciones para el manejo de arrays son: count(), next(), prev() y each() .
En PHP, los arrays multidimensionales combinan las propiedades de un array unidimensional explicados anteriormente. Los indices de un array multidimensional pueden ser tanto numéricos como asociativos.
(Nota: hay que tener cuidado con la sintaxis de los arrays multidimensionales asociativos incluidos dentro de una cadena).
Ejemplo de array multidimensional asociativo:
$a=array(
"manzana" => array("color" => "rojo", "tacto" => "suave"),
"naranja" => array("color" => "naranja", "tacto" => "rugoso"),
"platano" => array("color" => "amarillo", "tacto" => "suave")
);
Para obtener una lista de todas estas variables predefinidas se puede utilizar la funcion phinfo().
De todas estas variables, algunas se crean dependiendo del servidor que se esté utilizando y otras son propias de PHP.
Si se tratara de un servidor Apache, la lista de variables es:
las variables creadas por el propio PHP son:
Por ejemplo:
$a = "hola"; $$a = "mundo"; El ejemplo anterior, define dos variables, una denominada $a que contiene el valor "hola" y otra que se llama $hola que contiene el valor "mundo"
Para acceder al valor de una variable variable, se accede con:
echo "$a ${$a}"; ó echo "$a ${$a}";Ambas sentencias provocaran la salida "hola mundo".
Algo que se debe tener en cuenta cuando se utilizan variables,
es que hay que resolver la ambiguedad que se crea al utilizar arrays de
variables de este tipo. Por ejemplo $$a[1] provoca una ambiguedad
para el intérprete, puesto que no sabe si se desea utilizar la variable
denominada $a[1] o utilizar la variables $a indexandola en su primer valor.
Para esto se utiliza una sintaxis especial que sería ${$a[1]}
o ${$a}[1] según se desee una opción u otra.
Si se activa la directiva <?php_track_vars?> o con la
variable track_vars todo lo enviado por los métodos POST
y GET estará en las variables $HTTP_POST_VARS y $HTTP_GET_VARS.
Par añadir valores a una cookie se utilizan los corchetes,
[], por ejemplo:
$count++;Este ejemplo mantiene dos Cookies en el cliente. La primera mantiene el contador count y la segunda contiene una lista de los comentarios de cada una de las veces que se ha actualizado la cookie, Visita.
setCookie("count", $count;, time()+3600);
SetCookie("Visita[$count]", "$valor",time()+3600);
Además, existen una serie de variables predefinidas denominadas:
<?php
define("CONSTANTE", "hello world.");
echo CONSTANTE;
?>
Todas las expresiones en PHP son exactamente igual que en C. Los
operadors abreviados, los incrementos, etc, son exactamente iguales. Incluso
existen otros operadores adicionales como el operador "." que concatena
valores de variables, o el operador "===" denominado operador de identidad
que devolverá verdadero si las expresiones a ambos lados del operador
contienen el mismo valor y a la vez son del mismo tipo. Por último,
el operador "@" sirve para el control de errores. Para poder ver como funciona
el operador @, veamos un ejemplo:
<?phpEste ejemplo, utiliza el operador @ en la llamada a mysql_query y en el caso de dar un error, se salvará el mensaje devuelto en una variable denominada php_errormsg. Esta variable contendra el mensaje de error de cada sentencia y si ocurre otro error posterior, se machaca el valor con la nueva cadena.
$res = @mysql_query("select nombre from clientes")
or die ("Error en la selección, '$php_errormsg'");
?>
PHP mantiene también los operadores "'" que sirven para ejecutar un comando del sistema tal y como hace la función system() por ejemplo.
Las diferencias con C son los operadores de referencia, & y *, puesto que las operaciones por referencias no existen en PHP·, aunque si son posibles en PHP4, y que en PHP existen dos operadores and y dos operadores or que son: 'and', '&&' y 'or', '||' respectivamente, que se diferencian en la precedencia de cada uno.
La tabla que nos puede resumir la precedencia de cada uno de los operadores es:
Asocitividad | Operadores |
Izquierda | , |
Izquierda | or |
Izquierda | xor |
Izquierda | and |
Derecha | |
Izquierda | = += -* *= /= .= %= &= |= ^= ~= <<= >>= |
Izquierda | ?: |
Izquierda | || |
Izquierda | && |
No posee | == != === |
No posee | < <= > >= |
Izquierda | >> << |
Izquierda | + - . |
Izquierda | * / % |
Derecha | ! ~ ++ -- (int) (double) (string) (array) (0bject) @ |
Derecha | [ |
No posee | new |
Estructura | Alternativa |
If, if else, if elseif | if: endif; |
while | while: endwhile; |
for | for: endfor; |
do.. while | - |
foreach(array as $value)
foreach(array as $key=>$value) (PHP4 y no PHP3) |
- |
switch | switch: endswitch; |
continue | - |
break | - |
require()(Necesitan estar dentro de tags PHP) | - |
include()(Necesitan estar dentro de tags PHP) | - |
Una nota sobre require() y include(), Si se desea incluir un fichero de forma condicional, es mejor utilizar include(), sin embargo, si la línea donde está una instrucción require() no se ejecuta, no se ejecutará nada de ese fichero. Además, si en un bucle se ejecutan varias veces una instrucción require(), el intérprete lo incluirá una sóla vez, sin embargo si es include(), se incluirá el fichero cada vez que se ejecute la instrucción. Como apunte final, debes saber que en un fichero que va a ser requerido, se puede incluir una instrucción return al final como si esta instrucción devolviera un valor (sólo en PHP3), si se trata de include, se puede poner al final del fichero una instrucción return tanto en PHP3 como en PHP4, aunque con algunas diferencias.
Así, require, reemplaza su llamada por el contenido del fichero que requiere, e include, incluye y evalua el fichero especificado.
function foo($arg1, $arg2, ..., $argN)Dentro de una función puede aparecer cualquier cosa, incluso otra función o definiciones de clase.
{echo "Función ejemplo"}
return $value;
En PHP3 es necesario que una función esté declarada antes de ser referenciada, y en PHP4 esto no es necesario.
No es posible realizar sobrecarga de funciones o número variable de argumentos en PHP3 pero sí en PHP4, aunque esto se puede simular en PHP3 pasando un array de argumentos.
Respecto al paso de argumentos, son siempre pasados por valor y para pasarlos por referencia hay que indicarlo y se puede hacer de dos formas diferentes, en la definición de la función, anteponiendo el símbolo & al argumento que corresponda, en este caso la llamada será igual que la llamada a una función normal, o manteniendo la definición de la función normal y anteponer un & delante del argumento que corresponda en la llamada a la función.
PHP permite el mecanismo de argumentos por defecto. Un ejemplo
de esta caracteristica es:
function hacerCafe($tipo="capuchino")En la llamada a esta función se obtendrá una frase u otra según se llame:
{return "he hecho un café $tipo\n";}
echo hacerCafe(); o echo hacerCafe("expreso");En el caso de tratarse de una función con argumentos por defecto y argumentos normales, los argumentos por defecto deberán estar agrupados al final de la lista de argumentos.
En PHP4 el número de argumentos de una función definida por el usuario, puede ser variable, se utilizan las funciones func_num_args(), func_get_arg() y func_et_args().
function numeros() {return array(0,1,2);}
list ($cero, $uno, $dos) = numeros();
<?php
funcion foo(){echo "En foo()<br>\n"}
function bar ($arg ='')
{echo " bar();}
El argumento ha sido '$arg'.<br>\n"
$func = 'foo';
$func();
$func='bar';
$func('test');
?>
<?phpEl operador new crea una instancia de la clase Carta.
class Carta
{var $items;}
function add_item ($artnr, $num)
{$this->items[$artnr] +=$num;}
function remove_item8$artnr, $num)
{if ($this->$item($artnr, $num)}
{$this->items[$artnr] -= $num;}
return true;
else
{return false;}
?>
$carta = new Carta;La herencia en PHP se realiza con extends.
Los constructores de cada clase se llaman automáticamente por el operador new . El constructor de cada clase debe tomar el mismo nombre de la clase y cuando se trata de una clase derivada, hay que tener cuidado porque sólo se llama automáticamente al constructor de dicha clase pero no al constructor de la clase padre.
El nivel de error por defecto es 7 (1+2+4), pero esto puede ser modificado en el fichero de configuración php3.ini con la directiva error_reporting
- Funciones de Error (1)
- Warnings (2)
- Errores Parse (4)
- Notices (8)
Cualquier expresión en PHP se puede llamar con la "@" al principio que invocará a la función de manejo de errores, y si track_errors está activada, el error podremos encontrarlo en la variable $php_errormsg.
Un ejemplo de esta característica se muestra en el siguiente
ejemplo:
<?phpEste emplo podría ser invocado desde cualquier página con la línea
Header("Content-type: image/gif");
$string=implode($argb(" ");
$im = imagecreateromgif("images/boton1.gif");
$orange = ImageColorAllocate($im, 220, 210, 60);
$px = (unagesx($im)-7.5*strlen($string))/2;
ImageGif($im);
ImageDestroy($im);
?>
<img src="boton1.php3"?textCon este método puedes generar la imagen adecuada dinámicamente. El parámetro text nos permitirá poner el texto que deseemos en la imagen que vamos a generar.
El funcionamiento es muy sencillo. Una vez que el usuario ha completado los datos que se le piden, se fuerza una nueva llamada al script con las variables $PHP_AUTH_USER, $PHP_AUTH_PW y $PHP_AUTH_TYPE que contendrán el nombre del usuario, el pasword y el tipo de autentificación.
Un ejemplo sencillo es:
<?phpHay que tener mucho cuidado con el orden en el que se envian los diferentes tipos de cabeceras. Esta cabecera de autentificación, debe ir siempre delante de la del tipo HTTP/1.0 401.
if(!isset($PHP_AUTH_USER)){
Header("WWW-Authenticate: Basic realm=\$quot;mi Realm\"");
Header("HTTP/1.0 401 Unauthorized")
echo "TeXto para enviar si se utiliza el botón de Cancelar");
exit;
} else{
echo " Hola $PHP_AUTH_USER <p>";
echo " Tu contraseña es $PHP_AUTH_PW <p>";
}
?>
Otro ejemplo sencillo es:
<?phpNota: Sólo vale para PHP como módulo de Apache
function autentificacion() {
Header( "WWW-authenticate: basic realm='Sistema de autentificacion'");
Header( "HTTP/1.0 401 Unauthorized");
echo "You must enter a valid login ID and password to access this resource\n";
exit;
}
if(!isset($PHP_AUTH_USER) || ($SeenBefore == 1 && !strcmp($OldAuth, $PHP_AUTH_USER)) ) {
autentificacion();
}
else {
echo "Welcome: $PHP_AUTH_USER
";
echo "Old: $OldAuth";
echo "<FORM ACTION=\"$PHP_SELF\" METHOD=POST>\n";
echo "<INPUT TYPE=HIDDEN NAME=\"SeenBefore\" VALUE=\"1\">\n";
echo "<INPUT TYPE=HIDDEN NAME=\"OldAuth\" VALUE=\"$PHP_AUTH_USER\">\n";
echo "<INPUT TYPE=Submit VALUE=\"Re Authenticate\">\n";
echo "</FORM>\n";
}
?>
La función posee el siguiente prototipo:
int setcookie(string name, string value, int expire, string path, string domain, int secure);
Esta función define la cookie que se va a enviar y posee todos los argumentos opcionales a excepción del nombre, aunque los no especificados deben ser indicados "", menos los parametros expire que es un entero regular que puede devolver la función mktime(), y secure, que indica si el cookie deberia ser utilizado sólo sobre conexiones seguras, enteros que deben ser sustituidos por un 0.
Un ejemplo sencillo podría ser:
setcookie ("TestCookie", "Valor de Test");Para poder ver el contenido de un cookie, podemos utilizar:
setcookie ("TestCookie", $value,time()+3600); /* expira en 1 hora*/
setcookie ("TestCookie", $value,time()+3600, "/~rasmus/", ".utoronto.ca", 1);
echo $TestCookie;Se pueden utilizar vectores de cookies.
echo $HTTP_COOKIE_VARS["TestCookie"];
setcookie ("cookie[three]", "cookiethree");
setcookie ("cookie[two]", "cookietwo");
setcookie ("cookie[one]", "cookieone");
if (isset ($cookie)) {while (list ($name, $value) = each ($cookie)) {}
echo "$name == $value
\n";
}
<?php
$file = fopen("http://www.php.net/", "r");
if (!$file) {echo "<p>Unable to open remote file.\n";}
exit;
while (!feof($file)) {$line = fgets($file, 1024);}
/* sólo funciona si todo está en una línea */
if (eregi("(.*)", $line, $out)) {$title = $out[1];}
break;
fclose($file);
?>
En un script normal, el estado es NORMAL, cuando el cliente desconecta, el estado pasa a ser ABORTED y si el límite impuesto por PHP-imposed ha transcurrido, (set_time_limit(), el tiempo por defecto es 30 segundos) el estado es TIMEOUT.
Una función muy util para estos casos, es connection_status() que devuelve el estado de la conexión.
Cuando se invoca una conexión de este tipo, PHP comprueba si existe una conexión de este mismo tipo o por el contrario, se trata de una nueva conexión. En el caso de que exista, se procede a su uso, y en el caso de que no exista, la conexión se crea. Dos conexiones se consideran iguales cuando están realizadas sobre el mismo servidor, con el mismo usuario y la misma contraseña.
Pero en realidad, estas conexiones permanentes, no proporcionan ningún tipo de funcionabilidad adicional frente a conexiones temporales, debido a la forma en que los servidores Web funcionan.
Aún así se utilizan debido a la eficiencia, debido al tiempo de establecimiento de la conexión, y debido a que si tienes una sóla conexión sobre el servidor, irá mucho más rápido que si tienes 10 conexiones temporales, puesto que la carga que soporta es diferente.
int mysql_affected_rows(int [identificador de link]) Devuelve el número de líneas afectadas por la última operación, INSERT, UPDATE o DELETE, asociadas con el identificador que se especifica.Si no se especifica el link, se asume que se refiere al último.
Excepción: Si la última operación ha borrado todos los registros de una tabla, esta función devuelve 0.
Esta función no tiene efecto con ninguna operación SELECT, puesto que no modifican ninguna línea.
int mysql_change_user(string user, string password, string[database], int [identificador de link] Los parámetros database y link son opcionales.
Si la nueva combinación de usuario y password no es correcta, seguirá activa la actual.
int mysql_close(int [identificador de link] Esta función cierra la conexión permanente que mantiene el link. El parámetro es opcional. Si no se especifica, se cerrará la última conexión abierta.
Si una conexión no se cierra, el script la cierra automáticamente al terminar su ejecución.
Esta función no opera correctamente con las conexiones abiertas con la función mysql_pconnect().
int mysql_connect(string[hostname [:port][:/path/to/socket]], string[username],string [password]) Esta función establece una conexión a un servidor mysql. Todos los argumentos son opcionales y los valores por defecto son localhost, el usuario dueño del proceso, sin password.
Si realizas dos veces una llamada a esta función con los mismos parámetros, devuelve el mismo identificador que para la llamada anterior.
Todas las conexiones terminan al terminar la ejecución del script, a no ser que se elimine la conexión llamando a la función mysql_close().
int mysql_create_db(string databaseName, int [identificador del link]) Esta función crea una nueva base de datos asociada al link especificado.
Para mantener la coherencia con otras versiones, se utiliza mysql_createdb()
int mysql_data_seek(int result_identifier, int row_number) Esta función permite que el puntero a los resultados apunte a la línea especificada.
El número de líneas comienza en 0.
int mysql_db_query(string database, string query, int [identificador del link] Selecciona la base de datos database y ejecuta una consulta. Si no se especifica el link, utiliza el último abierto, si no existe, intenta optener uno llamando internamente a la función mysql_connect() sin argumentos.
int mysql_drop_db(string database_name, int [identificador del link]) Devuelve True o False según haya o no tenido éxito.
Nota: Cuidado, según la versión de MySql, borra toda la base de datos aún conteniendo tablas con datos.
int mysql_errno(int [identificador del link] Esta función devuelve el número del código de error que devuelve el servidor MySql.
string mysql_error(int [identificador del link] Devuelve la cadena asociada a un error que posee el identificador de conexión que se especifica.
array mysql_fetch_array(int result, int [result type]) Esta función es una versión extendida de mysql_fetch_row(). Lo que hace es almacenar el resultado en un array indexado, almacenando así los datos en un índice asociativo utilizando los nombres de los campos como claves.
Si existen más de una columna con el mismo nombre, tendrá precedencia la última columna. Para acceder a lal otras columnas con el mismo nombre, se debe indexar la columna o hacerun alias para ella.
Ejemplo:
select tabla1.precio as precio 1, tabla2.precio as precio2 from tabla1, tabla2
El segundo argumento, es una constante que puede tomar los siguientes valores.
- MYSQL_ASSOC
- MYSQL_NUM
- MYSQL_BOTH
object mysql_fetch_field(int result, int [field_offset]) Devuelve un objeto con la información que contiene result Puede utilizarse par obtener información de los campos de ciertas consultas. Si el campo del desplazamiento no está especificado, se selecciona el siguiente dato que no haya sido ya asignado mediante esta función.
Las propiedades del objeto son:
- name: Nombre del campo
- table: Nombre de la tabla a la que pertenece el campo.
- max_length: Longitud máxima.
- not_null: Será verdadero si el campo poosee esta propiedad.
- primary_key: Verdadero si el campo es la clave principal.
- unique_key: Verdadero si el campo es clave única.
- multiple_key: Verdadero si el campo no es clave única.
- numeric: Verdadero si se trata de un campo numérico.
- blob: Verdadero si la columna es a BLOB.
- type: Tipo de la columna.
- unsigned: Verdadero si se trata de un dato sin signo.
- zerofill: Verdadero si la columna tiene la propiedad zerofill.
array mysql_fetch_lengths(int result) Devuelve un array que contiene las longitudes de todos los campos que forman el último registro asignado con la función mysql_fetch_row(), mysql_fetch_array() o mysql_fetch_object().
object mysql_fetch_object(int result, int [result_type]) Devuelve un objeto con las propiedades del último registro extraido de un resultado.
Esta función es igual que mysql_fetch_array() con la diferencia de que se obtiene un objeto en vez de un array.
El segundo argumento, es una constante que puede tomar los siguientes valores.
- MYSQL_ASSOC
- MYSQL_NUM
- MYSQL_BOTH
array mysql_fetch_row(int result) Devuelve un array con un registro del resultado o false en el caso de que no existan registros.
Si se llama dos veces a esta función, él asignará el primer registro del resultado la primera vez y el segundo registro del resultado la segunda vez.
string mysql_field_name(int result, int field_index) Devuelve el nombre del campo que se especifica, mediante el orden que ocupe dentro del resultado.
int mysql_field_seek(int result, int field_offset) Busca el desplazamiento que se especifica en el segundo argumento, dentro del resultado.
string mysql_field_table(int result, int field_offset)
Obtiene el nombre de la tabla para el campo que se indica en el desplazamiento.
string mysql_field_type(int result, int field_offset) Se devuelve el tipo del campo que se indica mediante el desplazamiento.
Las cadenas que devuelve pueden ser:
- int
- real
- string
- blob
- Otros tipos detallados en la documentación de MySql.
string mysql_field_flags(int result, int field_offset) Devuelve una cadena con las propiedades del campo separadas por un espacio. Para partir esa cadena se puede utilizar la función explode()
Las palabras que puede devolver son:
- not_null
- primary_key
- unique_key
- multiple_key
- blob
- unsigned
- zerofill
- binary
- enum
- auto_increment
- timestamp
int mysql_field_len(int result, int field_offset) Devuelve la longitud del campo especificado.
int mysql_free_result(int result) Libera la memoria que utiliza el parámetro.
int mysql_insert_id(int [link_identifier] ) Devuelve el ID generado para un campo AUTO_INCREMENTED. Devolverá el id autogenerado devuelto por la última operación INSERT del enlace que se especifica como argumento.
Si el identificador no se especifica, se utiliza la última conexión abierta.
int mysql_list_fields(string database_name, string table_name, int [link_identifier] Devuelve información del nombre de la tabla que se proporciona. El puntero que devuelve, puede ser utilizado con las funciones mysql_field_flags(), mysql_field_len(), mysql_field_name() y mysql_field_type().
El resultado es un entero positivo, sólo devuelve -1 en caso de que exista algún error.
int mysql_list_dbs(int [link_identifier] ) Devuelve un puntero que contiene la lista de bases de datos disponibles en ese servidor MySql.
Con la información que devuelve, puede llamarse a la función mysql_tablaname().
int mysql_list_tables(string database, int [link_identifier] ) Extrae un putero a la lista de tablas que están en una base de datos.
Para extraer el nombre de las tablas se puede posteriormente utilizar mysql_db_query() o mysql_tablename().
int mysql_num_fields(int result); Devuelve el número de campos que contiene el parámetro resultado.
int mysql_num_rows(int result) Devuelve el número de líneas que contiene el parámetro resultado.
int mysql_pconnect(string [hostname [:port] [:/path/to/socket] ] , string [username] , string [password] ) Devuelve una conexión persistente a un servidor MySql.
Todos los argumentos son opcionales y sus valores son los mismos que para la función mysql_connect().
Esta función primero, intenta encontrar una conexión ya existente, si la encuentra, devuelve un identificador para ella, y en el caso de que no la encuentre, abre una nueva conexión permanente.
Despues de esto, mantiene la conexión hasta que finaliza la ejecución del script.
Hay que tener cuidado, porque mysql_close() no cierra conexiones abiertas con esta función.
int mysql_query(string query, int [identificador del link] ) Envía una consulta a una base de datos activa en el servidor asociado al link que se especifica. En el caso de que no se especifique ninguna conexión abierta, la función intenta reestablecer una conexión con la función mysql_connect().
La cadena de la consulta, debe terminar con ;.
La función devuelve TRUE o FALSE si la consulta tiene éxito. Si el valor devuelto es TRUE, significa que la consulta puede ser realizada, no que existan datos que respondan a esa consulta.
Para consultar cuantas líneas responden a esa consulta, se puede utilizar la función mysql_affecter_rows() y nos dirá cuantas líneas se han visto afectadas por la última operación INSERT, DELETE, REPLACE o UPDATE. En el caso de tratarse de una operación SELECT la función mysql_query() devuelve un identificador de resultado que se puede utilizar con la función mysql_result().
int mysql_result(int result, int row, mixed [field] ) Devuelve el contenido de una celda de la tabla dinámica que devuelve MySql como resultado de una operación previa.
El último argumento es opcional y puede contener el desplazamiento del campo que se desea obtener, el nombre del campo o algo como tabla.campo o el alias del campo que se desee consultar si se establecio previamente.
Cuando se trabaja con amplios conjuntos de resultados, es mejor utilizar alguna de las funciones que extraen un registro de esa consulta.
Hay que tener cuidado de no hacer llamadas a funciones que obtienen resultados de result junto con esta función, puesto que el puntero que va leyendo de los resultados, puede perderse.
int mysql_select_db(string database_name, int [identificador del link] ) Esta función asigna la base de datos activa en el servidor asociado al identificador del link.
string mysql_tablename(int result, int i) Esta función devuelve el nombre de una tabla de un puntero de resultados que ha devuelto previamente la función mysql_num_rows.