Comprobar que existe una imágen en PHP.

Octubre 29th, 2008 por alwaison

Para dar consistencía a nuestras páginas web, durante la programación debemos tener en cuenta muchos detalles que pueden fallar en un momento determinado.

Uno de ellos surge a la hora de trabajar con imágenes subidas por los usuarios. Cuando necesitamos mostrarlas, debemos asegurarnos antes de que realmente la imágen existe y que no ha habido ningún error durante la subida.

La primera idea que se nos viene a la cabeza es usar la función file_exists:

  1. bool file_exists  ( string $nombre_archivo  )

Según su descripción, file_exists verifica si un archivo o directorio existe, devolviendo true o false. El gran problema de la función file_exists es que no funciona correctamente cuando le pasamos como parámetro una url donde teóricamente debe estar la imágen.

  1. /** ESTE SCRIPT NO FUNCIONA CORRECTAMENTE **/
  2. if (file_exists("http://www.misitio.com/miimagen.jpg")) {
  3.     echo ‘Existe la imagen’;
  4. } else {
  5.     echo ‘NO existe la imagen’;
  6. }

En este ejemplo, siempre obtendremos NO existe la imagen, ya que como hemos comentado, la función file_exists no funciona correctamente para con direcciones remotas.

Por lo tanto, debemos utilizar otra forma para comprobar si realmente existe una imagen. Existen varias formas, algunas de ellas usando la función fopen(), sin embargo para mi es mucho más intuitivo y supondrá una menor carga para el servidor utilizar la función GetImageSize().

  1. array getimagesize ( string $nombre_archivo [, array &$info_imagen ] )

La función getImageSize() determinará el tamaño de cualquier archivo de imagen dado y devuelve las dimensiones junto con el tipo de archivo y una cadena de texto de altura/ancho a ser usada en una etiqueta HTML IMG corriente y el tipo de contenido HTTP correspondiente.

Utilizando getImageSize(), el script quedaría muy parecido a esto:

  1. if($img = @getImageSize("http://www.misitio.com/miimagen.jpg")) {
  2.     echo ‘Existe la imagen’;
  3. } else {
  4.     echo ‘NO existe la imagen’;
  5. }

De esta forma, si la imagen existe, PHP devolverá correctamente Existe la imagen, funcionando tal y como se espera.

Para mantener simple el código (KISS), no dudeis en crear una función (existe_imagen($url), por ejemplo) en la cual se comprobará si existe la imágen o no utilizando getImageSize(), y devolverá true o false dependiendo del resultado.

Pero eso, ya os lo dejo a vueltra elección.

El código utilizando la función getImageSize extraido de: tutores.org

Gravatar en Wordpress.

Octubre 14th, 2008 por alwaison

Haciendo unas modificaciones en el theme, decidimos añadir la imagen Gravatar a los comentarios del blog.

Gravatar (globally recognized avatar) es un avatar que va asociado a vuestra cuenta de email. Así, cada vez que posteas en un blog usando esa cuenta, aparece tu avatar sin tener que registrarte en ese blog en concreto.

Para añadir gravatar a tu blog, si el theme que usas no lo trae por defecto, tan solo tienes que seguir estos pasos:

1. Descargar el plugin de gravatar. Puedes conseguirlo desde aqui.

2. Sube el plugin a la carpeta wp-content/plugins.

3. Editamos el archivo comments.php de nuestro theme. Lo podemos hacer directamente desde el panel de control, en Diseño > Editor de Temas.

4. Buscamos la lista de los comentarios (<ol class=”commentlist”>)

5. Justo encima del elemento cite, insertamos la llamada al plugin:

  1. <img class="gravatar" src="<?php gravatar("R", 40, "http://www.tudominio.com/gravatar-not-found.png", "7e7e7e"); ?>" alt="<?php comment_author_link() ?>" />

Insertamos una imagen, cuya ruta nos la proporcionará la funcion gravatar, la cual recibe 4 parámetros (ninguno de ellos es obligatorio):

gravatar({rating{, size{, default{, border}}}})

rating: Determina la calificación de las imágenes, incluyendo la del parámetro. Soporta los valores [ G | PG | R | X ]. En el ejemplo, tan solo aceptaremos los avatares clasificados como R, PG y G.
size: Tamaño en pixeles de la imagen. En nuestro caso, será de 40×40.
default: Imagen por defecto que se muestra si no hay avatar asociado a esa cuenta de correo.
border: color en hexadecimal (sin el #), para el borde de la imagen.

Ahora tan solo tenéis que guardar los cambios en el archivo comments.php para comprobar que la función se realiza correctamente, y que la maquetación no se rompe por ningún lado. En caso de que necesitéis arreglar algo, recordad que la imagen del gravatar tiene asociada la clase gravatar.

Podéis encontrar más información sobre este plugin en su web: Wordpress Gravatar Plugin

Fechas en español con PHP y la función strftime()

Octubre 1st, 2008 por alwaison

Hace un tiemp os explicábamos como obtener el año actual en PHP. Hoy vamos a ver como podemos obtener una fecha en castellano con PHP, al estilo de:

viernes, 19 de septiembre de 2008

Como explica la documentación de PHP, la función strftime()

Devuelve una cadena con formato de acuerdo a la cadena de formato dada usando la marca_de_tiempo dada o la hora local si no se entrega una marca de tiempo. Los nombres de mes y día de la semana y otras cadenas dependientes del idioma respetan la localidad actual definida con setlocale().

¿Y que quiere decir todo esto? Vamos a ver un ejemplo.

  1. string strftime ( string $formato [, int $marca_de_tiempo ] )

La función strftime() recibe dos parametros.
El parámetro $formato es una cadena de texto donde estableceremos el formato en el que la función nos devolverá la fecha.
$marca_de_tiempo es un integer con la fecha en formato UNIX.

Para nuestro ejemplo, necesitamos obtener el nombre completo día, el número del día, nombre completo del mes y el año usando 4 cifras, y todo esto, por supuesto, en perfecto castellano.

Así, el parámetros $formato sería así:

  1. $formato = "%A, %d de %B de %Y";
  2. // %A devuelve el nombre del día completo
  3. // %d devuelve el número del día
  4. // %B devuelve el nombre completo del mes
  5. // %Y devuelve el numero de año con cuatro cifras

Para obtener la fecha deseada, podremos usar varias funciones:
strtotime() si obtenemos la fecha de una base de datos
time() para obtener la fecha actual
O cualquier otra función que devuelva una fecha en formato UNIX.

 
Así, la llamada completa a la función strftime() quedaría así:

  1. $formato = "%A, %d de %B de %Y";
  2. strftime($formato, strtotime("09/19/2008"));

Bien, hasta aqui facil, ¿verdad? Pero, ¿cómo definimos en qué idioma queremos que devuelva la fecha?
Para ello usaremos la función setlocale(), que se encarga de fijar la localización de la página web, es decir, establece el idioma.

Para establecer como idioma el español de España, la función setlocale() debe ser esta:

  1. setlocale (LC_TIME,"spanish", "es_ES@euro", "es_ES", "es");

Una vez hemos establecido que el idioma de la página es el castellano, la función strftime() devolverá la fecha en el idioma esperado.

Como veis, es muy fácil obtener fechas en castellano con PHP, ahorrándonos los típicos arrays con los nombres de los meses.

Dejo el código completo, para que sea más fácil el copy&paste

  1. // establecemos el idioma de la página
  2. setlocale (LC_TIME,"spanish", "es_ES@euro", "es_ES", "es");
  3.  
  4. //creamos la cadena con los especificadores necesarios
  5. $formato = "%A, %d de %B de %Y";
  6.  
  7. //Mostramos la fecha, ahora sí en el idioma deseado.
  8. echo strftime($formato, strtotime("09/19/2008"));

Si te ha sido útil este código, alégranos el día y deja un comentario :)

Obtener el año actual en PHP

Julio 21st, 2008 por alwaison

Una característica muy común en los pies de página de las webs, es la aparición del copyright, donde solemos ver algo así:

© 2008 Weblimite.com

Bien, para no tener que estár actualizando el pie de página de todas nuestras webs, sería interesante que el año se mostrara con PHP, para que estuviera actualizado en cualquier momento.

Y, ¿como mostrar el año actual el PHP?

Fácil, muy facil. Tan solo debemos usar la función date. La función DATE recibe una cadena, donde se le especifica con que formato nos debe devolver la fecha que recibe como segundo parámetro, o bien la fecha actual en caso de que no reciba un según parámetro.

Es más fácil verlo:

  1. string date  ( string $formato  [, int $marca_de_tiempo  ] )

Las opciones de esta función son bastante amplias, pero para el caso que nos ocupa, utilizaremos tan solo la cadena “Y”.

  1. echo date("Y");

Insertando este código en nuestro pie de página, obtendremos el año actual, en formato número de 4 dígitos: 2008.

El código completo, sería este:

  1.  
  2.  echo ‘&copy; ‘ . date("Y") . ‘ Weblimite.com’;
  3.  

Login por cookies mediante PHP y MySQL

Junio 28th, 2008 por alwaison

En un proyecto personal,estoy implementando un panel de control, con el acceso restringido mediante un login. Para que no sea necesario introducir cada vez que entremos a la página nuestros datos otra vez, he añadido un sistema de cookies, que se encargarán de validar directamente al usuario durante una hora.

El sistema es realmente sencillo. Necesitamos, para empezar, una base de datos donde almacenemos los usuarios y contraseñas. Podría ser algo así:

  1. CREATE TABLE usuarios (
  2. id tinyint(3) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. nombre varchar(64) collate utf8_spanish2_ci NOT NULL,
  4. mail varchar(128) collate utf8_spanish2_ci NOT NULL,
  5. pass varchar(40) collate utf8_spanish2_ci NOT NULL COMMENT ‘en sha1′,
  6. grupo enum(‘editor’,‘admin’,‘god’) collate utf8_spanish2_ci NOT NULL,
  7. PRIMARY KEY  (id)
  8. )

Lo único destacable es el sql, es que la contraseña la almacenaremos codificada mediante la función SHA1, que crea una cadena de 40 caracteres.

Lo más lógico en estos casos es tener el directorio donde queremos restringir el acceso (en nuestro caso cpanel)  y dentro de él, un archivo index.php que mostrará la información que deseamos, y un login.php que servirá para que los usuarios puedan hacer login y tener acceso (lógico, ¿no?).

El usuario, cuando quiera entrar al área privada, entrará por la ruta www.midominio.com/cpanel/

El navegador, directamente, lo redirige al archivo index.php (o index.html, depende de como tengamos configurado el servidor, y si existe o no el archivo).

Veamos que código necesitamos en este index.php:

Read More »

-->