Archive for the ‘Programacion PHP’ Categoria

Cambiar rutas relativas por rutas absolutas con PHP

Miércoles, Junio 6th, 2007

Hace poco he estado desarrollando una utilidad para la edición de una newsletter HTML y me he encontrado con un problema interesante. Una vez que tenemos editado el formato, insertadas las imágenes, los links, etc. podemos proceder al envío de la newsletter. Pero el problema es que esas imágenes y algunos links tienen rutas relativas, por lo tanto, el programa de correo que reciba el html, no podrá encontrar esos elementos.

Gracias a PHP y la potencia de las expresiones regulares, aquí está la solución:


$str=preg_replace('#(href|src)="([^:"]*)(”|(?:(?:%20|\s|\+)[^"]*”))#’,
‘$1=”http://www.ingeniuz.com/$2$3′,$str);

La función preg_replace, se encarga de realizar reemplazos en una cadena, siguiendo las instrucciones que se le dan en la expresión regular que toma como argumento.
De esta forma, todas las url contenidas dentro de los atributos src y href son cambiadas (si es necesario) por su forma absoluta.

Via: wintermute

Liberado el Zend Framework 1.0.0 RC1

Martes, Mayo 29th, 2007

Zend Framework¡Ya queda menos para la 1.0! Para todos lo que usamos a diario este framework estamos de enhorabuena, porque sin duda con cada release gana en calidad, estabilidad y rendimiento (se han corregido más de 90 problemas desde la 0.9.3).

Estas son algunas de las novedades en esta entrega:

  • Zend_Controller tiene una nueva funcionalidad llamada ViewRenderer, que facilita el diseño de las acciones en los controllers. Para entenderlo mejor, leeros este artículo.
  • Zend_Gdata cambia su formato por uno más orientado a objetos.
  • Zend_Db gana en consistencia en su interfaz.
  • Zend_Filter_Input aparece como una nueva clase (aunque con un nombre antiguo). Se usará para declarar reglas para filtrar y validar grupos de datos. Será como una caja negra de la cual sólo saldrán los datos que pasen los filtros establecidos.
  • Zend_Service_StrikeIron es un nuevo cliente de web service que entra en la incubadora.

¡Corre! ¡Descárgalo!

Manejando el error 404 con el Zend Framework

Lunes, Marzo 26th, 2007

Zend FrameworkTras adoptar la plataforma de desarrollo de Zend al programar tus aplicaciones, una de las primeras dudas que surgen es cómo manejar el caso de las páginas no encontradas con esta filosofía. En principio el Framework deja total libertad al programador y únicamente muestra un error o excepción “Invalid controller specified” . Tras la adición del sistema de plugins, esta se convierte en una de las formas más fáciles de controlar este tipo de errores. Por ejemplo:

class Mi_Controller_Plugin_NoRoute
   extends Zend_Controller_Plugin_Abstract
{
   function preDispatch(Zend_Controller_Request_Abstract $request)
   {
       $frontController = Zend_Controller_Front::getInstance();
       $dispatcher = $frontController->getDispatcher();

       if (!$dispatcher->isDispatchable($request))
       {
           $request->setControllerName('index');
           $request->setActionName('noroute');
       }
   }
}

De esta forma (propuesta por Rob Allen), lo que hacemos es redirigir todos los errores 404 al controlador “Index” y a la acción “noroute”. Así podemos manejarlos en un único lugar para toda la aplicación.

Otra de las alternativas propuestas (en mi opinión menos elegante) es la siguiente:

try {
	$front->dispatch();
} catch (Exception $e) {
	require_once dirname(__FILE__) . '/../application/Core/controllers/IndexController.php';
	$controller = new IndexController($front->getRequest(), $front->getResponse());
	if ($e instanceof Zend_Controller_Dispatcher_Exception) {
		$controller->error404Action();
	} else {
		throw $e;
	}
	$response = $front->getResponse();
	/* @var $response Zend_Controller_Response_Abstract */
	echo $response->__toString();
}

En esta ocasión, lo que hacemos es capturar la excepción del tipo Zend_Controller_Dispatcher_Exception que es lanzada cuando no se encuentra el controlador o la acción especificadas en la url.

Personalmente prefiero la primera opción, ya que me parece mucho más versatil y elegante y puede usarse para manejar otro tipo de errores parecidos. De hecho es la que uso en mis proyectos (aunque con algunas modificaciones). Pero sólo es una preferencia personal, ya que la segunda opción también permite capturar distintos tipos de excepciones y dispone de las mismas posibilidades.

Mientras más proyectos hago basados en este Framework, más me gusta la potencia y sobre todo la versatilidad y libertad que te ofrece. Pero lo que más me gusta es que programar en php ha dejado de ser monótono y ahora vuelve a ser muuy divertido ;)

Zend Framework 0.8.0, ya queda menos

Viernes, Febrero 23rd, 2007

El equipo de Zend, nos trae una nueva entrega de su nuevo Framework, version 0.8.0., con las siguientes novedades:

  • Componentes que han salido de la incubadora:
    Zend_Auth, Zend_Console_Getopt, Zend_Filter, Zend_Mail_Read, Zend_Rest_Client, Zend_Rest_Server, Zend_Validate
  • Mejoras:
    soporte de aplicaciones modulares MVC, Zend_Date, Zend_Db, Zend_Db_Select, Zend_Locale, Zend_Session
  • Importantes mejoras en rendimiento:
    Zend_Search_Lucene
  • Nuevos componentes:
    Zend_Environment for reporting PHP runtime environment (incubator), Zend_Log fully object-oriented redesign (incubator), Zend_Service_Akismet client for spam-filtering web service
  • Otras mejoras para probar las entregas y la documentación..

Y ya nos queda menos para la 1.0 ;). A los que vayais a probarlo en una aplicacion que tengais con la 0.7.0 o inferior, cuidado porque han cambiado el nombre de algunas clases (por ejemplo el Zend_Controller_RewriteRouter ahora pasa a llamarse Zend_Controller_Router_Rewrite). Para más info, teneis una guia de migración.

- Descargarselo.
- Lista de cambios.

Zend Framework 0.7.0

Viernes, Enero 19th, 2007

Justo ayer hablaba del Zend Framework. Pues hoy mismo nos deleitan con una nueva versión, la 0.7.0 (ya estamos más cerca de la 1.0). Que además nos llega con localización (L10N) e internacionalización (I18N), dos de las características más esperadas por muchos (entre ellos, yo), ya que van a permitir desarrollar aplicaciones multi-idioma/multi-localización .

* Locale-management component
* Locale-aware Date parsing and formatting class
* New translation-management component with gettext support
* Comprehensive class for working with measurements and conversions
* New prototype class for filtering and validation parameters
* New class for managing memory usage in PHP applications
* Many other improvements in current components such as MVC, Session, Gdata, HTTP Client, Search, XmlRpc, and others
* Many other enhancements to test suites and documentation.

Yo me pongo ahora mismo a probarlo ;).
Teneis más info en la página oficial del Zend Framework

Zend Framework 0.60 - diagrama

Jueves, Enero 18th, 2007

Para todos los que usamos el Zend Framework como plataforma de desarrollo de nuestras aplicaciones, Alex nos echa una mano y nos muestra un diagrama del funcionamiento inicial del sistema:

Impreso y pegado en la pared. Gracias Alex.

Por cierto, para los que esteis comenzando con este framework, os recomiendo este magnifico tutorial de Zend Framework.

Evitar que usen nuestros formularios para Spam

Domingo, Noviembre 12th, 2006

Últimamente todos los que programamos en PHP y no hemos sido muy precavidos, nos estamos encontrando con constantes ataques (o intentos) de spammers, que intentan usar nuestros formularios para aumentar sus ventas de viagra ;).
Oscar desde surlandia nos ilustra sobre el tema con su artículo: “Evitar spam en formularios PHP“. Altamente recomendable.