944 063 154

Blog

Etiqueta: PHP

¿Por qué debes actualizar tu servidor a PHP 7?

Publicado enDesarrollo web en mayo 2, 2018 10:00 am

En las últimas semanas PHP ha lanzado una nueva versión: PHP.7.2. Se trata de una de las mayores actualizaciones del lenguaje de programación desde PHP 5.6. Tal y como comentábamos hace unas semanas, con esta nueva versión de PHP llegan importantes mejoras de seguridad para todo tipo de aplicaciones; entre las que se incluyen los servidores cloud. Es por ello que para hacer que una página web o un servidor sean totalmente seguros es necesario actualizar la versión de PHP a, al menos, la rama 7.

Te recordamos que, enn el caso de PHP sus actualizaciones no se realizan de forma automática, sino manual. Por lo que para actualizar a PHP 7 es necesario adaptar el código y validarlo para asegurar que todo funciona correctamente.

Porqué actualizar a PHP 7

Con cada actualización de seguridad se solucionan las vulnerabilidades que se hayan encontrado en versiones anteriores. Esto no es solo aplicable a los servidores, sino también a cualquier página web,  aplicación o plataforma. Mantener los sistemas actualizados es la mejor manera de contribuir a garantizar la seguridad del sistema y dificultar el acceso a los atacantes. Además de que una web o un servidor con una versión obsoleta, en este caso de PHP, es muy posible que no funcione de forma correcta. Todo ello sin mencionar que la falta de actualización convertirá al servidor en vulnerable a todo tipo de ciberataques.

Evita que nadie pueda aprovecharse de los posibles agujeros de seguridad de tu lenguaje de programación pasándote a PHP 7. Así, además, se prolonga el tiempo de soporte del lemguaje, ya que las versiones anteriores a PHP 7 están a punto de quedarse sin soporte de seguridad. Algo que supondría un problema aún más grave para tu servidor o página web; puesto que no habría forma de saber si hay nuevas vulnerabilidades ni cómo corregirlas.

Más allá de la mejora de la seguridad, con PHP 7 se incorporan nuevas funciones que te ayudarán a crear código más ordenado. Asimismo, el consumo de recursos respecto a las versiones anteriores de PHP se reduce; al tiempo que mejoran los tiempos de respuesta del servidor.

PHP 7 en nuestros servidores

Por nuestra parte, en Linube, ya hemos actualizados todos nuestros servicios a la última versión de PHP. Así que lo más probable es que ya estés disfrutando de PHP en tu servidor cloud o plan de hosting.

Actualizar tu versión de PHP es una tarea imprescindible para evitar graves problemas de seguridad que, además de afectar a tu servidor y todos los datos alojados en él, o a tu web, podrían provocar la pérdida de tu servicio de alojamiento o de tu información. Si aún no cuentas con PHP 7, y no sabes cómo hacerlo, ponte en contacto con nosotros; te ayudaremos a actualizar tu versión de PHP.

 

 actualizar a PHP 7

PHP 7.1 presenta 5 nuevas funcionalidades

Publicado enDesarrollo web en abril 20, 2018 10:56 am

Creado en 1995, PHP es la principal alternativa para a la hora de desarrollar páginas web con grandes demandas de tráfico. También es buena opción para la configuración de cualquier tipo de proyecto web o servidor. PHP se ha convertido en uno de los lenguajes de programación más utilizado por los desarrolladores web gracias a su simplicidad y compatibilidad con la gran mayoría de sistemas operativos y servidores. Este año, se ha presentado PHP 7.1 con varias mejoras.

Las funcionalidades de PHP no han dejado de incrementarse y perfeccionarse, tanto que, recientemente, se ha presentado la versión 7.1. Con PHP 7.1, llegan algunas mejoras que permitirán reducir el consumo de recursos. Además, proporcionarán un mejor rendimiento web que en anteriores versiones.

Principales cambios de PHP 7.1

  1. Adiós a mcrypt. A partir de ahora, los desarrolladores tendrán que recurrir a OpenSSL ya que con PHP 7.1 desaparece la biblioteca mcrypt. De esta forma, se pone fin a las múltiples incompatibilidades y errores que generaba en las versiones anteriores.
  2. Parámetros ‘nullable’. Si PHP 7.0 permitía declarar los tipos, con PHP 7.1 también es posible indicarlos. Podremos indicar si éste es nulo y que sea considerado como un argumento o que pueda ser devuelto como un valor y no un error, como ocurría hasta el momento.
  3. Función ‘void’. A partir de ahora, es posible indicar que una función tiene un retorno de tipo void, especificando que dicha función no devolverá ningún tipo de valor.
  4. Constantes de clase visibles. PHP 7.1 incluye el soporte que permite la definición del nivel de visibilidad de las constantes de clase. Ahora, podrán ser privadas, protegidas o públicas, única opción de visibilidad hasta PHP 7.0.
  5. Multicaptura de excepciones. Esta funcionalidad permite capturar múltiples excepciones de jerarquías diferentes y gestionarlas como una sola sin tener que recurrir al copia-pega en del código. Así, el resultado será un código mucho más limpio.

Qué más incluye PHP 7.1

La última actualización de PHP incluye también mejoras que permiten la desestructuración de un array asimétrico, la introducción de un nuevo seudotipo denominado iterable o el soporte necesario para especificar claves en list e índices negativos de cadenas.

Si quieres conocer el resto de novedades de PHP 7.1, puedes consultar el documento oficial colgado en su página web. En él, se detallan todas las funcionalidades y se adjuntan ejemplos en código de cada una de ellas.

En Linube ya contamos con la nueva versión

Aprovechamos para informar que en Linube ya disponemos de la versión 7.1 de PHP en todos nuestros servidores cloud. El uso de PHP 7.1 no implica que PHP 5 deje de funcionar, si bien recomendamos la actualización y adaptación del código para beneficiarse de las nuevas funcionalidades que ofrece PHP 7.1.

PHP 7.2: mejoras en las funciones y aumento de la seguridad

Publicado enDesarrollo web en febrero 14, 2018 10:00 am

Es de sobra conocido que PHP es uno de los lenguajes de programación más utilizado para el desarrollo de todo tipo de aplicaciones, de ahí que se encuentre en actualización continua para adaptarse a las nuevas tecnologías y necesidades.  En las últimas semanas, han lanzado su última versión: PHP 7.2.

La nueva versión de PHP incluye diversas funciones y mejoras que te ayudarán a escribir código y a que se ejecute de una forma más rápida. Todo ello permite que se reduzcan los recursos necesarios para el desarrollo y mantenimiento de las aplicaciones. Asimismo, PHP 7.2 contribuye a aumentar la seguridad mediante librerías que no requieren de API externa.

Las mejoras de PHP 7.2

Entre las principales mejoras de este lenguaje backend se encuentra el cambio en la declaración del tipo de argumento. Esto ya estaba disponible en las mejoras de PHP 5, y progresó en PHP 7.0, pero en la última versión ha sufrido ligeras modificaciones. Con PHP 7.2 es posible declarar “object” como tipo de argumento o retorno en funciones.

PHP no permite variaciones en los tipos de parámetros de métodos heredados. Pero con la llegada de PHP 7.2 sí es posible omitir un tipo en una subclase (“type widening”) sin que se produzca un error de concordancia. De esta forma sería posible implementar tipos en los argumentos de librerías sin tener que modificar clases en otras librerías o aplicaciones que dependan de las mismas.

Por último, se añade la posibilidad de incluir coma final al utilizar la construcción “list()”.

Mayor seguridad

La última versión de PHP también incluye cambios en relación con la seguridad. El primero de ellos es la incorporación de Libsodium al núcleo. Libsodium es una librería multiplataforma y moderna para criptografía. Permite cifrar, descifrar, firmar y crear hashes. Por otro lado, PHP 7.2 incorpora soporte nativo para Argon2, un algoritmo de hashing, como alternativa a Bcrypt.

Funciones obsoletas

Aunque acaban de presentar la versión 7.2, desde PHP ya se comienza a hablar de algunos cambios que tendrá PHP 8.0. Todos ellos relacionados con funciones que se eliminarán y que ya recomiendan no utilizar.

  • function __autoload. Esta función fue reemplazada por por spl_autoload_register en PHP 5.1.
  • $php_errormsg. Con PHP 7.2 es recomendable utilizar error_get_last y error_clear_last en su lugar.
  • create_function(). Por diversos problemas de seguridad y debido a su bajo rendimiento, se recomienda utilizar “closures”.
  • parse_str () sin segundo parámetro. PHP comenzará a advertir cada vez que se use la función sin pasar por el segundo parámetro.
  • gmp_random(). En lugar de utilizar esta función deberá usarse gmp_random_bits() y gmp_random_rage().
  • assert(). Su resultado abre una vulnerabilidad de ejecución remota de código (RCE). Por ello, se recomiendael uso de zend.assertion ini.
  • Tampoco se recomienda el uso de mbstring.func_overload, (unset) cast, each() y $errcontext. Estas funciones han sido declaradas como obsoletas por resultar poco útiles.

Si PHP es uno de los lenguajes de programación más utilizados es, en parte, por su relación con WordPress, ya que el CMS está desarrollado con PHP. Pero, lamentablemente, la mayoría de usuarios de WordPress no acostumbra a actualizar su versión de PHP. De ahí que más de un 70% de las webs aún usen PHP 5.6 o incluso versiones más antiguas. Esto, además de ser un peligro de cara a la seguridad, puede ocasionar problemas de rendimiento.

Desde Linube recomendamos la actualización, al menos, a PHP 7 para aprovechar sus nuevas funcionalidades. De esta forma, tu web irá mucho más rápida y será capaz de ejecutar un mayor número de transacciones por segundo que en cualquier versión anterior.

Por nuestra parte, ya contamos con PHP 7.2 en todos nuestros servicios.

Lenguajes de programación con los que iniciarse en 2018

Publicado enDesarrollo web en diciembre 20, 2017 10:03 am

Si acabas de aterrizar en el mundo de la informática es posible que sólo con ver la variedad de lenguajes de programación que existen te estés empezando a arrepentir de tu decisión. Es cierto que existen múltiples lenguajes de programación y que cada uno de ellos requiere un aprendizaje prácticamente exclusivo. Pero una vez dentro, verás que manejar líneas de código no es tan difícil como parece. Se acerca el nuevo año y sabemos que aprender programación puede ser uno de los propósitos para 2018. Por ello, hemos seleccionado algunos de los mejores lenguajes de programación.

Code Studio

Es el lenguaje de programación desarrollado por code.org. La asociación sin ánimo de lucro que intenta visibilizar la importancia de aprender programación desde edades tempranas y que se convierta en una asignatura más en los colegios. Aunque esté especialmente orientado para niños, puede ser una buena opción si jamás has trabajado con lenguajes de programación. El objetivo de Code Studio no es enseñar un lenguaje de programación como tal, si no proporcionar las bases para iniciarse en otros lenguajes más complejos.

Code Studio con su sencilla interfaz permite crear juegos y aplicaciones mediante combinaciones de bloques. La forma en que se ordenen los elementos provocará una determinada acción. Además, puede integrarse con HTML5, de forma que el resultado pueda estar disponible a través de casi cualquier navegador y pueda compartirse a través de las redes sociales.

Python

Sí, el nombre de este lenguaje de programación viene por la admiración de su creador, Guido van Rossum, por el grupo de humoristas británico Monty Python. Lanzado en 1991, este lenguaje de programación de código abierto apuesta por una sintaxis que pueda leerse con facilidad. Cabe destacar que Guido van Rossum ha abandonado la supervisión del desarrollo de Phyton tras 30 años de crear el lenguaje; según sus palabras, ello se debe al cansancio que genera el proponer propuestas de mejora de Phyton que al instante son criticadas por programadores que además insinúan detestar sus decisiones. De ahí que lo hayan apodado como “el Dictador Benevolente de Por Vida” (BDFL).

Con Python los resultados empiezan a verse de forma casi inmediata. De ahí que sea uno de los lenguajes de programación con la curva de aprendizaje más rápida. Además, permite probar fragmentos de código incluso antes de integrarlo. Algo que puede resultar de gran utilidad tanto a quien ya tiene conocimientos de programación como a los recién iniciados. Esto es así ya que Python permite corregir algunos errores antes de que la página web esté en activo.

Java

Posiblemente el lenguaje de programación con más teorías acerca del origen de su nombre. Java fue creado a principios de los 90 para el desarrollo de aplicaciones receptoras de televisión. Su sintaxis está muy relacionada con C++, aunque Java únicamente se orienta a objetos, salvo alguna que otra excepción, y clases.

Java es uno de los lenguajes con mayor crecimiento. En gran medida por ser compatible con casi todos los dispositivos; desde smartphones, a navegadores web, servidores o incluso aplicaciones de escritorio. A diferencia de los que algunos creen, Java apenas guarda relación alguna con JavaScript. No tienen mayor relación más allá del nombre y el uso de una sintaxis a la que también recurren muchos otros lenguajes de programación.

PHP

PHP es uno de los lenguajes de programación más utilizado tanto para el desarrollo web como en el funcionamiento de servidores actualmente. Pese a sus más de dos décadas de vida siguen incorporándose nuevas funciones. Las últimas en la versión 7.1 de PHP, centradas en la reducción de consumo de recursos y mejorar el rendimiento de una página web o un servidor.

Algunas de las webs más famosas han sido desarrolladas con PHP, como Facebook o WordPress. Por lo que si tienes una página web que has desarrollado a partir de este CMS, tienes parte del trabajo hecho; además del mejor entorno para realizar pruebas. Eso sí, no te olvides de hacer una copia de seguridad antes de modificar nada. No vaya a ser que luego el experimento acabe saliéndote muy caro.

Nosotros te damos ideas, elegir por qué lenguaje de programación te decantas es ya cosa tuya.

Configurar wildcard domains conservando la variable de $_SESSION en php

Publicado enAdministración de Sistemas Dominios

Muchos os habréis fijado que en algunos servicios web se usan subdominios dinámicos (wildcard) para las cuentas de sus usuarios. Sin embargo, una vez configurados los subdominios dinámicos, tenemos un serio problema y es que, las variables de sesión por defecto se pierden cada vez que ejecutamos la aplicación web desde un subdominio distinto al que hemos utilizado para crear dicha variable de sesión. Es por ello que debemos configurar wildcard domains.

Podemos comprobar esto en algunos sitios web que no usan subdominios dinámicos pero, si hacemos login en su www.dirección.com, si después vamos a su dirección.com sin las ‘www’ nos encontramos con que no hemos iniciado sesión. El problema es similar y tiene la misma solución que en el caso de los wildcard domains.

Configurar Wildcard Domains

Vamos a explicar cómo solucionar este problema y cómo hacer funcionar subdominios dinámicos. Los pasos:

1 – Configurar el dns.
2 – Configurar el servidor web.
3 – Configurar bien el ámbito de las variables $_SESSION en la aplicación php para que se compartan las variables de sesión entre los subdominios.

Configurar el dns.

Basta con crear una entrada tipo host es decir, “A” apuntando a *.tudominio.com . También vale con crear un CNAME * apuntando al registro A del dominio principal (“tudominio.com”).

Si hacemos un ping a “loquesea.tudomino.com” debería ya resolver (a menos que tengas capado el tráfico ICMP claro).

Configurar el servidor web.

Apache httpd: debemos configurar en el vhost de nuestro dominio un ServerAlias que atienda a “*.midominio.com”.

Nginx: hay que configurar en la sección Server un valor server_name como “*.midominio.com”.

IIS: debemos dejar un sitio virtual sin headers y ese es el que atenderá las peticiones de vuestro wildcard dns, es la única forma.

Se ha discutido sobre este tema en el foro oficial de IIS y según los propios desarrolladores, aunque ha sido demandada durante años, no se piensa implementar dicha funcionalidad por ahora, ni siquiera en IIS7.

Nota: sólo podemos disponer de un sitio web sin headers por servidor web IIS.

Configurar nuestras variables de $_SESSION en php

El truco esta en configurar la directiva session.cookie_domain como “.midominio.com” (importante el . delante del dominio).

Podéis hacerlo en tiempo de ejecución, antes de llamar a session_start(); siempre que tengamos deshabilitado el autoarranque de sesiones en el php.ini (como es lógico y viene por defecto)

ini_set("session.cookie_domain",".midominio.com");
session_start();

 

¿Usas plesk?

Aquí te explicamos cómo configurar wildcard domains en servidores con el panel de control Plesk.

PDO en la próxima versión del driver de SQL Server para PHP

Publicado enDesarrollo web

Hace unos días podíamos leer que por fin el driver de PHP para trabajar con SQL Server desde PHP contará con soporte para PDO en su versión 2.0.

PDO (PHP Data Objects) es una extensión que permite el acceso a los datos para PHP 5 a través de una capa de abstracción. Esto permite que puedan hacerse consultas a la base de datos de PHP utilizando funciones propias del lenguaje de programación. La extensión fue desarrollada en 2003, aunque no fue estable hasta PHP 5.0 publicado en 2004. Aún tendría que pasar otro año para considerar a PDO estable y que incluyera su primera interfaz por defecto.

Aunque PHP no sea un lenguaje de programación orientado a objetos por sí mismo, sí permite esta funcionalidad. Gracias a la extensión PDO es posible utilizar funciones de extensión regulares para acceder a los datos. Esto es posible debido a la implementación de tecnología orientada a objetos.

Porqué usar PDO

Esta versión del driver de SQL Server es compatible con la API de PDO, aunque se sigue manteniendo la API nativa de SQL Server que existía hasta el momento. De esta forma se ofrece una compatibilidad absoluta entre las dos API. Además de haberse creado una capa común a ambas que permite disponer de las funciones de ambas APIs, tal y como se indica en el gráfico inferior.

La incorporación de este controlador de SQL Server es un gran avance en el desarrollo de la aplicación.  Y también para los desarrolladores que trabajan con PHP bajo entornos Microsoft. Algunos de los ORM más importantes están escritos en PHP; al igual que muchos CMS, como Drupal. Con PDO es más fácil integrar aplicaciones y añadir más funcionalidades a los frameworks más utilizados.

PDO-php-sqlsrv

Por nuestra parte,este servicio aún no está disponible, ya que la versión estable todavía no se ha publicado. En cuanto esté disponible, procederemos a implantar este driver en nuestros servicios de hosting, para ofrecerte siempre el mejor servicio.

Un vistazo a Doctrine 2

Publicado enDesarrollo web

Doctrine es un ORM que cada vez estamos usando más los que trabajamos con el framework Symfony para PHP. En los últimos días, se ha publicado Doctrine 2, la nueva versión del modelo de programación que permite transformar las tablas de las bases de datos.

Esta nueva versión de Doctrine está reescrita por completo en PHP 5.3. Esto permite mejorar su rendimiento de una forma notable y haciendo mucho más ágil su uso.

Jonathan Wage, impartió en Febrero de este año durante la conferencia Symfony Live 2010 una interesante charla presentando algunas de las novedades más interesantes que se recogen en esta nueva versión.

Las principales novedades de Doctrine 2

Doctrine 2 da la vuelta a su código, a los conceptos y también incorpora un nuevo workflow. Aunque tanto cambio pueda asustar en un principio, en esta ocasión solo trae cosas buenas. Y es que todos los cambios provienen de lo aprendido de Doctrine 1, por lo que la mejora del ORM es más que notable.

Por ejemplo, con Doctrine 2 se suplican los datos de su anterior versión y las consultan se ejecutan en un menor tiempo. Además, se incluye OOP,  nuevas queries e implementaciones que agilizar el cacheo de los resultados.

Para su desarrollo se ha utilizado PHP Unit 3.4.10, componentes Symfony YAML, Sismo o Subversion. Aunque todas estas incorporaciones han provocado cambios en la arquitectura, ahora será mucho más sencillo. Esto se debe a que, entre otras cosas, ya no habrá imposiciones del modelo de dominio.

Asimismo, es posible utilizar los sistemas de gestión de bases de datos (DBMS) a través de Sqlite, MySQL, Oracle o PgSQL. En la misma línea, la capa de abstracción de la base de datos ha mejorado considerablmente respecto a Doctrine 1; tanto en relación a la API como a su estructura, incorporándose además en PHP 5.3.

Aspectos a tener en cuenta

Otros elementos a considerar en relación a Doctrine 2 son:

  • El modelo de dominio no viene impuesto por Doctrine, sino que está definido en PHP. Esto supone una mejora notable.
  • Mayor facilidad para entender lo que está pasando en la aplicación, en vez de dejar que la ‘magia’ de Doctrine 1 ocurra.
  • Las entidades no requieren de la extensión de la clase base.
  • Aunque realices múltiples transacciones se ejecutarán como si fuse una. Así, los tiempos respecto a PHP se reducen, ya que aquí las transacciones se efectúan individualmente.

Si quieres saber más acerca de Doctrine 2, Jonathan Wage ha publicado un documento con los cambios más significativos de la nueva versión e Doctrine.

Trabajando con Windows Azure y PHP primer deploy

Publicado enDesarrollo web Sistemas TI

Una de las primeras dudas que nos entran a la hora de pensar en Azure, es si Windows Azure es algún tipo de instancia virtual a la que podemos acceder vía escritorio remoto y configurar lo que necesitemos en nuestro servidor. Sentimos decirte… que no.

Azure es un concepto distinto a esto; un planteamiento o paradigma nuevo a la hora de pensar en el alojamiento de nuestras aplicaciones web en internet. Exige en un principio estar abiertos a un cambio, un cambio necesario que se impondrá sin ninguna duda durante los próximos años.

Azure es un entorno formado por varios roles a los que subiremos según el tipo de rol de nuestra instancia, nuestra aplicación, nuestra base de datos, nuestros archivos estáticos y nuestros procesos backend. Todo está pensado para ser modular y escalable sin provocar dolores de cabeza al desarrollador. Estos roles se comunicarán entre sí mediante Rest vía Http o sockets TCP/IP. El coste será por horas de servicio y, aunque las instancias estén paradas se seguirán cobrando.

En Windows Azure principalmente tenemos los siguientes roles:

  • Web Role: Destinado a servir aplicaciones web frontales, escritas en .net, php, ruby, perl, python o cualquier lenguaje que soporte Fastcgi.
  • Worker Role: Destinado a servicios que funcionen en el backend, los primeros que se nos vienen a la mente pueden ser mysql o memcached.

Adicionalmente tenemos estos otros servicios en Windows Azure:

  • SqlAzure: Una versión de Sql Server 2008 implementada en Azure.
  • Storage: Un repositorio de archivos con el que podremos trabajar desde nuestras aplicaciones web.

En este primer acercamiento me voy a centrar en el WebRole y por la naturaleza de nuestra aplicación web, será de tipo FastCgi para poder ejecutar aplicaciones php.

Para programar en php bajo entorno Microsoft uso Visual Studio 2008 + vs.php o netbeans (en este caso usaré lo primero). Si no usas visual studio, dispones de herramientas que te permiten trabajar de una forma similar pero utilizando Eclipse. Recuerda que si estás en la universidad o has terminado hace poco, existen descargas gratuitas completas de Visual Studio y horas de servicio Azure en dreamspark.

Lo primero es crear un servicio tipo Windows Azure en el panel de control de la plataforma azure.

windows azure-platform

Una vez creado el servicio vemos que disponemos de dos entornos, uno de integración y otro de producción. Nos cobrarán por tener instancias en ambos entornos, estén levantadas o no.

windows azure-frontal

Para poder trabajar con Azure desde visual studio, nos tenemos que descargar el SP1 y las Windows Azure Tools for Microsoft Visual Studio que nos permitirán disponer de un entorno basado en IIS similar a azure.

Una vez hecho esto, en Visual Studio podremos seleccionar un tipo de proyecto Windows Azure Cloud Service.

Tras seleccionar el tipo de proyecto, nos preguntará qué rol vamos a asignar a este proyecto. En nuestro caso al ser una aplicación php, le asignamos el rol WebCGI role.

windows azure-visual studio

windows azure-proyecto

Una vez completado este paso, se nos crearán dos proyectos en el árbol de soluciones de Visual Studio y se nos mostrará el contenido del archivos de configuración del WebRole: el Web.roleconfig. Este es un archivo xml tipo al Web.config y en el que aparece entre las llaves fast cgi el siguiente comentario:


<!-- Set the "Enable Full Trust" property to true on the corresponding
 Web Role in the Cloud Service project.
 -->

 <!-- Define the fastCgi application here. The application must be located
 under the role root folder or subfolder. The handler is defined in
 the Web.config file.

 Ensure that all of the handler binaries have their "Build Action" Solution
 Explorer file property set to "Content".

<application fullPath="%RoleRoot%approotcgi-handler.exe" arguments="arg1 arg2 ..." />
 -->

Nos pide que realicemos las siguientes tareas:

  • Que subamos la aplicación fastCGI encargada de procesar las peticiones a nuestra aplicación. Los binarios de la aplicación deben estar en el directorio raíz de nuestro proyecto (representado por la constante %RoleRoot%approot) y debemos configurar el handler en el web.config de la aplicación.
  • Tenemos que activar la propiedad “Full Trust” en la configuración del WebRole.

Vamos a ello:

1) Primero nos descargamos los binarios o instalamos el msi (te recomiendo lo segundo) la última versión de php en windows.php.net

2) Una vez descargado o instalado php, copiamos sus binarios tal cual al directorio raíz de nuestro proyecto (a un directorio llamado /php). Si has instalado php, normalmente te dejará los binarios en “c:archivos de programaphp”.

3) Si ya tenemos el directorio php en nuestra raíz del proyecto, indicaremos donde se encontrará la aplicación en el Web.roleconfig


<?xml version="1.0"?>
<configuration>
 <system.webServer>
 <fastCgi>
    <application fullPath="%RoleRoot%approotphpphp-cgi.exe" arguments="" />
  <t;/fastCgi>
</system.webServerp>
</configuration>

4) En el web.config descomentamos las líneas dedicadas al Handler FastCgi y las dejamos como siguen:

<add name="FastGGI Handler"
 verb="*"
 path="*.php"
 scriptProcessor="%RoleRoot%approotphpphp-cgi.exe"
 modules="FastCgiModule"
 resourceType="Unspecified" />

5) En las propiedades del Rol WebCgi nos aseguramos que está activada la propiedad Full Trust de .net

windows azure-full trust

6) Subimos nuestra aplicación php. En este caso, subiré una sencilla aplicación que hará una tirada basándose en el bastante poco óptimo sistema aleatorio de php para otorgarme puntos en diferentes niveles de ataque y defensa.

Después de hacerlo, escribirá el resultado en un archivo de texto pero estará disponible tan sólo de forma temporal. Si quisiéramos almacenarlo de forma persistente, deberíamos almacenarlo en Azure Storage.

El código es el siguiente:


<lt;?php
$poderes = array(
 "resistencia al fuego",
 "resistencia al frio",
 "aguante",
 "formulas de excel",
 "mirada penetrante",
 "escalabilidad",
 "ROI",
 "SEO",
 "SEM",
 "SMO",
 "pensamiento deslumbrante");

$resultado = null;

for($i=1;$i<10;$i++){

 $puntos     = $i*1E2*rand(5,11);
 $poder      = $poderes[rand(0,10)];
 $resultado .= $puntos . " puntos en " . $poder;
 $resultado .= "n";

 echo "Asier ha obtenido " . $puntos . " puntos en " . $poder . "<br/>";

}

$fp = fopen("resultados.txt","w+");
fwrite($fp, $resultado, strlen($resultado));
fclose($fp);

7) Si estamos ejecutando Visual Studio como Administrador podemos compilar el proyecto. Sino, lo cerramos y ejecutamos Visual Studio con privilegios de Administrador. Una vez compilada la aplicación se nos abrirá nuestro navegador ejecutando nuestra aplicación php.
Por defecto, si no le indicamos un archivo raíz, nos dará un error que nos detalla que no tenemos permiso para listar el directorio raíz.
Para que nos cargue un archivo inicial, podemos agregarle la clave defaultDocument a la configuración system.webServer en el web.config.

<system.webServer>
<defaultDocument enabled="true">
  <files>
     <add value="index.php"/>
   </files>
 </defaultDocument>

8) Vale en principio tenemos todo funcionando en local, ya que vemos que se ejecuta la aplicación y que escribe las puntuaciones en el archivo de texto.
Ahora necesitamos subir todo esto a Azure.

Si volvemos al panel de control de windows.azure.com, y pulsamos en el botón deploy en el entorno de integración vemos que se nos pide subir dos archivos; El paquete de la aplicación y el archivo de configuraciones.

windows azure-panel de control

Desde Visual Studio podemos generar muy fácilmente estos dos archivos al hacer click en la opción Publicar, que aparece al hacer click en el botón derecho sobre el proyecto de Azure.

Cuando lo hagamos, se nos abrirá la ventana en el navegador del Panel de control de Azure y una ventana en el explorador de windows con la ruta donde se han generado los archivos.

Una vez subidos le damos a Run, e iniciará la instancia. Tarda varios minutos.

Tras la espera podemos ejecutar nuestra aplicación desde la ruta que nos indique el panel de control.

windows azure-ruta

Hay otras herramientas de las que podemos beneficiarnos al crear aplicaciones en Azure, una de ellas es el gran módulo de rewrite de IIS7 con el que podemos utilizar urls amigables en nuestras aplicaciones web.

Vamos a hacer que nuestra aplicación otorgue le de poderes a un usuario que le indiquemos por url.

Para ello tenemos que añadir una regla de rewrite en el web.config, dentro de system.webserver, en la que le indiquemos por la ruta /user/[nick] se le pasará como parámetro GET al script index.php.


<rewrite>
 <rules>
    <rule name="Rewrite">
       <;match url="^user/([a-z]+)" />
     <action type="Rewrite" url="index.php?user={R:1}" />
    </rules>
 </rules>
</rewrite>

En la aplicación recuperamos el parámetro GET. Tendríamos el siguiente código en el index.php


<?php
$poderes = array(
  "resistencia al fuego",
  "resistencia al frio",
  "aguante",
  "formulas de excel",
  "mirada penetrante",
  "escalabilidad",
  "ROI",
  "SEO",
  "SEM",
  "SMO",
"pensamiento deslumbrante");

$resultado = null;

$usuario = "asier";
if(!empty($_GET) ; is_array($_GET) ; key_exist("user", $_GET)){
  $usuario = ucfirst($_GET["user"]);
}

for($i=1;$i < 10;$i++){

  $puntos     = $i*1E2*rand(5,11);
  $poder      = $poderes[rand(0,10)];
  $resultado .= $puntos . " puntos en " . $poder;
  $resultado .= "n";

  echo $usuario . " ha obtenido " . $puntos . " puntos en " . $poder . "<br/>;

}

$fp = fopen("resultados.txt","w+");
fwrite($fp, $resultado, strlen($resultado));
fclose($fp);

Una función que me resulta imprescindible también es poder visualizar los logs de nuestra instancia. Esto podemos hacerlo desde el panel de control de Azure y una cuenta de storage.

Con esto hemos visto como ejecutar aplicaciones web sencillas php en Azure, en las próximas entregas veremos como usar los Worker Roles, SQL Azure y cómo trabajar con php azure para almacenar y recuperar archivos en Azure Storage.

Cosas que echamos en falta en Windows Azure

Entre las cosas que he echado en falta, y desconozco por ahora si Azure las permite de forma nativa o con herramientas de terceros, pueden ser las siguientes:

  • Un módo más ágil para hacer deploy de nuestras aplicaciones. Los desarrolladores web php estamos acostumbrados a usar subversion o rsync para hacer deploy de nuestras aplicaciones. El hecho de tener que generar un paquete y luego subirlo, es un paso que estaría genial si se automatizase. Lo más lógico podría ser que desde la opción “publicar” de visual studio se subiesen los cambios al entorno de integración de azure. O al menos, a Azure Storage; para que luego se haga el deploy definitivo con un botón desde el panel de control web de azure.
  • Posibilidad de personalizar el directorio público a la que se tendrá acceso desde el servidor web. En algunos frameworks como Symfony, el directorio público no es el directorio raíz de la aplicación por seguridad.
  • Algún modo para gestionar los permisos de los directorios de la aplicación. No es para nada seguro tener permisos de escritura en todos los directorios de nuestra aplicación.
  • Posibilidad de ejecutar scripts php o powershell vía cmd en la instancia. Imaginemos que necesitamos vaciar un directorio en el que almacenamos archivos de caché o archivos temporales, podemos hacerlo mediante algún script que se ejecute vía web, pero igual puede interesarnos realizar estas gestiones o alguna otra mediante línea de comandos.

Un vistazo al driver php_sqlsrv para trabajar con bases de datos Sql Server 2005 o superior en php

Publicado enDesarrollo web Sistemas TI

Desde hace algunos años el driver que se facilita en los paquetes de PHP por defecto está considerado deprecated y no se aconseja su uso. Sobre todo desde que fue publicada la última versión: SQL Server 2005. En su lugar, por suerte, disponemos del driver php_sqlsrv. Una extensión creada desde Microsoft con la que podemos aprovechar de una forma mucho más avanzada este expléndido motor de bases de datos.

Traducción nativa de los datos a utf-8

Por empezar a comentaros, una de las características que más me han gustado en la versión 1.1 del driver php_sqlsrv, es la traducción nativa y transparente de la codificación de los datos desde utf-8 a ucs-2 y viceversa. Para quien haya tenido un mínimo de experiencia desarrollando aplicaciones en internet, la importancia de usar codificación UTF-8 es clave. Nos puede evitar pasar varias noches sin dormir al encontrarnos multitud de problemas al integrar aplicaciones, consumir datos de fuentes externas o migrar a otras plataformas. Es un detalle que los desarrolladores de esta librería le hayan dado prioridad a esta caracteristica vital para desarrolladores de aplicaciones PHP.

Para activar esta característica, que os recomiendo que lo hagáis, basta con especificar el enconding en el array de conexión:

$params = array(

"UID" => "usuario",
"PWD"  =>"password",
"Database" => "base_de_datos"

);

$params["CharacterSet"] = "utf-8";
$conexion = sqlsrv_connect( "nombre_de_la_instancia", $params);

Campos de tipo fecha recuperables como cadenas

Por defecto el driver nos permite recuperar los datos de tipo datetime, Date, Time, DateTime2 y DateTimeOffset como datos DateTime. Normalmente nos puede interesar más tratarlos como si fuesen cadenas desde php y para ellos, el driver nos provee de una forma de hacerlo.

Basta con inidicarlo en el array de conexión:

$params = array(

"UID"=> "usuario",
"PWD" = > "password",
"Database" => "base_de_datos",
"CharacterSet" => "utf-8"

);

$params["ReturnDatesAsStrings"] = true;

$conexion = sqlsrv_connect( "nombre_de_la_instancia", $params);

Autenticación de sistema o de usuario de Sql Server 2005

A la hora de conectarnos a una instancia, podemos hacerlo mediante autenticación de sistema o de usuario de Sql Server según esté establecido en la configuración de la instancia.

Aunque para una aplicación web, especialmente una aplicación que tenga como destino dar servicio en internet, nos interese aplicar una autenticación de usuario de Sql Server, el driver dispone de soporte nativo para reconocer el usuario con el cual estamos ejecutando la aplicación web y usar sus credenciales para realizar la autenticación.

Para realizar una autenticación de sistema no necesitamos indicar usuario ni contraseña, tan sólo la base de datos:

$params =nbsp; array("Database" => "base_de_datos");

$conexion = = sqlsrv_connect( "nombre_de_la_instancia", $params);

Limpieza de parámetros en las consultas

Uno de los puntos más vulnerables en una aplicación web siempre ha sido la forma en la que realizamos las consultas a la base de datos.

Para ayudarnos a securizar los datos que interoducimos en las consultas, disponemos de un mecanismo muy sencillo de limpieza.

$sql = "INSERT INTO usuarios (email, password) VALUES (?,?);";

//creamos el array de parámetros
$params = array(strtolower($email),md5($pass));

//realizamos la consulta, pasándole los parámetros a blindar
$stmt = sqlsrv_query( $conexion, $sql, $params);

Instanciación de objectos específicos en los resultados de una consulta

Otra opción muy útil que nos provee el driver es la posibilidad de especificar un objeto que será instanciado como resultado de una query.

class User{
 public $object_id= null;
 public $user_id = null;
 public $email = null;
 public $password = null;

 public function __construct($id){
   $this->object_id = $id;
 }

}

$sql = "SELECT TOP 1 user_id,email FROM users WHERE user_id = ? ";

$stmt = sqlsrv_query( $conexion, $sql, array($user_id));

if($stmt!==false){

 $i=0; $items = array();

 //cada variable $object será una instancia del objeto User
 while( $object = sqlsrv_fetch_object( $stmt, "User", array($i)))
 {
  $items[] = $object;
  $i++;
 }

 sqlsrv_free_stmt($stmt);
 $stmt=null;
}

Constantes para la conversión de tipos php a tipos nativos de Sql Server

En algunos casos necesitamos convertir el parámetro al tipo de dato nativo de sql server que necesitemos evaluar en la consulta. Como puede ser el caso de los tipos DateTime.

Para ello, el driver php_sqlsrv dispone de una serie de constantes que nos ayudan a hacerlo.

$sql = "SELECT user_id FROM usuarios WHERE created_at >= ? AND user_id < ?;";

//creamos el array de parámetros, cada elemento será un array en el que especifiquemos la constante del tipo que necesitamos
$params = array(array($date, null, null, SQLSRV_SQLTYPE_DATETIME), array($user_id,null));

//realizamos la consulta, pasándole los parámetros a blindar
$stmt = sqlsrv_query( $conexion, $sql, $params);

Opciones que echamos en falta en el driver php_sqlsrv

Soporte para PDO:

PDO es una capa de abstracción cuyo objetivo principal es aislarnos de las particularidades de cada driver disponible. Todo ello con el objetivo de atacar los diferentes motores de bases de datos que existen.

Muchos ORMs como doctrine y Propel lo usan. No disponer de soporte para PDO supone una barrera para algunso de los CMS o Frameworks más usados. Además de un trabajo adicional para los desarrolladores a la hora de necesitar utilizar sql server en sus proyectos. Irónicamente, el antiguo driver a pesar de estar obsoleto soporta PDO.

Posibilidad de usarlo como un Objeto:

Se agradece ir abandonando poco a poco el paradigma estructurado en php y algunas librerías como mysqli; que nos permiten usarlas como si se tratase de un objeto.

Sería una muy buena característica para este driver.

Crear una consulta select count relativa a una select con PHP

Publicado enDesarrollo web

En alguna situación concreta, es posible que necesitemos hacer una consulta select count. Especialmente cuando queremos hacer listados con consultas que tienen muchos joins, condiciones where, orders o similares. Por supuesto, para realizar las paginaciones, es necesario que posteriormente cacheemos dichas consultas.

Si generamos este tipo de consulta select count de forma dinámica lo habitual es hacer un count contra una subquery. Una subquery que sea esa misma consulta pero sin los limits. Algo parecido a esto y que está totalmente desaconsejado:


SELECT count(*) FROM ( SELECT ...la query sin los limits) as tuplas

Consultando mediante funciones

Esto puede ocasionar serios problemas de rendimiento, sobre todo si la consulta contiene, por ejemplo, cláusulas de tipo ORDER.

Para mejorar esto podemos hacer uso de las funciones strrpos y substr de PHP. Estas funciones se encargan de encontrar la última coincidencia de una cadena o carácter en una cadena dada. Cuando la han localizado, parten esa cadena dada según unos límites que hayamos establecido previamente.

De esta forma podemos tener una consulta count para nuestra query principal, sin tener que reescribir lo mismo dos veces.

En primer lugar, tenemos que eliminar todos los caracteres en una cadena contenida en $query. Desde el final, hasta la última coincidencia de la palabra ORDER. Es decir, contando desde el principio. Esto hará que eliminemos de la query original los últimos ORDERs y LIMITs.


*/ $count_query = substr($query,0,strrpos($query,"ORDER"));

Seguidamente, eliminamos todos desde el principio de la query hasta el último FROM que se haya encontrado:


*/ $count_query = substr($count_query,strrpos($count_query,"FROM"),strlen($count_query));

Finalmente, tendremos que agregar la sentencia COUNT a la query


*/ $count_query = "SELECT COUNT(*) as total ".$count_query;

De esta forma, podremos crear este tipo de consultas en PHP de una forma limpia y ordenada. Además, el rendimiento de la web o el servidor no se verá afectado.

Script para ayudarte a migrar de php5.2 a php5.3

Publicado enDesarrollo web

¿Ya cuentas con la última versión de PHP? Si aún no has realizado el cambio, estás tardando, y mucho. Migrar de PHP nos aporta muchísimas ventajas que no deberíamos dejar olvidadas.

Como en la nueva versión de php algunas de las funciones más usadas de php se consideran deprecated, se han añadido nuevas funcionalidades en PHP 5.3.

Una vez más, debemos agradecer a todos aquellos desarrolladores su esfuerzo de mejorar y poner al servicio de todos sus extensos conocimientos. Stanislav Malyshev se ha hecho un script que nos avisa de posibles incompatibilidades en nuestro código. Dicho script es una utilidad de línea de comandos que puede buscar código problemático en un archivo php o en un directorio.

Descarga Script para migrar de PHP

El script lo podéis descargar de github en este enlace.

Mejoras de PHP 5.3 que todo programador debería conocer

Publicado enDesarrollo web

¿Eres programador PHP? Entonces deberías actualizarte a la nueva versión de php y aprovecharte de sus mejoras. Con PHP 5.3, el mismo código en php 5.3 se ejecuta un 50% más rápido que un código escrito en php 5.2. Unido a la mejora del rendimiento unido a la mejora en cuanto seguridad es lo que debería motivar a cualquier desarrollador php a actualizarse a la nueva versión. Además pueden surgir problemas en el código escrito en versiones anteriores.

Entre los cambios más importantes que podemos encontrarnos, están los siguientes:

1. Las short tags de php están obsoletas

Ahora usar <? o <?=$variable dará error tipo DEPRECATED e interrumpirá la ejecución de la aplicación web.

Esto era recomendable desde hace varios años para evitar conflictos en documentos xml, que empiezan con dichas tags.


//el siguiente código dará error
<? echo "hola"; ?>
<?=$di_hola ?>

//el código correcto es el siguiente
<?php echo "hola"; ?>
<?php echo $di_hola; ?>

2. Nueva constante __DIR__

Esta nueva constante sirve para reemplazar el típico código dirname(__FILE__) que nos devuelve el nombre del directorio en el cual se encuentra el script desde el que se invoca.

3. Mejoras en el operador ternario

Ahora bastará indicar dos opciones para una situación en la que una variable tendrá un valor o no.

Php tomará como buena la opción que tenga un valor true o no sea empty().


echo true?:false;//true

echo false?:true;//true

echo ""?1;//1

echo 0?:2;//2

$array= array()?:array(1);//la variable array contendrá -> array(1);

echo strlen("")?:strlen("a");//1

 4. mySQLInd

Librería cliente entre mysql y php, que no requiere otras librerias clientes intermedias.

Funciona de una forma transparente al programador y de una forma mucho más eficiente que libmysql.

El único inconveniente es que no tiene soporte completo actualmente para PDO, solo para la interfaz mysqli.

*NOTA: este cliente guardará por defecto datos en campos tipo PASSWORD de mysql con compatibilidad superior a mysql4, se elimina el soporte para formatos anteriores dando un error del tipo

“mysqlnd cannot connect to MySQL 4.1+ using old authentication.

 Archivos .user.ini y distintas configuraciones de php para un mismo php.ini

Se pueden usar archivos .user.ini para configuraciones de fastcgi/cgi similares a .htaccess.

Ahora los archivos php.ini podrán contener archivos .ini adicionales con configuraciones especializadas para un directorio concreto.

 5. Namespaces

Los namespaces era una funcionalidad muy esperada por los desrrolladores de php. Ahora gracias a ellos podremos tener un código muchos más limpio y ordenado.

Php 5.3 y superiores soportarán múltiples namespaces por archivo.

Ejemplo de código sin usar namespaces

function common_hacerAlgo(){
/**/
}

class Common_Mailing
{
/**/
}

define('COMMON_CONST','');

common_hacerAlgo();

new Common_Mailing();
COMMON_CONST;

Mismo ejemplo con namespaces


namespace COMMON;

function hacerAlgo()
{}

class Mailing
{}

const CONS = '';

use COMMON as cm;

hacerAlgo();

new Mailing();

CONST;

Actualízate ya a PHP 5.3

¿No dispones aun de la última versión de PHP? En el siguiente artículo te contamos paso a paso cómo migrar de PHP.

Cambiar el modo de ejecución de PHP a FastCGI en Plesk Windows

Publicado enSistemas TI

En IIS, el servidor web de Microsoft, es muy recomendable cambiar la forma en que se ejecutan las aplicaciones PHP a FastCGI. Ya que esta acción mejora notablemente el rendimiento del servidor web. Además, en entornos en los que hay corriendo más de una aplicación PHP, esto nos permite separar los procesos facilitando la administración. Asimismo, permite aislar una aplicación de otra.

Si utilizas el panel de control Plesk, éste utiliza ISAPI por defecto para la ejecución de las aplicaciones; un sistema que permite la elección entre CGI y FastCGI. Si dudas entre cuál de las dos utilizar, nuestro consejo es siempre utilizar FastCGI. A no ser que no haya otra alternativa.

Establecer PHP a FastCGI por defecto

Para establecer “FastCGI” por defecto en el panel de control Plesk en Windows, primero es necesario establecerlo en el registro. Para ello:

En el registro de Windows vamos a la siguiente ruta:

HKEY_LOCAL_MACHINESOFTWAREPLESKPSA ConfigConfig

Una vez allí, establecemos:

PLESKCP_PHP_MODE -&gt; fastcgi

A continuación, vamos a la consola (CMD). Desde el directorio %plesk_dir% deberemos ejecutar el siguiente comando. Esto servirá para que los cambios que se han introducido en el panel de control Pesk de apliquen correctamente.

reconfigurator.exe /check=Services

Configuración rápida de Virtual Host en Apache

Publicado enDominios Sistemas TI

Si has decidido pasarte a LAMP, la infraestructura de internet open source compuesta por  Apache + PHP + MySQL, es posible que, cuando hayas acabado la instalacióin, te veas en la necesidad de crear alojamientos virtuales, o virtual host, para nuestros dominios. Apache guarda los archivos de configuración de los Virtual Host en  /etc/apache2/vhosts.d/ . Por lo que, si no hemos configurado ninguno allí veremos las plantillas que podemos usar como base (una con SSL y otra sin SSL).

Configurar Virtual Host en Apache

Para que entenderlo sea más sencillo, vamos con un ejemplo. Aquí, vamos a crear un archivo de configuración para Linube utilizando la distribución de Linux OpenSuse.

En primer lugar, tenemos que movernos al directorio de configuración virtual host. Puedes hacerlo de la siguiente manera:

cd /etc/apache2/vhosts.d

A continuación, copiamos la plantilla a un nuevo archivo:

cp vhost.template linube.conf

Seguidamente, hacemos lo mismo en otra distribución, que seguramente sea /var/www/vhosts/

mkdir -p /srv/www/vhosts/linube/

Llegados a este punto, es importante tener en cuenta que el archivo de configuración debe terminar con el sufijo “.conf”. De no ser así, Apache no podrá leerlo y no se crearán los alojamientos virtuales que necesitamos para nuestros dominios.

Cuando ya esté creado el host, deberemos editarlo y sustituir el dominio de ejemplo “dummy-host.example.com” por el nuestro. Además, también deberemos modificar las rutas, que en nuestro ejemplo es /srv/www/vhosts/linube/. Y asegurarnos, sobre todo, que se establece correctamente el DocumentRoot y donde dice <Directory “/srv/www/vhosts/dummy-host.example.com”>

Finalmente, bastará con reiniciar Apache para que se apliquen correctamente los cambios que hemos introducido.

/etc/init.d/apache2 restart

Instalar extensión php-memcached en Suse Linux

Publicado enDesarrollo web Sistemas TI

PHP-memcached es un sistema que permtie almacenar datos en la memoria RAM. Información que puede solicitarse utilizando las librerías de los diferentes lenguajes de programación a través de cadenas hash. Así, no será necesario buscar en la base de datos, ya que la información estará disponible en esta memoria. De esta forma, las solicitudes se sirven en un período de tiempo menor.

Aunque este tutorial está escrito pensando en una distribución Suse y openSuse, se podría aplicar a otras como debian. Antes de nada, tenemos dos opciones a elegir: php-memcached o php-memcache. Las dos funcionan igual en la capa de programación php, pero tienen las siguientes particularidades:

Php-memcache: Es la extensión más antigua de las dos, no requiere librerías adicionales.

Php-memcached: Es la extensión más nueva, pero desarrollada por Andrei Zmievski (desarrollador del core de php) y requiere libmemcached. Yo he elegido esta, porque me da más confianza que Andrei sea el responsable de su desarrollo.

* Nota: recuerda que si usas symfony 1.2 o inferior, debes usar la extensión más antigua, php-memcache.

Instalando php-memcached

Comencemos pues descargando la extensión libmemcached y la compilamos.


wget http://download.tangent.org/libmemcached-0.35.tar.gz

tar -xvf libmemcached-0.35.tar.gz

cd libmemcached-0.35/

/configure

make

make install

Ahora nos tendríamos que bajar la extensión php-memcached del sitio web pecl, pero antes debemos instalar las librerías de desarrollo de php, para poder compilar dicha extensión.

#instalamos las librerías de desarrollo de php
zypper install php5-devel

#ahora nos bajamos la extensión de pecl
wget http://pecl.php.net/get/memcached-1.0.0.tgz
cd memcached-1.0.0/

#hacemos un phpize para generar el configurador
phpize

#compilamos
/configure
make
make install

Por último debemos crear el archivo /etc/php5/conf.d/memcached.ini e indicar lo siguiente en él para que php active esta extensión:

extension=memcached.so

Ahora basta con reiniciar el servidor web para disponer de esta extensión habilitada.