Archive for Diciembre, 2007

Filed Under (symfony, symphony) by pgodel on Diciembre-27-2007

Autor: Javier Leyba

En estos dias he tenido la necesidad de instalar una copia de Symfony en un host compartido.
Yo ya había instalado dicho software en un par de máquinas pero de forma totalmente libre y standard, cosa que no
ocurre en los hosting compartidos donde, normalmente, existe una estructura fija que no responde a las necesidad del framework.

En este caso, mi proyecto Symfony consistía en una estructura “de manual”:

myproject
+—apps
¦ +—backend
¦ ¦ +—config
¦ ¦ +—i18n
¦ ¦ +—lib
¦ ¦ +—modules
¦ ¦ +—templates
¦ +—frontend
¦ +—config
¦ +—i18n
¦ +—lib
¦ +—modules
¦ +—templates
+—batch
+—cache
¦ +—frontend
¦ +—dev
¦ ¦ +—config
¦ ¦ +—i18n
¦ ¦ +—apps
¦ +—prod
¦ +—config
¦ +—i18n
¦ +—apps
+—config
+—data
¦ +—model
¦ +—sql
+—doc
+—lib
¦ +—model
¦ +—map
¦ +—om
+—log
+—plugins
+—test
¦ +—bootstrap
¦ +—functional
¦ ¦ +—backend
¦ ¦ +—frontend
¦ +—unit
+—web
+—css
+—images
+—js
+—uploads
+—assets
+—thumbnail

Al acceder al hosting me encuentro con una estructura donde:

  1. No existí­a Symfony.
  2. Existía un directorio httpdocs al que apuntaba el virtual host y donde debía dejar toda mi aplicación

El primer paso fue tomar conciencia de que era imposible instalar mi aplicación de esa forma.
Symfony tiene un directorio web al que debe apuntar el virtual host y todo el resto de la
aplicación debe estar por detrás de este.

En la empresa de hosting (servergrove) fueron muy gentiles, comprendieron el problema
y me habilitaron un directorio por debajo de httpdocs para instalar mi aplicación. De esa
forma, solo deberí­a hacer que Symfony entendiera que su directorio web, normalmente
dentro del árbol de la aplicación, estaba fuera de este, en httpdocs, algo que era posible
por configuración.

Ahora el problema pasaba a ser la instalación de Symfony.

Primero intenté instalarlo a mano, descargando un tarball y poniéndolo en un directorio
del host. Luego de muchas pruebas me rendí­ ya que no logré que eso funcionara.

La instalación normal y recomendada es utilizando PEAR y, dado que el hosting tení­a PEAR
instalado, imaginé que no vendrí­a mal que hicieran la instalación ellos. Nuevamente
la gente de servergrove me solucionó el problema y Symfony quedó instalado de forma
standard en un directorio accesible por Apache y en el path.

Ahora ya podía ejecutar comandos de Symfony (por ejemplo limpiar el cache con symfony cc)
dentro del directorio de mi aplicación. Y funcionaba !.

El siguiente paso consistí­a en indicarle a Symfony que el directorio web pasarí­a a ser httpdocs.
Para hacer esto, es necesario ir al archivo index.php de nuestra aplicación y modificar lo siguiente:

define(’SF_ROOT_DIR’, dirname(__FILE__).’/../myproject’);

De forma tal que SF_ROOT_DIR apunte a nuestra aplicación.

Luego, en el archivo config/config.php de nuestra aplicación hay que modificar dos paths:

sfConfig::add(array(
’sf_web_dir’ => SF_ROOT_DIR.DIRECTORY_SEPARATOR.’www’,
’sf_upload_dir’ => SF_ROOT_DIR.DIRECTORY_SEPARATOR.’www’.DIRECTORY_SEPARATOR.
sfConfig::get(’sf_upload_dir_name’),
));

De forma tal que quede así:

sfConfig::add(
array(
’sf_web_dir’ => SF_ROOT_DIR.DIRECTORY_SEPARATOR.’..’.DIRECTORY_SEPARATOR.
’httpdocs’,
’sf_upload_dir’ => SF_ROOT_DIR.DIRECTORY_SEPARATOR.’..’.DIRECTORY_SEPARATOR.
’httpdocs’.
DIRECTORY_SEPARATOR.sfConfig::get(’sf_upload_dir_name’),
));

Cabe destacar que el archivo config a modificar es el de cada aplicación (por ej: myproject/apps/frontend/config.php) y no el del proyecto (myproject/config/config.php)
porque el objeto sfConfig no esta disponible en el config del proyecto.

La instalación de Symfony tambien requiere establecer un alias en la definición del virtual
 host para algunos scripts y librerías que utiliza. Dado que esto es imposible en un hosting
 compartido, una solución sencilla es copiar el directorio sf de PEAR/symfony/ al directorio
web de nuestra aplicación, en este caso httpdocs.

Con estos pasos, la aplicación esta lista para funcionar.



Filed Under (Comentarios, Varios) by pgodel on Diciembre-18-2007

Hay muchas formas para convertir estructuras de datos como arrays y objetos a XML.

Convertir estos datos a XML facilita la transmisión de datos a través de sistemas heterogéneos, y es utilizado en web services, SOAP, Xml-Rpc, Ajax y demas tecnologías.

Una de las mejores opciones para convertir arrays y objetos es utilizar XML_Serializer de Pear. Pear es un repositorio muy completo de clases con distintas funcionalidades.

Con PHP 5, pear se instala por defecto. En un sistema Linux, generalmente se encuentra en /usr/local/php (si PHP es compilado desde el código fuente), o en /usr/share/pear si PHP fue instalado via RPM.

Para instalar XML_Serializer y sus dependencias estos son los pasos a ejecutar en la linea de comando del shell:

$ pear install XML_Util
$ pear install XML_Parser
$ pear install channel://pear.php.net/XML_Serializer-0.18.0

Una vez instalado, ya puede ser utilizado en un script, de la siguiente manera:

<?php

// Set error reporting to ignore notices

error_reporting(E_ALL ^ E_NOTICE);

// Include XML_Serializer

require_once ‘XML/Serializer.php’;

// Some data to transform

$palette = array(’red’, ‘green’, ‘blue’);

// An array of serializer options

$serializer_options = array (

   ’addDecl’ => TRUE,

   ’encoding’ => ‘ISO-8859-1′,

   ’indent’ => ‘  ’,

   ’rootName’ => ‘palette’,

   ’defaultTagName’ => ‘color’,

);

// Instantiate the serializer with the options

$Serializer = new XML_Serializer($serializer_options);

// Serialize the data structure

$status = $Serializer->serialize($palette);

// Check whether serialization worked

if (PEAR::isError($status)) {

   die($status->getMessage());

}

// Display the XML document

header(’Content-type: text/xml’);

echo $Serializer->getSerializedData();
?>

El resultado sería el siguiente:

<?xml version="1.0" encoding="ISO-8859-1"?>
<palette>
 <color>red</color>
 <color>green</color>
 <color>blue</color>
</palette>

(ejemplos obtenidos de Sitepoint)

Así como esto funciona con arrays, tambien funciona con objetos y sus propiedades.



Filed Under (Anuncios, Conferencias) by pgodel on Diciembre-17-2007

La nueva edición de la conferencia PHP|tek ha sido anunciada para los dias 20 al 23 de mayo de 2008. Tuve la oportunidad de participar de la edición 2007 y fue una experiencia imperdible.