Archivo de la categoría ‘php’

Estructura de archivos en Zend para varios proyectos.

Viernes, 11 de Julio de 2008

Bueno, en muchos sitios he visto estructuras de archivos ((por ejemplo la usada en el manual base de Zend, la que usa Enrique Place en SurforceCMS o la que comentaba Pablo en ZendHispano)) para el framework de Zend. La mayoría de las propuestas son derivadas del “manual base” y IMHO todos tienen un fallo, la reutilización y la posibilidad de crear nuevos proyectos en el mismo servidor.

En la actual empresa en la que estoy trabajando, tenemos cerca de una treintena de proyectos activos, si para cada uno tuviesemos que seguir estas estructuras se volvería todo un caos. Aqui, en cambio, usamos una estructura inversa. Definiendo tan solo tres directorios de las que depende todo:

  • Public
  • Private
  • Config

Y cuando realizamos un nuevo desarrollo introducimos la abreviatura única en las tres carpetas. Por ejemplo si tuviesemos una nueva aplicación de comercio online ((Es tan solo un ejemplo.)) y decidimos titularla “compras” introduciríamos en los tres directorios el correspondiente subdirectorio

  • Public.
    • compras
  • Private.
    • compras
  • Config.
    • compras

A simple vista puede parecer más lioso, pero una vez empiezas a usarlo ves las ventajas. Ya que todo tiene la misma estructura, todo es accesible de una forma sencilla, la administración no se hace tan incontrolable y sobretodo consigues separar la parte pública de la privada, fundamental en servidores cara a internet.

Otra de las adaptaciones que he realizado viene por necesidad. En el servidor donde está alojado mi dominio usan cPanel ((No se si en otros lados será igual)), y la forma de crear subdominios es creando los subdirectorios directamente en public_html ((Siendo accesibles como sudominio.dominio.com o dominio.com/subdomino))

Bueno, pues visto lo visto e aquí mi adaptación:

La estructura de archivos para el framework de ZendComo se puede ver el screenshot está sacado del EasyEclipse ((Copiando metodología de desarrollo de Enrique Place)), Y está basado en el desarrollo del Proyecto01 del que ya hablamos.

Para todo el proyecto usaremos el nombre “afm” que es un acrónimo del site.

  • config->afm: En este directorio añadimos la configuración base del site.
  • library: En library añadimos el framework de Zend y el resto de librerías externas que podamos ir necesitando para el desarrollo ((Como por ejemplo HTML Purifier, Blueprint o cualquier otra aplicación externa))
  • private->afm: En este subdirectorio incluimos toda la parte privada de la aplicación.
    • admin y default: Lo primero que vemos son los módulos; en este caso solo “admin” y “default” ((Para mantener más la integridad de la estructura, el módulo “default” tambien lo incluyo como subdirectorio)). En cada módulo incluyo la “subestructura base” típica:
      • controllers: Aquí guardamos los “controladores” del módulo. Usando la forma de trabajar, MVC, del framework de Zend podemos poner las vistas en el directorio “views” a la misma altura ((Aunque como todo en ZF siempre puedes configurarlo a tu gusto)) que “controllers“.
      • views: Aquí incluimos los subdirectorios necesarios para toda la parte de la “vista” (”filters“, “helpers“, “scripts“, “layouts“,…).
    • models: Esta es la zona donde se guardan todos los “modelos” necesarios para el site.
  • public_html: De aquí colgará toda la parte publica de la web ((Siguiendo la estructura “impuesta” por el cPanel el directorio “public_html/” alberga el site principal y cualquier subdominio cuelga como subdirectorio de “public_html/“)). En este caso el subdominio se llamará, para mantener la integridad claro, “afm“.
    • public_html->afm: La información aquí suele ser básica, el “.htaccess” que redirige toda la información a “index.php” y el propio “index.php“. Aqui también irán todas los posibles directorios con la información pública: estilos, imágenes, javascripts…

Como se puede ver la estructura es fácilmente adaptable para incorporar nuevos sites, para reutilizar posible código y para tener una librería única en la que incluir el framework, a parte, claro de la necesidad de separar la parte de privada de la parte pública del site.

Con respecto a la forma de trabajar de una estructura “habitual” la única diferencia radica en el “index.php” y en el “Bootstrap.php” que deben tener en cuenta el “salto de un directorio más“. Pero, como por ahora estoy puliendo mi “Bootstrap.php” ((Basandome en el usado por Pádraic Brady para el desarrollo de su Blog con Zend Framework)) (el “index.php” ya tiene una versión “estable“) lo dejaré para el siguiente post…

Pero si tenéis alguna duda, o no os gusta, o tenéis alguna sugerencia, no lo dudes, más abajo tenéis los comentarios!

Instalar OpenID en tu site.

Viernes, 4 de Julio de 2008

Como ya, por fin, se empieza a ver en más sitos de Internet la opción de logearse usando OpenID, decidí adaptar mi site …YSLL! para que fuese un proveedor de dicho sistema y poder usarlo a partir de ahora. Bueno, un proveedor único, ya que solo acepta una cuenta; la mía.

Pero, que es OpenID?

Bueno, OpenID surgió a mediados del 2006 como una forma de unir cuentas y membresías en un único sitio. Ahorrando así la molestia de tener cientos de cuentas distintas en cientos de sites distintos. ((Información más técnica al respecto la puedes tener en:

  • La web oficial de OpenID
  • En el principal servidor español de cuentas OpenID. OpenID.es
  • O, como no, en el enlace de la wikipedia

))

La lógica es bastante simple. Tener un único sitio con mis datos y que el resto de sitios le pregunten a él por mi. Teniendo así una única cuenta creada, y centralizada.

Pero, como funcionaría esto?

Todavía no ves muy bien el uso? Bueno, probemos con un ejemplo.

Supongamos que tenemos una cuenta en un servidor OpenID. Digamos, por ejemplo OpenID.es, y supongamos que queremos comentar un post de una amiga, que está en Blogspot. Lo primero que nos encontramos es que nos pide usuario y contraseña en Blogspot, o la opción más fácil; usar una cuenta OpenID! Al introducir la URL de tu cuenta OpenID, el servidor blogspot preguntará, a la web que le has indicado, por ti. “Oye, quien es este tipejo? Lo conoces?“, y será el servidor OpenID.es el que realmente se moleste en comprobar tu usuario y contraseña en sus datos. Una vez comprueba quien eres, le indica quien eres al servidor de Blogspot, “Si, lo conozco, se llama GeL/T0 y aquí tienes unos pocos datos más sobre él“. Y listo, el servidor Blogspot dará por buena esa información y te dejará añadir tu comentario usando (parte de) la información que le ofrece tu OpenID.

Cuales son las ventajas?

Sobretodo centralización. Con una única cuenta tienes acceso a donde te de la gana. No más altas, no más registros, no más correos de confirmación. Y sobretodo, ten en cuenta, que una vez que te logéas por primera vez en tu servidor, no necesitarás tener que andar logeandote más veces. Con introducir la URL de tu cuenta OpenID será suficiente ((Ya que al preguntar al servidor OpenID, él sabrá de antemano quien eres))

Vale, genial. Pero vallamos un poco más adelante…

Como hacer que mi site valide como OpenID?

Bueno, hay un par de opciones. La más básica es crearte una cuenta OpenID en cualquier servidor y en la cabecera de tu site introducir lo siguiente:

<link rel="openid.server" href="{URL DEL SERVER}" />
<link rel="openid.delegate" href="{URL DEL DELEGATE}" />

Por ejemplo, si tenemos una cuenta en OpenID.es esto sería de la siguiente forma:

<link rel="openid.server" href="http://openid.es/serve" />
<link rel="openid.delegate" href="http://NOMBREDEUSUARIO.openid.es" />

Y ya estaría, podrás usar siempre tu propio site para logearte en cualquier lado!

Como hacer que “realmente” tu site valide como OpenID?

Bueno, compliquemos un poco más el asunto. En el caso anterior realmente lo que hacemos es redirigir a un site externo donde validar nuestros datos, es decir realizamos dos saltos entre servidores, pero porque no hacemos que sea realmente nuestro site el que valide los datos? Nos ahorraríamos un salto y encima controlaríamos nosotros toda la información.

Pero, tendríamos que desarrollar todo el código? No! Nada más lejos de la realidad. Simplemente necesitaremos descargarnos el script de php, phpMyID(OS) ((Este script está pensado para un único usuario, aunque según comenta el autor, es fácilmente adaptable a varios)), configurar ciertos parametros y subirlo a nuestro site. Parece fácil, verdad? Pues lo és ;-)

Veamos como hacerlo. Lo primero es descargarnos el script(tgz, zip), descomprimimos y la primera sorpresa, son solo dos archivos! Tiene buena pinta, verdad! Bueno, pues de esos dos archivos nosotros solo tocaremos uno MyID.config.php.

Bueno, este archivo será el que contendrá toda la información necesaria. A simple vista es fácil ver que habrá que cambiar y que no:


<?php
// IF YOU HAVE NOT DONE SO, PLEASE READ THE README FILE FOR DIRECTIONS!!!
/**
* phpMyID - A standalone, single user, OpenID Identity Provider
*
* @package phpMyID
* @author CJ Niemira <siege (at) siege (dot) org>
* @copyright 2006-2008
* @license http://www.gnu.org/licenses/gpl.html GNU Public License
* @url http://siege.org/projects/phpMyID
* @version 2
*/
/**
* User profile
* @name $profile
* @global array $GLOBALS['profile']
*/
$GLOBALS['profile'] = array(
# Basic Config - Required
‘auth_username’ => ‘username//aquí añadiremos el nombre de acceso
‘auth_password’ => ‘password‘, //aquí añadiremos la contraseña de acceso ((Esto trae más miga))
# Optional Config - Please see README before setting these
‘microid’ => array(’mailto:correo‘, ‘web‘), //Esta información es opcional ((MicroId? Que es MicroID))
‘pavatar’ => ‘imagen‘, //Aquí debería ir vuestro pavatar ((No sabes lo que es el pavatar. Vistia su site))
# Advanced Config - Please see README before setting these
# ‘allow_gmp’ => false,
# ‘allow_test’ => false,
# ‘auth_realm’ => ‘phpMyID’,
# ‘force_bigmath’ => false,
# ‘idp_url’ => ‘http://your.site.com/path/MyID.config.php’,
# ‘lifetime’ => 1440,
# ‘paranoid’ => false, # EXPERIMENTAL
# Debug Config - Please see README before setting these
# ‘debug’ => false,
# ‘logfile’ => ‘/tmp/phpMyID.debug.log’,
);
/**
* Simple Registration Extension
* @name $sreg
* @global array $GLOBALS['sreg']
*/
$GLOBALS['sreg'] = array ( // Aquí ira el grueso de la información
# ‘nickname’ => ‘nick‘, // Tu nick, en algunos sitios (por ejemplo BlogsPot) mostrarán el nick
# ‘email’ => ‘correo‘, // Tu dirección de correo. Básico!
# ‘fullname’ => ‘nombre‘, //Tu nombre completo, esto será lo que muestren otros blogs (el mio?, ahora mismo no lo recuerdo)
# ‘dob’ => ‘AAAA-DD-MM‘, // Tu fecha de nacimiento. OJO: El formato es distinto al español
# ‘gender’ => ‘genero‘, // Sexo. M/F
# ‘postcode’ => ‘CP‘, //Código postal.
# ‘country’ => ‘ES‘, // Ciudad
# ‘language’ => ‘es‘, // Lenguaje
# ‘timezone’ => ‘Europe/Madrid// Zona horaria.
);
require(’MyID.php’);
?>

Como ves, solo hay una cosa realmente difícil de hacer, y es crear la contraseña encriptada. Y como soy muy majo, acabo de crear un pequeño script para que podáis crear todas las que queráis. Es tan simple como escribir esto:

http://storage.g05l21.net/contrasenyaOpenID.php?a1={tu usuario}&a2={tu contraseña}&a3={auth_realm ((Este valor no es obligatorio, usaría por defecto ‘phpMyID’))}

Y simplemente copiar el churro que te devuelve.

Una vez rellenado todo tendrás que subir ambos archivos al site (yo recomiendo subirlo a la misma home) y listo. Ya tienes un bonito servidor OpenID funcionando en tu ordenador. Ahora cuando quieras logearte usando tu servidor solo tendrás que escribir:

http://{tudominio}/MyID.config.php

Esto no es que sea muy “recordable” y comodo, verdad. Bueno, pues volvemos al punto anterior (Como hacer que mi site valide como OpenID?) y realizamos lo mismo; añadir a las cabeceras de tu home el siguiente código:

<link rel="openid.server" href="http://{tudominio}/MyID.config.php" />
<link rel="openid.delegate" href="{tudominio}/MyID.config.php" />

Y ya está. A partir de ahora podrás usar tu propio dominio para logearte en cualquier site que acepte cuentas OpenID!

Primer paso Zend Framerwork: Recoger información

Sábado, 7 de Junio de 2008

Mi primer desarrollo en ZendFramework quiero que sea algo muy básico, poco a poco iré dándole más potencia y versatilidad hasta llegar a tener un desarrollo que poder entregar. Algo que la gente pueda usar y que, espero, así sea. Hace tiempo alguien me pidió ayuda en esto de las güebs y el internete ese… Así que espero que esto pueda acabar valiéndole.

Solo una cosa. Intentaré hacer tres desarrollos distintos, para tres personas que en un caso me lo pidieron, en otro se lo ofrecí yo y en el último no tienen ni idea de que su sobrino “sea capaz de hacer eso en internes”.

Espero que alguno de los tres acabe usando los desarrollos.

Bueno, para el desarrollo inicial, para empezar a zambullirnos en ZF. Lo primero es recabar información. Así que aquí una ristra de enlaces para poder empezar (y para no olvidarlos yo)

http://framework.zend.com/ donde todo da comienzo. Sobretodo te será útil la zona de documentación y API.

http://phpsenior.blogspot.com/ El blog técnico de Enrique Place. de obligada referencia para ver de cerca el mundo del desarrollador senior, de Php5, de patrones de diseño, de desarrollos en zend…

http://blog.astrumfutura.com/ Blog donde te enseñan a desarrollar un blog en ZF desde 0, muy bueno, pero que muy bueno.

http://www.zfforum.es/ Los foros de ZF en lengua castellana. La verdad es que no tienen mucha actividad todavía, así que poco podrás ver en ellos. Pero siempre podrás preguntar.

http://www.forosdelweb.com/ El foro por excelencia. Donde encontrarás de todo lo relacionado con el mundillo del desarrollo web. Pero sobretodo mucha información sobre PHP5 orientado a objetos. A parte de poder encontrarte a un omnipresente enriqueplace.

Y otros buenos blogs con ejemplos y mucha info:

http://bolsadeideas.cl/zsamer/

http://zendhispano.blogspot.com/

Con todo esto, más algún que otro manualito que me he bajado y leido… Y que creo que no merece ser nombrado en exceso, jeje, empezaremos con ZF

PS: Está claro que si alguien quiere, estaría encantado de escuchar nuevos desarrollos y llegar a acuerdos para realizarlos ;-)

Empezando con Zend Framework

Jueves, 5 de Junio de 2008

Bueno, después de mucho tiempo picando código en Php4, sin llegar a tomar en serio ningún framework, incluso estuve mirando en su momento el cakePhp pero no llegó a convencerme. Después de haber creado desde cero un blog, aplicaciones varias e incluso un CRM muy básico. Después de pasarme todo el día en el trabajo con una PAF de framework. Después de todo ese tiempo, y ahora que encima ya está aquí el PHP6, he decido dar el salto a mi querido PHP5

Y encima, hacerlo de la mano de los más grandes en esto de PHP (que para algo son los padres del cotarro) los señores de ZEND y su framework. ZendFramework.

Por qué ZendFramework y no otros? Bueno, en principio, si lo comparamos con Symfony creo que ZF sale un poco en desventaja, digamos que tiene pequeñas deficiencias que otros ya han solventado hace tiempo.

Pero, también es cierto, que mientras otros juegan con el tiempo pasado a favor, ZF juega con el tiempo futuro a su favor, ya que actualmente el desarrollo es muy grande y el respaldo por parte de Zend lo hace no un framework más…

Bueno, y otra de las grandes razones es por mimetismo. Se que mucha gente usa Symfony, otros usan Smarty o CakePhp… Pero a la persona que más me interesaría mimetizarme. El blog del que cada día más se puede aprender es el de PHPSenior.

Enrique Place, uruguayo con un currículo a sus espaldas impresionante, está completamente decidido por ZF, y así lo demuestra realizando un gran CMS basado solo en clases, pensado para PHP5 y desarrollado con ZendFramework. Surforce CMS

Está todavía en un estado todavía muy básico (recién sacada la versión 1.0?), y cualquier mano que se le pueda echar siempre será bienvenida, desde testing hasta desarollo y corrección de errores. Si le quieres ayudar: http://phpsenior.blogspot.com/2008/05/surforce-cms-solicitud-de-colaboracin.html

Así que aquí estoy. Empezando con un lenguaje “nuevo” y con un framework nuevo para mi.

Y como bien suponéis aquí iré poniendo todo lo que vaya desarrollando y como lo voy a ir haciendo. Por si alguno quiere empezar a desarrollar en PHP5.

Un pequeño paso para la humanidad, un gran paso para el hombre.

Viernes, 30 de Mayo de 2008

Pues sip, todo ha cambiado. Y lo primero el blog… Ahora mismo estoy centrado en otros proyectos (top-secret por ahora). Así que el crear un blog, mantenerlo, añadirle opciones, control de Spam (que me habían cazado el blog y no me lo dejaban en paz! Ains, ahora sufren el akismet! ) Se me escapaba de las manos y así ha estado el pobre blog, con casi un año en standby.

Así que decidí dar el paso. Metí toda mi info al wordpress y aquí estoy de nuevo… Espero escribir más cositas y más amenudo, que últimamente tenía mucho que decir y poco escrito… Seo, PPC, PHP, Java, Patrones de diseño, mis propias comeduras de tarro y mis accidentes con la burrilla (que no son pocos!), mis ideas, mis avances con esto del wordpress (templates, plugins, widgets, optimización, aquí hay mucho donde jugar!)

Bueno, sobretodo empezaré por los templates. Que quiero volver a mi viejo diseño. Adaptarlo al nuevo g05l21.net y ver si soy capaz de entender como funcionan aquí los templates, que parece que no es muy difícil.

También quiero hablar en breve de los PPC, así que he decidido crear una pequeña categoría donde os hablaré de ellos, que son, cuales son SCAM y cuales no… Que significa PPC y SCAM, lo primero, claro! jejeje..

Posiblemente cree algún foro o algún wiki donde trrasteemos todos…

Comentaré nuevas web2.0, haré reviews (pagados y “por gusto”) de todo lo que se me venga en mente o me ofrezcan. Probaré publicidades en el blog, aunque haya gente que no le guste, y a mi no me de de comer, siempre me podrá ayudar a pagar esos 180$ que pago bianualmente del dominio.

Vamos, toda una revolución en “Yo Simplemente Lloro Libertad…”