Conferencia Symfony 2

El otro día me enteré, mediante la página de Sensio Labs, que se iba a celebrar una conferencia online para anunciar el estado actual del desarrollo de Symfony 2. Como es el framework que decidimos utilizar para hacer aplicaciones web me apunté a la conferencia. Esta será el día 22 de Junio a las 10:00, en inglés y utilizando el software proporcionado por Elluminate.

Ya veremos a ver que tal funciona el asunto.

+info:

Página oficial de las conferencias sobre Symfony 2
Twitter de la conferencia
Twitter de Fabien Potencier
Página de Sensio Labs (los creadores de symfony)

Twitter con javascript

Para crear mi portafolio decidí que una de las columnas de la ventana inicial llevaría las últimas entradas de mi cuenta en twitter con lo que me puse a buscar la manera más simple de hacerlo. Decidí que lo más facil sería hacerlo mediante javascript cargando la api de twitter.

Primero encontré un código en jquery que utilizaba como template un archivo js que twitter tiene para blogger en su web. No me gustó la idea ya que las fechas las ponía en notación anglosajona así es que seguí buscando encontrándome con el código que he acabado utilizando, donde es posible decirle el template que quieres utilizar y varias opciones más como permitir los enlaces, ignorar o no las contestaciones (replies), etc.

Suficiente para mí ya que en el propio código se puede cambiar la notación de las fechas a castellano antiguo ;D.

Añadir twitter a tu página paso a paso

Toda la info de configuración y descarga del script en la página de su autor (Remy Sharp).

Ocultar extensiones en url

Siempre me han gustado las URL amigables, que fueran simples llamadas sin caracteres raros ni extensiones de archivos como .html o .php. Siempre queda mucho más clara una llamada a http://carlosfaria.info/contacto que algo como http://carlosfaria.info/index.php?sec=contacto.

En el caso de mi portafolio,  que por cierto acabo de subir, quería ocultar las extensiones de archivos de mis url.

Para ello simplemente modifiqué el fichero .htaccess del raiz de mi web y le añadí lo siguiente:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php

1. arranca el modulo mod_rewrite de Apache
2. si la petición es a un directorio real (uno que exista en el servidor), se ejecuta el contenido del directorio
3. si la petición es para un archivo .php que existe en el servidor se ejecuta ese archivo .php
4. si no se cumple nada de lo anterior se carga la página cogiendo el como nombre del fichero la url

Con esto en mi .htaccess todas las llamadas a mi dominio al estilo http://carlosfaria.info/nombre, intentarán cargar la página http://carlosfaria.info/nombre.php. Si esta existe la mostrará, dejando la url intacta.

Netbeans 6.8 y Xdebug 2.0.5

Para el proyecto en el que estoy implicado actualmente decidimos usar como IDE Netbeans 6.8, dado que usamos Symfony para el proyecto y el IDE elegido por Symfony para su integración con él ha sido Netbeans por votación popular. De todas formas ya venía usando este genial software para todos mis proyectos en php.

Hace cosa de dos meses, escribí un articulo para integrar el debugging con Xdebug en MAMP con NetBeans. Al prescindir de MAMP tenía que volver a instalar Xdebug en mi entorno AMP, con lo que decidí utilizar MacPorts para buscar la última librería Xdebug. Al hacer un search con $ port search xdebug ahí estaba, la versión xdebug 2.0.5. Instalé y rearranqué mi entorno de desarrollo.

Hice mi primera prueba desde Netbeans 6.8 y puse una parada en un trozo de código de una aplicación que tenía en mi servidor local. Al darle a F8 para continuar a la siguiente instrucción, Netbeans me dió un error inesperado:

Cada vez que intentaba pasar a la siguiente instrucción me daba el mismo error. Buscando por ahí resulta que la versión de Xdebug 2.0.5 manda una señal de Stop a Netbeans que hace que casque (no se donde lo leí ahora mismo). El caso es que yo lo solucioné instalando una versión anterior de Xdebug bajandola de las utilidades de debug Komodo Debugger Extensions. Descargué la versión que me interesaba y al poco ya estaba haciendo debugging sin ningún problema.

Otra forma que he visto que le funciona a la gente por ahí es que al configurar Xdebug en el archivo de configuración de php (php.ini), la línea xdebug.extended_info=0 se cambie por xdebug.extended_info=1. No lo he probado pero puede ser otra solución si la mia no funciona.

Operaciones via ftp en php

Un gran problema de trabajar con servidores compartidos es que te capan un montón de cosas. Entre ellas la grabación de ficheros subidos desde un formulario via web. Nunca he entendido esto, supongo que será para cubrirse las espaldas y no tener problemas si algún desalmado se hace con tu usuario y trastea en tu cuenta.

Por un lado me parece bien, pero para la gente que se tiene que dejar los cuernos en buscar alternativas a la subida normal de archivos me parece una guarrada.

En fin, el caso es que encontré que para cualquier operación en el servidor que implique permisos de administración (crear un fichero, crear un directorio, cambiar permisos, etc…) normalmente el usuario destinado a las operaciones de ftp suele tener dichos permisos con lo que simplemente con abrir una conexión con el usuario de ftp nos servirá.

Por ejemplo, para crear un directorio se haría de esta forma. (Notese que yo tengo los datos del usuario ftp en un fichero aparte con defines con lo que uso las variables _FTP_X para iniciar la conexión con el servidor)

static public function mkdir_ftp($path,$mod)
{
$path = _FTP_ROOT_.$path;

$ftp_user_name = _FTP_LOGIN_;
$ftp_user_pass = _FTP_PASS_;
$ftp_root = _FTP_ROOT_;
$ftp_server = _FTP_SERVER_;

// conexión básica
$conn_id = ftp_connect($ftp_server);

// login con nombre de usuario y password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$success=false;
// intentamos crear el directorio $path
if (ftp_mkdir($conn_id, $path)) $success=true;

//Cerramos la conexión
ftp_close($conn_id);

return $success;
}

Escuchando el Mixtape de Kayo

Xdebug en MAMP

Loco! Me he vuelto loco para conseguir que funcionara el xdebug en el MAMP para hacer debugging de mi código php en Netbeans. Llevaba tiempo queriendolo instalar pero ni por asomo me habría imaginado que me iba a costar tanto.

Siguiendo las instrucciones de la página de netbeans que explica como instalar xdebug al hacer phpize para compilar el xdebug que genera el archivo xdebug.so siempre me daba el mismo error:

Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF
environment variable is set correctly and then rerun this script.

Buscando como alma que lleva al diablo, todas las páginas que encontraba me armaban un cacao de cojones. Hasta me hice una cuenta developer en .mac para descargarme XCode Tools por si fuera eso (lo pone como sugerencia por si no te funciona el make).

En fin, no me entretengo, al final ha sido tan facil como descargarse un xdebug.so ya compilado y utilizarlo en otra carpeta a la que dice el tutorial (osea, nada de lo que dice…).

Despues de mucho buscar llegué a esta página donde había una explicación detallada de como hacer que funcionara xdebug (pero sin suerte para mí como en las anteriores 107). Gracias a San Dios había un enlace a los Komodo Debugger Extensions, que tiene enlaces a la ultima version de xdebug compilada.

Aleluya!! Ya tenía el dichoso archivo sin tener que compilar, saltandome unos cuantos pasos del tutorial. Descargué la última versión para Mac Osx de PHP Remote Debugging de la sección Komodo 5.1 Remote Debugging Packages. Descomprimí ese y había varias carpetas. Cogí el de la versión 5.2 porque rebuscando por google buscando Komodo, encontré esta página donde explica como instalar xdebug en Leopard, es decir lo mismo que estoy explicando yo, menos de donde sacar el xdebug.so compilado.

Una cosa importante es deshabilitar el PHP Zend Optimizer que trae por defecto acivadoel MAMP, así es que desde la ventana de MAMP ya estas tardando en desactivarlo.

En fin, puse el archivo xdebug.so en el directorio “/Applications/MAMP/bin/php5/xdebug” y al final del fichero de configuración de php5 en MAMP “/Applications/MAMP/conf/php5? puse lo siguiente:

; xdebug config for Linux and Mac OS X
zend_extension=/Applications/MAMP/bin/php5/xdebug/xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.idekey=jeffg
xdebug.profiler_enable=1
xdebug.profiler_output_name=xdebug.cachegrind-out.%s.%p

En la entrada “remote_port” es muy importante poner el mismo puerto que está configurado en NetBeans para poder hacer debugging desde el propio IDE. Este se puede cambiar desde las preferencias de NetBeans en la sección PHP, por defecto está a 9000 y para que nos vamos a complicar, yo lo dejé igual.

Una vez hecho esto y habiendo reiniciado MAMP, haciendo un phpinfo() podremos saber si xdebug está bien instalado. Si lo está nos saldrá una linea como esta:

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
with Xdebug v2.0.4, Copyright (c) 2002-2008, by Derick Rethans

Cuando se empiece a hacer debugging desde NetBeans en la parte inferior derecha debe aparecer netbeans-xdebug [ running ]. Si aparece algo como netbeans-xdebug [ waiting ] o algo parecido, revisalo todo porque algo tienes mal, seguramente algo en el php.ini está mal escrito.

Espero que ayude a alguien…

CakePHP o Symfony

CakePHP VS Symfony

Situación: Tienes un proyecto web en mente, un proyecto que estás madurando desde hace tiempo y que de hacerlo realidad puede hacerte rico o por lo menos hacer que ese proyecto sea tu única prioridad, laboralmente hablando. Este proyecto tendrá un volumen importante de peticiones simultáneas, es decir, mucha gente se conectará a la vez e interactuará como se puede interactuar con Facebook por ejemplo (si, estamos hablando de ese volumen, porque es probable, así es que habrá que ponerse en el caso peor).

Duda: ¿Que framework usar para crear dicho proyecto web? ¿Realmente debería usar un framework o mejor programo en php a pelo?

He estado leyendo aquí y allí, he buscado infinidad en la web y en ningún sitio me aclaran nada.

¿Alguien tiene algo de experiencia en alguno de los dos? ¿Alguien que sepa del tema y me ayude a tomar una decisión?