últimoartículo

¿Cómo evitar el link prefetching desde PHP?

01.06.2007

El Link prefetching (carga anticipada de documentos enlazados) es un mecanismo utilizado por algunos navegadores que utilizan el tiempo muerto para automática y silenciosamente descargar y guardar en caché documentos que podrían ser visitados por el usuario en un futuro cercano. De esta forma cuando el usuario visita una de las páginas precargadas estas pueden ser servidas rápidamente desde el caché del navegador.

Si bien esto es muy bueno para muchos usuarios disminuyéndoles el tiempo de respuesta de los navegadores también hay que tener en cuenta aspectos muy criticables como son:

  • Uso indebido del ancho de banda, sobre todo para aquellos que pagan según el tráfico y están descargando páginas que nunca visitarán.
  • Webmasters que pagan por tráfico entrante a sus páginas, pagarían por visitas que nunca se realizaron. Similar ocurre con los banners publicitarios.
  • Las estadísticas de los sitios se pueden ver afectadas.

Entre los navegadores que hacen link prefetching tenemos: Fasterfox (extensión de firefox), todos los navegadores basados en Mozilla, Google Web Acelerador así como Opera con Page Prefetcher instalado.

Para evitar el link prefetching debemos rechazar los pedidos que incluyan el header x-moz generando un error 404. Desde PHP debemos escribir estas líneas al inicio de cada página:


if (!empty($_SERVER['HTTP_X_moz']) && $_SERVER['HTTP_X_moz'] === 'prefetch') {
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Prefetch Forbidden');
trigger_error('Prefetch request forbidden.');
exit;
}

http://webaccelerator.google.com/webmasterhelp.html#prefetch11

http://fasterfox.mozdev.org/faq.html#Im_a_webmaster,_how_can_I_prevent_prefetching

artículosanteriores


WordPress: Problema RSS Resuelto

03.03.2007

Desde hace unos días el Feed RSS de jggweb no funciona. Me daba este mensaje de error:

Error de lectura XML: la instrucción de proceso XML no se encuentra al comienzo de una entidad externa
<?xml version=”1.0″ encoding=”ISO-8859-1″?>

Llevo varios días intentando resolver este problema.

He probado a:

- Desactivar los últimos plugins instalados.
- Desactivar todos los plugins.
- Quitar las líneas de código php de la barra lateral qué llamaban a los plugins.
- He pasado a borrador todos los posts hasta el día que dejó de generar los feed correctamente.
- Instalado de nuevo el wordpress. He instalado de nuevo WordPress (2.1.2).

Y con todas estas actuaciones no conseguí conseguí poner en funcionamiento este servicio.

Sergio de la Torre
me dio una pista: localizar espacios en blancos al principio o al final de los ficheros .php. Analicé el código fuente de todos los plugins que tengo instalados y… ¡bingo!

En el plugin de getrandomlinks.php que uso para mostrar los enlaces favoritos de forma aleatoria en la barra lateral, encontré trás el ?> un insignificante espacio en blanco que era el responsable de este problema.

Lo eliminé y de nuevo, los lectores RSS pueden acceder a jggweb.

GetRandomLinks: Muestra Algunos Enlaces Aleatoriamente

23.02.2007

Mostrar todos los enlaces que tenemos registrados en la base de datos del WordPress, es hacer interminable la barra lateral. Para resolver este problema, cada vez que se imprime (hit) una página de nuestra bitácora podemos mostrar una selección realizada aleatoriamente con este recurso que os presento.

GetRandomLinks es un plugin de WordPress que nos permite mostrar un número determinado de enlaces en nuestro blog.

Para poderlo usar debemos subir el fichero getrandomlinks.php a la carpeta wp-content/plugins, activamos el plugin en el Panel de Control del WordPress y añadimos la siguiente línea de código donde queramos mostrar los enlaces:

<?php get_random_links(5, 1, “<p>”, “</p>”, 1, “<br/>”); ?>

Con este ejemplo mostraríamos sólo 5 enlaces.

Más información en la web de Tom Armitage.

wp-ads, un plugin para publicidad en Wordpress

19.12.2006

WP-Ads es un sencillo plugin que nos permitirá gestionar la publicidad en Wordpress. Está disponible tanto en castellano como en inglés y nos permitirá añadir publicidad en cualquier parte del blog simplemente pegando un código.

Nos permite crear familias de banners según su tamaño, gestiona la rotación de banners aleatoriamente, dispone de un contador de clicks e impresiones y limitará que un banner no sea mostrado más de un número de veces.

Es un plugin bastante completo y nos permitirá gestionarlo desde el mismo panel de control de Wordpress. Podéis descargarlo de aquí

Chuletas, chuletas y más chuletas

19.12.2006

ChuletasEl Diccionario de la Real Academia de la Lengua Española define CHULETA (3ª acepción) como entre estudiantes, nota o papelito que se lleva oculto para consultarlo disimuladamente en los exámenes.

He visto muchos tipos de chuleta como estudiante y como docente… pero nunca olvidaré una en forma de bolígrafo.

Hace tiempo nuestro amigo eMe publicó varios artículos dedicado a este tema:

Ahora que no se encuentra entre nosotros este fantástico diseñador, tomo su testigo para continuar publicando una relación de chuletas que he descubierto en Smashing Magazine:

Actionscript

Ajax

Apache

ASCII Character Codes

ASP

C# and VB.NET

CSS

CVS

C++

Django

Firefox

Google

HTML/XHTML

Java

JavaScript

LaTeX

Microformats

Misc

MySQL

Oracle

Perl

Photoshop/Gimp

PHP

Python

Regular Expressions

Ruby

Unix/Linux

Weblog

Windows

XML

Pensé que sería buena idea bajarse todos los pdf’s y subirlos comprimidos para facilitar la descarga ¿No? ;)

Remote File Inclusion

01.10.2006

Vamos a explicar en que consiste este fallo de seguridad.

Esta vulnerabilidad permite incluir archivos remotos desde otros servidores en paginas que tengan algo asi como:

www.tusitio.com/index.php?seccion=pagina.php

Para buscar en google este tipo de fallos deberíamos poner algo así : allinurl: index.php?*=*

Pero como creo que google está filtrando este tipo de búsquedas otra opción sería buscar: allinurl: index.php?page=inicio.php o cualquier cosa que se nos ocurra.

Una vez localizada la página se puede probar la vulnerabilidad incluyendo por ejemplo una página externa. Sería asi:

http://www.tuweb.com/index.php?seccion=http://www.google.es

Si vemos que la página de google aparece dentro de la web, entonces quiere decir que estamos ante una web vulnerable a éste fallo. Sólo bastaría con sustituir google con un fichero conteniendo un script programado en php, perl… pero con una extensión .gif, .jpg o .txt para que no se ejecute en el servidor externo y que contenga codigos que podamos ejecutar en el servidor. Podéis obtener una idea en Ejecutar comandos shell mediante php.

Cómo evitar este fallo:
He observado que más de una web programan sus menús de ésta manera:

dentro del código php: include (”seccion”) o bien include (”seccion.php”) y ése fichero será el contenido o sección dentro de la estructura principal del sitio web.

Donde nosotros navegaremos por la web tal como: http://www.tusitio.com/index.php?seccion=fichero.php o bien http://www.tusitio.com/index.php?seccion=fichero

Bien, pues ésto es totalmente vulnerable a éste fallo, así que una recomendación sería usar cases y definir las opciones para que nadie pueda incluir ningún otro fichero que no sea el definido por nuestro menú de opciones.

Nota: Publicamos este artículo como recomendación de seguridad, por supuesto se puede escribir un código para entrar en una máquina y hackearla. Nosotros no pretendemos promover el uso del hacking así que no se contestará ninguna duda sobre ese tema.

Análisis de Tráfico Web

19.09.2006

Análisis de Tráfico WebPara poder hacer un seguimiento exahustivo de las visitas que reciben nuestros sitios web podemos utilizar varios script PHP. Hoy queremos recomendar dos:

  1. Power Phlogger - gratis -
  2. Web-Analiser -

Power Phlogger es el script que siempre ha utilizado BdW. Un script que lleva muchos años esperando el anunciado Phlogger3 aunque parece que nunca llegará a ser lanzado por decisión del autor.

Por otro lado tenemos el Web-Analiser. Varios scripts que recogen y analizan las estadísticas del tráfico de tu sitio web. Facilitan una amplia gama de posibilidades estadísticas e informes para analizar el comportamiento de tus visitantes, el tráfico y las páginas visitadas. Usándolo puedes tener el control total de cada evento que suceda en tu sitio web.

Están disponibles las siguientes versiones:

  • Web-Analiser PRO (multi-dominios) $58.95
  • Web-Analiser PRO & Web-Mylinks $73.95 (Descuento $15)
  • Web-Analiser PRO+ (multi-usuarios & multi-dominios) $139.00
  • Web-Analiser $24.95
  • Web-Analiser Lite gratis

¿Conoces otros scripts para analizar el tráfico web? Si es así, no dudes en sugerirlo.

Ejecutar comandos shell mediante php

10.09.2006

Más de una vez hemos deseado ejecutar algún comando de la shell en unix en nuestra cuenta de hospedaje, pero desafortunadamente nuestro proveedor no nos ha habiblitado ningún acceso ssh. Es posible ejecutar comandos shell con el siguiente código:

Creamos un fichero llamado exec.php con el siguiente contenido:

<?php
exec($_GET[’cmd’],$salida);
foreach($salida as $line) { echo "$line<br>"; }
?>

Para ejecutar cualquier comando lo haremos de la siguiente forma:

http://tudominio/exec.php?cmd=ls

y obtendremos la lista de ficheros en el directorio actual.
Una buena aplicación puede ser hacer una copia de seguridad de nuestra web en un .tar.gz y descargarla vía web.

http://tudominio/exec.php?cmd=tar -cvzpf copia.tar.gz *

Con esto obtendremos un fichero comprimido llamado copia.tar.gz, conteniendo toda la copia de seguridad de nuestra web el cual podremos descargar sencillamente.

El resto es simplemente ejecutar comandos, rutas y demás ;)

Ahora bien, tened cuidado donde lo subís por supuesto que esté protegido con contraseña para limitar el acceso sólo a nosotros mismos.

Mandar un Formulario con un Enlace

27.01.2006

No sé si el título de este artículo deja completamente claro su contenido. Deseo exponer una técnica con la que podemos enviar un formulario cumplimentado sin utilizar un botón Submit, sólo con hacer clic sobre un enlace.

Para ello debemos declarar el formulario:

<form name=”form1″ action=”enviar.php” method=”post”>

Hemos asociado el script enviar.php que se encargará de tratar los datos enviados.

En lugar de insertar un botón submit en el formulario añadimos el siguiente código:

<input type=”hidden” name=”form1″ />
<a href=”javascript:document.form1.submit()” alt=”Enviar Datos”>Enviar</a>

PHP Designer 2006 Beta

26.01.2006

Desde hace pocos días podemos descargarnos este magnífico editor de código gratuito, con el que podremos programar en PHP, HTML, CSS, XML, JavaScript, Java, Perl, JavaScript, VB, C#, Java & SQL.

De PHP Designer 2006 Beta me gustaría destacar su pequeño tamaño y su alta velocidad de ejecución, así como funcionalidades como ayuda de autocompletado de palabras reservadas, las sangrías automáticas, plantillas, FTP…

Recomendado.

Calendarios PHP

25.01.2006

Calendarios PHPMuchas veces tenemos que incluir en nuestras webs una funcionalidad que nos permita gestionar eventos en un calendario.

He pensado que sería interesante disponer de una lista con los mejores scripts gratuitos:

WebCalendar PHPEventCalendar
Active Calendar MicroCal
JCal PHP Event Calendar
CaLogic Online Calendar
rc_Calendar.class Proverbs Web Calendar
Web Event Calendar PHPWebCalendar

Si conoces alguno digno de estar en la lista dímelo y lo añadiré.

Editores de código/texto en Mac

20.01.2006

Andaba con bastantes ganas de olvidarme de Dreamweaver desde hace un tiempo. No utilizo la vista de diseño nunca, puesto que rara vez lo que muestra Dreamweaver se corresponde con lo que se pueda luego ver en alguno de los distintos navegadores, y además el tiempo de carga de la aplicación es enorme, así que ayer estuve un buen rato mirando editores de código para OS X buscando mi futura nueva herramienta de trabajo. Descartando los WYSIWYG como Nvu mis experiencias fueron las siguientes.

SKEdit es un fantástico editor de código con muchas opciones algunas tan buenas como el autocompletado, o coloreado de sintaxis, éste último con soporte para bastantes lenguajes y bastante inteligente. Tiene muchas opciones de configuración, se integra fantásticamente bien en el entorno OS X y carga muy rápido. Llevaba tiempo oyendo hablar muy bien de él y la verdad es que me ha dejado muy buen sabor de boca, todas las alabanzas que he leido se confirman al probarlo, sin embargo, no usa pestañas para cuando estas editando varios documentos (corregidme si me equivoco), y ésto se me antoja imprescindible para cuando estas con un par de html’s y la hoja de estilos liado. Además es de pago, aunque muy barato, 20$ solamente. No obstante, bajad la versión de prueba porque puede que dejeis de buscar. Yo miré un poquito más.

TextWrangler es una versión reducida y gratuíta de su hermano mayor BBEdit cuyo precio, 199$ se me antojó una losa que no tenia ganas de levantar (ni de bordear buscando un crack). De su hermano mayor, TextWrangler conserva muchas propiedades que lo convierten en una muy buena opción: Cajón lateral para ordenar los documentos que tengas abiertos, coloreado de sintaxis, soporte para muchos lenguajes, numeración de líneas, etc. No tiene la opción de autocompletado, que a mi particularmente me viene muy bien, pero por lo demás es fantástico.

Smultron es otro editor que posee unas características similares a los anteriores: cajón para los documentos abiertos, coloreado de sintaxis (aunque el coloreado tuve que cambiarlo porque no me gustaba mucho, demasiado llamativo), numeración de línea, etc. y además se asocia a la perfección con CyberDuck mi cliente FTP favorito para Mac, funcionalidad esta última que me ha hecho decantarme temporalmente por éste editor.

En cualquier manera cualquiera de las tres opciones son magníficas, y aún hay varios más que seguramente tendrán un altísima calidad, es cuestión de comparar. Si alguien conoce alguno con opción de autocompletar que lo comente. Quizás entre todos podemos ir completando éste post.

Por cierto, Smultron lo encontré buceando entre los posts de un blogger malagueño llamado Yomizmo, cada vez somos más los que posteamos desde el sur, dentro de poco habrá que organizar un blogs and beers o un blogs and málaga virgen en el pimpi ¿no?

Bitácoras WP via PDA

16.11.2005

Nuestro amigo WiZaRd me ha sugerido que ofrezca una versión reducida de jggweb para las PDA y los celulares de última generación… bueno, pues ya está disponible.

En ALT1040 encontré un interesante artículo titulado ALT1040 edición móvil en el que daba a conocer un plugin creado por Alex King, que genera la versión reducida de tu bitácora WordPress lista para ser visitada desde una PDA.

ALT1040 realizó la traducción al español de este plugin.

Ahora he aplicado unas minúsculas modificaciones (el charset=utf-8 lo he sustituido por el charset=ISO-8859-1) sobre la versión española y podéis descargarlo e instalarlo en vuestro servidor http.

¿Cómo se verá jggweb en PDA?

Sistemas de Tickets Gratis

19.07.2005

Antes de emprender el desarrollo de una aplicación informática debemos dedicar un poco de tiempo a investigar si existe algo parecido. Si existe, no lo copiaremos, sino que lo estudiaremos para encontrar los puntos fuertes y débiles del sistema. Con ello, podremos aspirar a un diseño de una aplicación mejor que la que ya existía. Así comenzaron los japoneses su boom tecnológico…

Un sistema de tickets es un método muy extendido que facilita la comunicación entre las empresas online y sus clientes. Cuando el cliente quiere hacer hacer llegar una consulta, sugerencia o avisar de alguna incidencia a la empresa, el sistema de tickets le permite crear una línea privada de comunicación vía web. Una vez que la empresa ha leido y respondido su petición o sugerencia se le comunica vía email o móvil, sin tener que esperar al otro lado de un teléfono con las típicas musiquitas de espera (¿Son odiosas verdad?).

OsTicket es un un sistema en PHP con licencia Open Source, que implementa el famoso sistema que se ha puesto de moda en la mayoría de los servicios al cliente de las empresas online.

PHP support tickets es un script PHP con licencia GNU que permite la creación y gestión de un estupendo sistema de tickets.

¿Conoces otro script? Añade un comentario y lo agregaremos a la lista.

Generador de Contraseñas PHP

12.07.2005

En muchas de nuestras webs nos resulta útil disponer de un script que genere de forma aleatoria contraseñas.
Una solución fácil para generar passwords con PHP es la siguiente:

<?php

// *********************************************************************
// ** Fichero: generapassword.php
// ** Descripción: Generador de Contraseñas de una longitud dada.
// ** Argumentos de entrada: $longitud es el número de caracteres
// ** de la contraseña generada.
// ** Autor: Juan García
// ** Fecha: Julio 2005
// *********************************************************************
function GeneraPassword($longitud)
{
/* Se valida la longitud proporcionada. Debe ser número y mayor de cero.
Si es menor o igual a cero le asignamos la longitud por defecto.
Si es mayor de 32 le asignamos 32.
*/
if(!is_numeric($longitud) || $longitud < = 0)
{
$longitud = 8;
}
if($longitud > 32)
{
$longitud = 32;
}

/* Asignamos el juego de caracteres al array $caracteres para generar la contraseña.
Podemos añadir más caracteres para hacer más segura la contraseña.
*/
$caracteres = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-/*%&_’;

/* Introduce la semilla del generador de números aleatorios mejorado */
mt_srand(microtime() * 1000000);

for($i = 0; $i < $longitud; $i++)
{
/* Genera un valor aleatorio mejorado con mt_rand, entre 0 y el tamaño del array
$caracteres menos 1. Posteríormente vamos concatenando en la cadena $password
los caracteres que se van eligiendo aleatoriamente.
*/
$key = mt_rand(0,strlen($caracteres)-1);
$password = $password . $caracteres{$key};
}

return $password;
}
/* Llamamos a la función GeneraPassword y mostramos la clave generada.*/
echo GeneraPassword(10);
?>

Puedes ejecutar el script y probar la generación de sucesivas contraseñas actualizando la página (F5).

Ranking Posts Más Comentados

29.06.2005

Para mostrar en la página principal de una bitácora gestionada con WordPress el top-ten de los posts más comentados puedes crear un fichero llamado top-comentarios.php con el siguiente código:

<?php
//*****************************************************************
// Nombre Fichero: top-comentarios.php
// Descripción: Muestra los 10 enlaces de los posts más comentados de
// un blog gestionado con WordPress.
// Autor: Juan García Gálvez
// URL: http://www.bitacoradewebmaster.com
// Junio-2005
//*****************************************************************

// hacemos una conexion a la bd
$link = mysql_connect(”nombre server”, “usuario”,”contraseña”);

// seleccionamos la Bd
mysql_select_db (”Nombre_Base_Datos_WP”, $link);

$result = mysql_query(”SELECT wp_posts.ID, post_title, count( `comment_ID` ) AS frecuencia, user_nickname
FROM `wp_comments` , wp_posts, wp_users
WHERE comment_post_ID = wp_posts.ID
AND `post_author` = wp_users.ID
GROUP BY wp_posts.ID
ORDER BY frecuencia DESC
LIMIT 10″);

// La función mysql_fetch_arrayExtrae la fila de resultado como una
// matriz asociativa o falso si no quedan más filas.
if ($row = mysql_fetch_array($result))
{
do {
echo “<li>”.” n”;
// Limita la longitud de los títulos a 12 caracteres. Si es mayor se trunca el título y se añaden puntos suspensivos.
if(strlen($row[”post_title”])<12)
{
echo “<a href=’http://www.bitacoradewebmaster.com/index.php?p=”.$row[”ID”].”‘ title=’”.htmlentities($row[”post_title”]).” - “.$row[”user_nickname”].” -’>”.substr($row[”post_title”],0,12).”…”.” (”.$row[”frecuencia”].”)n”;
}
else
{
echo “<a href=’http://www.bitacoradewebmaster.com/index.php?p=”.$row[”ID”].”‘ title=’”.htmlentities($row[”post_title”]).” - “.$row[”user_nickname”].” -’>”.$row[”post_title”].” (”.$row[”frecuencia”].”)n”;
}
echo “</li></a> n”;
}
while ($row = mysql_fetch_array($result));
}
else
{
echo “¡ La base de datos está vacia !”;
}
mysql_close($link);
?>

En el index.php debemos añadir el siguiente código en el interior del bloque menú:


<li>Los + Comentados</li>
<ul>
<?php include(”top-comentarios.php”); ?>
</ul>

Marcas de agua en tu web

29.06.2005

Las librerías GD son una herramienta primordial para nuestras galerías fotográficas. Con ellas podemos modificar imágenes, reducirlas y en éste caso también podemos incrustarle marcas de agua para evitar que sean usadas por terceras personas sin nuestro permiso.

Os dejo un script de ejemplo en lenguaje PHP que se encargará de tomar todas las imágenes de una carpeta y nos las copie en otra nueva con nuestra marca de agua en cada imagen.

Nuestra tarea consistirá primeramente en crear la imagen que usaremos para nuestras marcas de agua. Debe ser en formato PNG de 24 bits, os recomiendo ponerle fondo transparente y algo de transparencia en la capa que utilicemos, para que se incruste de manera más profesional. Podéis usar tanto Adobe Photoshop o Gimp (para los que prefieran usar software libre).

Una vez que tenemos nuestra imagen (que no debe ser demasiado grande ni demasiado pequeña puesto que debe ser legible pero tampoco queremos que estorbe) la copiamos en la misma carpeta que las imágenes originales.

Ahora echamos un vistazo al siguiente código y personalizamos las rutas y demás variables a nuestro gusto.

Warning: set_time_limit() [function.set-time-limit]: Cannot set time limit in safe mode in /var/www/vhosts/bitacoradewebmaster.com/httpdocs/wp-content/plugins/exec-php.php(45) : eval()’d code on line 22

Warning: opendir() [function.opendir]: open_basedir restriction in effect. File(/home/httpd/vhosts/midominio.com/httpdocs/imagenes) is not within the allowed path(s): (/var/www/vhosts/bitacoradewebmaster.com/httpdocs:/tmp) in /var/www/vhosts/bitacoradewebmaster.com/httpdocs/wp-content/plugins/exec-php.php(45) : eval()’d code on line 62

Warning: opendir(/home/httpd/vhosts/midominio.com/httpdocs/imagenes) [function.opendir]: failed to open dir: Operation not permitted in /var/www/vhosts/bitacoradewebmaster.com/httpdocs/wp-content/plugins/exec-php.php(45) : eval()’d code on line 62

Warning: readdir(): supplied argument is not a valid Directory resource in /var/www/vhosts/bitacoradewebmaster.com/httpdocs/wp-content/plugins/exec-php.php(45) : eval()’d code on line 64

Warning: closedir(): supplied argument is not a valid Directory resource in /var/www/vhosts/bitacoradewebmaster.com/httpdocs/wp-content/plugins/exec-php.php(45) : eval()’d code on line 71

Si seguimos estos pasos tendremos un resultado parecido a éste fantástico script llamado Oscommerce que aún estoy configurando en PuntoGeriátrico.com. En ella todas las fotos tienen una misma marca de agua, la cual tardé escasos minutos en aplicársela, después de un cambio de planes en el cual a última hora me pidieron que pusiese marcas de agua a todas las imagenes :| un duro trabajo si lo hubiesemos hecho todo a mano no?.

Fuente original: Guebs.com
Autor: Aitor Ortuondo.

Conversor de imágenes a html

14.06.2005

Navegando por la red descubrí hace un tiempo una interesante herramienta. Se trata de un conversor de imágenes a html (desarrollado en php). La aplicación mapea con absoluta fidelidad la imagen que le pasemos como parámetro a código html en el que recrea con texto los píxeles de la imagen.

La idea original del autor era la de generar pósters e imágenes grandes para su impresión en modo local o como mucho en red local, por lo que tras consultarle, ha modificado un poco la aplicación para limitar el tamaño inicial de las imágenes, para reducir el tiempo de carga. Desde aquí agradecerle el interés y la colaboración.

Un abrazo, Lucas! Me despido con una generación del logo de BdW.

Portable AMP: AMP en USB

12.06.2005

Cada día es más productivo pasarse por IndieBlog, no me arrepiento nada de haberlo recomendado porque es casi a diario que encuentro algo nuevo interesantísimo.

En ésta ocasión ha sido un tip sobre portable Amp lo que ha llamado mi atención. Portable Amp es un paquete de aplicaciones (Apache+MySQL+Php) listo para instalar en tu pendrive, que nos permitirá ejecutar scripts o presentar aplicaciones basadas en PHP en ordenadores que no lo tengan instalado.

Solamente necesitamos un pendrive de al menos 32Mb, un editor de textos, y alguna versión de MySQL, PHP y Apache. Seguimos las instrucciones de instalación detalladas y listo para utilizar.

Más utilidades para el PenDrive de Gacuj.

Mostrar los datos EXIF

09.06.2005

Cuando se obtiene una instantánea con una cámara digital el fichero que contiene la imagen almacena también un conjunto de datos como la fecha y hora de captura, modelo de la cámara, abertura de diafragma, velocidad de obturación, ISO… A este conjunto de datos se le conoce con el nombre de EXIF

EXIF (Exchangeable Image File) es el formato de archivo utilizado por la mayoría de las cámaras digitales para insertar datos técnicos sobre la captura en la imágen.

Para poder leer los datos EXIF de nuestras fotografías, podemos utilizar las Propiedades/Opciones Avanzadas de Windows XP, el programa Adobe PhotoShop, el programa Exif Reader (freeware) entre otros.

Si lo que deseamos es mostrar esos datos en nuestra web o photoblog podemos utilizar la función de PHP exif_read_data() que devuelve los datos EXIF de una imagen JPEG o TIFF.

Para jggweb he creado esta pequeña función que nos devuelve el modelo de la cámara, la velocidad de obturación, la abertura de diafragma y la longitud focal:

<?php
function Datos_EXIF($imagen)
{
//*****************************************************************
// Función Datos_EXIF
// Objetivo de la función:
// Devuelve el modelo de la cámara, velocidad de obturación,
// abertura de diafragma y longitud focal de una imagen.
// Argumento de entrada:
// $imagen: Una cadena que contendrá el nombre de la imagen.
//
// Autor: jgarcía
// Web: www.bitacoradewebmaster.com
// Fecha: junio 2005
//*****************************************************************

// Asignamos todos los datos EXIF a un array llamado $exif
$exif = exif_read_data($imagen, ‘EXIF’);

// Si la imagen no tiene datos EXIF abortamos la ejecución
if ($exif===false)
{
echo “<h5>Sin datos EXIF</h5><br />n”;
exit();
}

$exif = exif_read_data($imagen, 0, true);

//Comenzamos a presentar datos EXIF
echo “<strong>Cámara: “.$exif[”IFD0″][”Model”].”<br />n”;

list($numeradorV, $denominadorV) = split( ‘[/]’, $exif[”EXIF”][”ExposureTime”]);
if ($numeradorV< $denominadorV)
{
$denominadorV=$denominadorV/10;
echo "Velocidad de obturación: 1/".$denominadorV."sg.<br />n";
}
else
{
$velocidad=$numeradorV/$denominadorV;
echo "Velocidad de obturación: ".$velocidad."sg<br />n";
}

list($numeradorA, $denominadorA) = split( '[/]', $exif["EXIF"]["FNumber"]);
$numeradorA=$numeradorA/10;
echo "Abertura de diafragma: f".$numeradorA."<br />n";

list($numeradorL, $denominadorL) = split( '[/]', $exif["EXIF"]["FocalLength"]);
$numeradorL=$numeradorL/10;
echo "Longitud focal: ".$numeradorL."mm</strong><br />n";
}
?>

Para hacer uso de la función debemos escribir el siguiente código:

<?php
//En el fichero funciones.php debemos tener la función Datos_EXIF()
require_once(”funciones.php”);
Datos_EXIF(”imagen.jpg”);
?>

Importante: No olvides leer este artículo.

Si deseas añadir más datos EXIF sólo tienes que hacer referencia al elemento del array asociativo que te interese. La lista de datos EXIF la tienes en la siguiente página.