Asier Marqués

Hablando sobre tecnologías web y otras cosas que me interesan

Archivo de la categoría 'PHP'...

Archivado bajo Desarrollo Web, PHP, Trucos

Aunque se puede utilizar para más cosas, Sphinx es principalmente un motor de búsqueda de texto completo que puede usarse al trabajar normalmente con sistemas de bases de datos mysql y postgresql.

Sphinx trae, en el paquete donde incluye su código fuente, una serie de librerías con las que se puede atacar a su demonio searchd, el encargado de hacer consultas a los índices que hayamos creado.

Aunque una de esas librerías está escrita en php, quizá nos interese más usar la librería escrita en c desde php, con el fin de comunicarnos de una forma más eficiente contra searchd.

Para ello lo primero que tenemos que hacer es compilar la librería libsphinxclient, que encontramos en el directorio que tiene su mismo nombre dentro de la carpeta api, en el código fuente de sphinx.

CXXCPP="gcc -E" ./configure --prefix=/opt/sphinx
make
make install

Si no tenemos phpize, lo instalamos

apt-get install php5-dev

Ahora nos bajamos la extensión pecl más reciente de sphinx, descomprimimos el paquete y usamos phpize:

cd sphinx-1.0.0
phpize

Configuramos y compilamos la extensión

./configure --with-sphinx=/opt/sphinx
make
make install

Y por último, podemos añadir un archivo sphinx.ini en /etc/php5/conf.d/ donde habilitamos la librería:

[sphinx]
extension=sphinx.so

Tras reiniciar el servidor web ya podemos trabajar con esta librería.

Comentarios (2) Posted by Asier Marqués on Miércoles, Junio 10th, 2009

Archivado bajo Aplicaciones Web, Desarrollo Web, Internet, PHP, javaScript

Ben Ramsey hizo una presentación muy interesante hace unas semanas en la que aclaraba conceptos sobre REST y cómo lograr aproximarnos a un diseño RESTfull.

Merece la pena echarle un vistazo

Comentarios (0) Posted by Asier Marqués on Viernes, Diciembre 5th, 2008

Archivado bajo Desarrollo Web, PHP

Ayer estuve mosqueado con un problema que me daba curl a la hora en enviar peticiones post con php.

Mi aplicación se conectaba a una api que me devolvía un resultado en json, pero en lugar de eso me devolvía una cadena vacía a menos que fallase la autenticación. Lo que me mosqueaba es que sólo fallaba con peticiones POST y no con peticiones GET.

Examinando las cabeceras HTTP de respuesta se mostraba un error indicado como “HTTP/1.1 417 Expectation Failed Connection: close Content-Length: 0

La solución al problema es enviar el campo Expect (vale con mandarlo vacío) dentro de las cabeceras http de la petición, por ejemplo:


$ch = curl_init();

//metemos el campo expect en la cabeceras

curl_setopt( $ch,

CURLOPT_HTTPHEADER,

$headers = array( "Expect:")

);
Comentarios (5) Posted by Asier Marqués on Martes, Noviembre 18th, 2008

Archivado bajo Desarrollo Web, PHP

Algunas veces disponemos de un array que contiene a su vez varios arrays asociativos, que contienen por ejemplo datos obtenidos tras una consulta a la base de datos.

Puede que dicho array esté cacheado y no queramos atacar a la base de datos para ordenar esos resultados, por lo que nos vendría genial poder ordenar los arrays asociativos que contenga dicho array, en base a los valores que contenga una de las claves de los mismos.

Lo vemos más claro en un ejemplo. Tenemos el siguiente array:


$resultados = array(

array(

'id' => 1,
'nombre' => 'Enjuto',
'apellido' => 'Mojamuto'

),

array(

'id' => 2,
'nombre'  => 'Marlo',
'apellido'  => 'Brando'

)

);

En php disponemos de la función usort(), que ordena en base a una función de comparación que nosotros especifiquemos.

Por ejemplo si quisiéramos ordenar en base a la clave id, en orden descendiente, la función sería:


function comparar($x, $y){

if ( $x['id'] == $y['id'] )
return 0;
else if ( $x['id'] > $y['id'] )
return -1;
else
return 1;

}

Y ahora llamamos a usort para que utilice dicha función:


//si no estamos en un entorno Orientado a Objetos

usort($resultados, array('comparar'));

//si estamos en un entorno Orientado a Objetos

usort($resultados, array('nombreDeClase','comparar'));
Comentarios (2) Posted by Asier Marqués on Miércoles, Octubre 29th, 2008

Archivado bajo Desarrollo Web, Humor, PHP, Personal

Viñeta por Juan Lao Tebar / CC BY-SA 2.5

Una de las cosas que más tiempo nos hace “perder” en el desarrollo web.

Comentarios (5) Posted by Asier Marqués on Miércoles, Octubre 29th, 2008

Archivado bajo Desarrollo Web, PHP

FirePHP es una extensión para Firebug, que combinándola con una clase php que usemos en el lado del servidor, nos permite ver y crear trazas de errores en el mismo.

Dispone de integración para la mayoría de los frameworks de php, algunos cms como Drupal y un protocolo propio que permite crear librerías para otros lenguajes que se puedan comunicar con el plugin para FireBug.

FirePHP

Comentarios (1) Posted by Asier Marqués on Martes, Septiembre 2nd, 2008

Archivado bajo Desarrollo Web, Microsoft, PHP, Sistemas

La próxima versión de php incluirá una serie de cambios generales, como la introducción de namespaces por ejemplo, que afectarán a todos las versiones de los diferentes sistemas operativos.

Pero en la versión para Microsoft Windows se incluyen una serie de cambios que debemos conocer los que desarrollamos bajo esta plataforma.

- Sólo serán soportados Windows 2000, XP, Server 2003, Vista y Server 2008. Se elimina el soporte para Windows 98, ME, and NT.

- Las nuevas versiones de php a partir de esta versión usarán el compilador VC9 (Microsoft Visual C++ 2008) por lo que requiere la librería msvcr90.dll. Si usas el instalador oficial, este incluirá dicha librería automáticamente.

Por razones de compatibilidad con algunas extensiones y con el servidor web Apache, durante las versiones php5.3.x se tendrá que utilizar la versión compatible con VC6, el cual data de 1998. En las siguientes versiones de php éste solo podrá ser compilado con VC9.

- Se incluirán versiones de 64 bits pero tendrán un soporte experimental por el momento.

- Las extensiones PECL no serán incluidas en php hasta que el nuevo sistema de compilado de PECL funcione correctamente.

- Los binarios se publicarán al mismo tiempo que el código fuente.

Comentarios (0) Posted by Asier Marqués on Jueves, Agosto 28th, 2008

Archivado bajo Desarrollo Web, Innovación, PHP

Johannes Schlüter se ha programado una extensión para php, que captura los errores generados en una aplicación web y los publica en twitter.

Este es un posible uso muy inteligente de Twitter, ya que si pensamos en la eficaz que sería dicho servicio web usado como monitorización de errores, podemos ver una aplicación profesional y de gran utilidad al concepto de microblogging.

Lo vemos en un ejemplo

Imagina un equipo de 4 desarrolladores, y que cada uno tuviese una cuenta de twitter. Se crea una cuenta en twitter de usuario adicional, pero con el perfil privado. Esta cuenta es a la que se envían todos los mensajes de error de nuestra aplicación en producción.

Cuando la aplicación en producción genere un error inmediatamente el perfil de nuestro usuario se actualiza, avisando a nuestros 4 desarrolladores responsables de nuestro proyecto.

Los avisos les llegarían a su cliente de mensajería instantánea y al teléfono móvil. De esta forma controlarían cuando su sitio web esta caído y pueden llevar el seguimiento de los errores en el sitio.

Es posible que un servicio profesional especializado en este tipo de cosas, sea un proyecto útil e interesante para desarrollar. Pensaré en ello…

Comentarios (2) Posted by Asier Marqués on Jueves, Agosto 28th, 2008

Archivado bajo Desarrollo Web, Innovación, PHP, Sistemas, UNIX / Linux

A veces tenemos que generar sintetizar texto a voz en nuestras aplicaciones web para usuarios con problemas de visión, mejorar la experiencia del usuario en general o realizar cualquier otra tarea.

En Linux/UNIX tenemos una serie de herramientas que nos pueden ayudar a realizar esta tarea. En este tutorial de Tony Bhimani podemos ver como usar el sintetizador de voz Festival con un encoder MP3 para generar archivos dinámicamente desde texto, con una aplicación web php.

Necesitamos tener instalado Festival y Lame MP3 Encoder para que todo esto funcione. Tony ha dejado un ejempo de cómo sería un frontend básico pero funcional para conseguirlo.

Comentarios (1) Posted by Asier Marqués on Lunes, Agosto 25th, 2008

Archivado bajo Bases de Datos, Desarrollo Web, Frameworks, Microsoft, PHP, Sistemas, Trucos

En la actual versión de symfony se usa Propel junto a Creole para crear un orm y una capa de abstracción entre la base de datos y el resto de nuestra aplicación.

Esto nos permite desarrollar aplicaciones independientes del motor de base de datos que usemos.

Php utiliza oficialmente la librería mssql para conectarse a una base de datos Sql Server y aunque existe una opción mejor por parte de Microsoft en fase CTP, Propel (y por lo tanto Symfony) la utilizan para conectarse a este tipo de motor.

Sin embargo, para conseguir conectarse y operar con éxito con Sql Server 2005 hay que hacer una serie de configuraciones en php/symfony y hacks en creole.
(Espero que no os siente esto como un cubata de Baileys con tonica : )

Vamos a verlo paso por paso:

1- Actualizar la librería ntwdblib.dll a la versión 2000.80.194.0.

2- Activar las extensiones php_mssql y php_xsl en el php.ini.

Adicionalmente debemos indicar los siguientes parámetros para php_mssql:

mssql.datetimeconvert = 0
mssql.textlimit = 2147483647
mssql.textsize = 2147483647

3- Crear nuestra base de datos en Sql Server y asignar el login y permisos adecuados al usuario que usemos para conectarnos.

4- Editar el archivo schema.yml con nuestro esquema de base de datos.

5- Configurar la conexión a la base de datos:

[ruta_completa]\symfony.bat configure:database
“mssql://usuario:password@equipo\instancia/nombre_baseDatos”

6- Construir el modelo orm de symfony:

[ruta_completa]\symfony.bat propel:build_model

7- Editar el fichero MSSQLConnection.php ubicado en \lib\plugins\sfPropelPlugin\lib\vendor\creole\drivers\mssql dentro del directorio de symfony.

En el caso de que no se especifique un puerto en el string de conexión a la base de datos, creole te inserta el valor de puerto predeterminado para sql server. Sin embargo, en Sql Server 2005 esto provoca un fallo impidiendo realizar una conexión exitosa a la base de datos.

Para evitar que creole nos meta el puerto si o si, debemos modificar la siguiente secuencia de control en MSSQLConnection.php:

if(!empty($dsninfo['port'])) {
$dbhost .= $portDelimiter.$dsninfo['port'];

}

//*else {
//$dbhost .= $portDelimiter.’1433′;
// }

Con estas modificaciones ya deberíamos poder trabajar con sql server 2005 desde symfony.

Comentarios (6) Posted by Asier Marqués on Miércoles, Julio 16th, 2008