Developing my life

Programacion, PHPJanuary 21, 2006 3:25 am

En estos días estuve trabajando en el rediseño de NetMoviles, por contacto de mi amigo grapitix radicado en la madre patria, entre otras cosas quieren cambio de diseño, y de la web, agregar unas cosas entre ellas un chat para realizar consultas en línea.

No tenía tiempo para desarrollar uno en flash (asi lo querían :P ), así que me puse a la busca de uno en google. Encontré varios pero eran un poco pesados para mi gusto, hasta que dí con Develooping flash chat desarrollado en flash y php; incluso hay una demo para que lo prueben en línea, haber si les convence :D .

En la web del autor dice lo siguiente “Es gratuito, puedes usarlo libremente y modificarlo como desees (siempre que mantengas los créditos).”; creo que el autor quiso decir libre :P . Lo descargué y me dispuse a instalarlo, pero no funcionaba :S, asi que revisé el código, y ví que usaba variables globales por todos lados, es decir, para que funcione la opción en el php.ini, register_globals debería estar activada. Yo tengo dicha opción desactivada porque no me gusta usar variables globales nunca, y no solo en php, en mi opinión el uso de variables globales hace que el código se vuelva dificíl de mantener y entender, a parte que no es un buen hábito de programación, ni muy seguro que digamos :P , aunque algunos ven el uso de globales como desarrollo mas rápido, lo cual es diferente de productivo :D .

Para dar un ejemplo del uso de globales, Si llamamos a una página con http://www.miweb.com/mipagina.php?mivariable=5, esto provoca que en la página mipagina.php automáticamente genere la variable $mivariable con el valor 5. Pero por razones de seguridad este comportamiento automático se ha cambiado, estableciendo el valor por defecto de register_globals a off, a partir de la version 4.2.x de PHP.

Ahora para no trabajar con globales debemos buscar todas aquellas variables que son definidas automáticamente, variables del servidor, que provienen de get o post, cookies, files, variables de entorno o sesión. Reemplazar esas variables por las referencias adecuadas en cada caso, en PHP se han definido unos arrays diferentes con valores, dependiendo del lugar de procedencia. Así tenemos los arrays $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $REQUEST y $_SESSION.

Si por ejemplo tenemos el siguiente script:

echo "Usuario: " . $usuario; //session
echo "Tipo de navegador: " . $HTTP_USER_AGENT;
echo "Variable: ".$mivariable; //variable de get

Se reemplaza por:

echo "Su edad: " . $_SESSION['usuario']; //session
echo "Tipo de navegador: " . $_SERVER['HTTP_USER_AGENT'];
echo "Variable: " . $_GET['mivariable']; //variable de get

Hechos los cambios para que no use variables globales, me puse a instalarlo en el servidor de pruebas y funciona perfectamente :D .

Le envié el proyecto modificado al autor para que lo revise y lopublique en su web si lo desea :P .

Para los que lo quieren probar lo pueden descargar de aquí(siempre y cuando mi pc este encendidad :P )
O desde aquí

Ahí los vidrios. :D

Programacion, PHPDecember 28, 2005 6:16 pm

A raiz de un proyecto web para una empresa que cayo en mis manos, he estado aprendiendo en estos dias PHP, ya que no sabia nada de este lenguaje :P . Por lo que he visto, PHP es sumamente facil de aprender, bueno tal vez me sirvio de base mis conocimientos en C/C++/C# :D , pero para cualquier impetuoso habido de aprender PHP, no debe ser nada dificil de asimilar. Y ahora estoy aqui para compartir un poco de lo que aprendido :) .

Bueno al asunto, si se tiene un formulario en donde se le pide un usuario que suba una imagen, ya sea para copiarla en una carpeta del server o guardarla en un base de datos, es necesario validar dicho archivo antes de realizar cualquier accion con este.

Para el caso de archivos, PHP nos ofrece una serie de variables a las que podemos acceder con la información del archivo enviado. Puedes usar $_HTTP_POST_FILES o $_FILES, como gustes, yo prefiero el segundo :P .

  • $_FILES[’userfile’][’name’]. El nombre original del fichero en la máquina cliente.
  • $_FILES[’userfile’][’type’]. El tipo mime del fichero (si el navegador lo proporciona). Un ejemplo podría ser “image/gif”.
  • $_FILES[’userfile’][’size’]. El tamaño en bytes del fichero recibido.
  • $_FILES[’userfile’][’tmp_name’]. El nombre del fichero temporal que se utiliza para almacenar en el servidor el archivo recibido.

Primero que nada un archivo no puede tener 0 bytes y si le puede limitar a un tamaño para que el usuario no pueda subir un archivo muy grande y nos eche a perder el dia :P . Luego hay que verificar que el archivo sea una imagen. Vamos al codigo :

Si se quiere aceptar cualquier tipo de imagen.

<?php
$filesize = $_FILES['userfile']['size'];
$filetype = $_FILES['userfile']['type'];

if ( $filesize > 0 && $filesize <= 100000 && strpos($filetype,"image") != false ) {
//realizar acciones
}
else
echo "imagen no valida!.";
?>

En este codigo estamos limitando que la imagen no pese mas de 100kb, con strpos(filetype,”image”) validamos que el tipo de archivo sea una imagen ya que este filetype puede contener: image/gif, image/png, etc. Si vamos a utilizar las imagenes subidas, por ejemplo en una galeria de imagenes, no es muy recomendable que el usuario pueda subir cualquier tipo de imagen, ya que hay imagenes que no son aptas para web. Ahora vamos a restringir que solo pueda subir los de tipo jpeg, gif y png:

<?php
$filesize = $_FILES['userfile']['size'];
$filetype = $_FILES['userfile']['type'];
$type = substr($filetype, (strpos($filetype,"/"))+1);
$types=array("jpeg","gif","png");

if ( $filesize > 0 && $filesize <= 100000 && in_array($type, $types) ) {
// realizar acciones
}
else
echo "Imagen no valida!.";
?>

Como vemos tenemos un array donde especificamos los tipos de imagen que son aceptados, y luego con la funcion in_array buscamos si tipo ($type) de la imagen proporcionada por el usuario se encuentra en el array devolviendonos true si esta y false sino. Este codigo no solo nos sirve para imagenes sino para cualquier tipo de archivo que nosotros queremos validar.

Nota: PHP saca el tipo del archivo segun su MimeType, esto quiere decir que si a un archivo de texto con extension TXT lo cambio la extension a JPG, php no lo toma como imagen (image/jpeg) sino como texto (text/txt) . Recordarles que recien empiezo con PHP, asi que cualquier sugerencia será bienvenida :) .

Ahi los vidrios :D .