944 063 154

Blog

Etiqueta: PHP

Ya disponible PHP 7.3 en nuestros servicios con Plesk

Publicado enDesarrollo y Programación en diciembre 26, 2018 10:00 am

Hace unas semanas hablábamos de la necesidad de actualizar el código de tus aplicaciones y servidores a versiones de PHP que al menos cuenten con soporte de seguridad. De esta forma, evitarás que cualquier vulnerabilidad encontrada en una versión obsoleta pueda poner en peligro tus sitios web. Pero, si quieres hacerle a tu web un buen regalo, pásate a PHP 7.3, la ultimísima versión del lenguaje de programación.

Las principales novedades de PHP 7.3

Como viene siendo habitual, con cada actualización de PHP se establecen cambios en la sintaxis, se añaden características nuevas y se marcan como obsoletas algunas funciones. En su empeño por mejorar y refinar la escritura de código y la velocidad de la rama 7.x. Estas son algunas de las novedades que introduce PHP 7.3:

  • JSON_THROW_ON_ERROR. Si utilizas ficheros JSON, esta nueva opción para controlar los errores en una cadena JSON te ayudará a detectarlos y escribirlos con mayor facilidad.
  • Setcookie(): SameSite [Lax, Strict]. Para evitar ataques CSRF, PHP 7.3 incorpora una función que permite saber quién genera una cookie, algo que es de gran utilidad para ayudarte a cumplir con el RGPD. Con esta función una cookie podrá ser leída desde otros dominios si contiene Lax; y si contiene Strict solo podrá ser leída desde el mismo dominio.
  • is_countable(). Con esta nueva función procesar un array con datos es mucho más sencillo ya que indica si los valores contenidos en el parámetro pueden contarse o no.
  • array_key_first() y array_key_last(). Para extraer de forma rápida la primera y la última clave de un array.
  • FFI (Interfaz de Función Externa) para que se pueda escribir código C dentro de los scripts de PHP; además de permitir acceder a las funciones o variables de este otro lenguaje de programación. Con esta nueva funcionalidad, el código C que escribas dentro de un script de PHP tendrá un mayor rendimiento que el código PHP nativo.

Mejoras y funciones obsoletas

En cuanto a mejoras,

  • La sintaxis Heredoc y Nowdoc para pintar textos es mucho más flexible.
  • La coma final en los valores de función se considera un error menor. Con PHP 7.3 si en una lista de parámetros queda olvidada una coma final, es decir sin que le siga ningún valor después, dejará de dar error.
  • list() incorpora la asignación por referencia de las variables dentro de una misma función.
  • Hash Argon2, una función incluida en versiones anteriores, incorpora tres variantes que ayudarán a evitar ataques de cracking.
  • Soporte actualizado para SQLite.
  • Nuevas formas para obtener información sobre las interfaces de red.
  • Nuevas funciones para integrar más características de LDAP.

Y como funciones obsoletas:

  • Image2wbmp() será reemplazada por imagewbmp ( ).
  • Los subfiltros de FILTER_VALIDATE_URL que forzaban al uso de scheme y host.
  • Constantes case-insensitive. Aunque ya muy poco utilizada, en PHP 7.3 se acaba finalmente con las constantes que no distinguen entre mayúsculas y minúsculas.
  • Todos los alias de función de mbstring sin documentar serán considerados obsoletos.

Aunque ya hemos incluido PHP 7.3 en nuestros servicios con Plesk y la opción está disponible entre la lista de versiones que puedes utilizar, algunos CMS pueden presentar incompatibilidades con PHP 7.3. Por ejemplo, WordPress aún no es compatible con la última versión de PHP.

Como siempre, este tipo de cambios es recomendable hacerlo en un entorno de pruebas y nunca en producción. Así que, si quieres probar a actualizar tu WordPress a PHP 7.3, hazlo en una página de prueba. De esta forma en el caso de que el tema o algún plugin cause incompatibilidades con la versión de PHP, evitarás que toda la web se rompa.

En el caso de que no cuentes con panel de control Plesk y quieras actualizar el código a PHP 7.3, ponte en contacto con nosotros para que te asesoremos sobre este cambio.

PHP 5.6 y PHP 7.0 se quedan sin soporte de seguridad

Publicado enDesarrollo y Programación en noviembre 28, 2018 10:17 am

Debido a la constante aparición de vulnerabilidades, la necesidad de introducir nuevas funcionalidades y a la importancia de mejorar el rendimiento de aplicaciones y servidores, las versiones de los lenguajes de programación, frameworks o cualquier otro servicio están en constante actualización. Pero, a pesar de que los servicios vayan mejorándose y solucionando vulnerabilidades, los usuarios no suelen actualizarse con tanta facilidad. Lo que supone un gran riesgo ya que las versiones van abandonándose. Y este es el caso del fin de soporte de seguridad de PHP 5.6 y 7.0.

Fin de PHP 5.6 y 7.0

PHP es el lenguaje de programación que posibilita que las páginas web sean más interactivas. Es decir, que sin el uso de PHP la mayoría de sitios web se limitarían al texto, enlaces e imágenes de la forma más simple. Actualmente, el 78% de las páginas web recurren a alguna versión de PHP; de forma que puedan ofrecer más y mejores funcionalidades al usuario. El problema viene cuando la mayor parte de este utilizan versiones obsoletas del lenguaje de programación.

Desde que fuera publicada en 2014, PHP 5.6 se ha convertido en la versión de PHP más utilizada a nivel mundial. Tanto que actualmente aún es utilizada en el 61% de las páginas web. Esto no sería una mala noticia si no fuera porque en unos días llegará el fin de PHP 5.6. Una versión que ha ampliado sus periodos de soporte, especialmente el de seguridad, ante la imposibilidad de que el usuario se actualice a las últimas versiones. PHP 5.6 no tiene soporte activo desde 2017; y en tan solo unos días se quedará, finalmente, sin soporte de seguridad.

Con la llegada del fin de PHP 5.6, llegará también el de PHP 7.0. De forma que a partir de enero de 2019 la versión activa más antigua de PHP pasará a ser PHP 7.1. El fin de PHP 5.6 y 7.0 hará que el uso de cualquier versión anterior a PHP 7.1 no esté recomendada. No porque no pueda usarse, sino que de hacerlo las webs se exponen a todo tipo de problemas de seguridad. Es decir, que el 60% de las páginas web de internet que no se actualicen serán vulnerables a partir del 1 de enero.

Los CMS y las versiones obsoletas

Los gestores de contenido, como WordPress, Drupal o Joomla han contribuido al uso de versiones obsoletas de PHP. Aunque recomiendan el uso de las últimas versiones y advierten que las versiones obsoletas hacen vulnerable al sitio web, las plataformas siguen soportándolas. Si dejasen de soportar versiones como PHP 5.6 y 7.0, los usuarios se verían obligados a actualizar la versión de sus webs.

Aunque por el momento no ha ocurrido ningún problema de seguridad crítico, con el fin de PHP 5.6 y 7.0, podrían aparecer todo tipo de vulnerabilidades. Especialmente en el caso de PHP 5.6 como consecuencia de su gran adopción.

Si eres de esos que aún recurren a versiones obsoletas estás perdiéndote mejoras de rendimiento y funcionamiento de tu web; además de estar poniendo en peligro su seguridad. Un servicio que dispone de soporte activo dispondrá de mejoras de rendimiento cada cierto tiempo; si cuenta con soporte de seguridad, además, estará a salvo de cualquier vulnerabilidad. Pero si la versión ha llegado al final de su vida, la aplicación estará en peligro.

Actualízate a PHP 7.2

Como es habitual, en cada nueva versión de PHP se incorporan mejoras en cuanto a funcionalidades y rendimiento. En este sentido el cambio de PHP 5.x a PHP 7.x mejoró la velocidad; además de incluir soporte para 64-bit y solucionar errores críticos de la rama 5.x. Así, desde el lanzamiento de PHP 7.0 a finales de 2015 la velocidad de las versiones de la rama 7 se ha duplicado.

Puesto que el fin no llegará solo para PHP 5.6 sino que también será el final de PHP 7.0, nuestra recomendación es que actualices tu código a la última versión estable: PHP 7.2. Actualizar la versión de PHP implica comprobar la compatibilidad entre las dos versiones para evitar problemas, es decir, que no es tan sencillo como modificar simplemente la versión. De ahí que, una vez que vayas a hacer el cambio, te recomendemos optar por PHP 7.2.; una versión que tendrá soporte de seguridad hasta finales de noviembre de 2020.

Antes de actualizar tu versión de PHP puedes utilizar herramientas que te permitan comprobar la compatibilidad entre versiones como php7mar, phan o phpstan. Y, si no sabes qué versión de PHP estás utilizando actualmente, puedes comprobarlo de diferentes maneras; a través de panel de control Plesk o desde el propio CMS que utilices. También puedes recurrir a la función phpinfo.php para obtener más información sobre la configuracion de PHP; como por ejemplo, la versión que utiliza tu sitio web.

Actualiza tu versión de PHP antes de que llegue el fin del soporte de seguridad de PHP 5.6 y 7.0. Así, te asegurarás que tu web, tienda online o servidor no son vulnerables.

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

Publicado enDesarrollo y Programación 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, en 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.2: mejora las funciones y aumenta la seguridad

Publicado enDesarrollo y Programación 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 y Programación 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.

PHP 7.1 presenta 5 nuevas funcionalidades

Publicado enDesarrollo y Programación

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.

Configurar wildcard domains con $_SESSION en PHP

Publicado enDominios

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 SQL Server para PHP

Publicado enDesarrollo y Programación

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 de PHP 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. Una extensión que fue desarrollada en 2003, aunque no fue estable hasta la llegada de PHP 5.0; la versión del lenguaje de programación publicada en 2004. Para poder considerar a PDO como estable y que incluyera su primera interfaz por defecto, aún tendría que pasar otro año más.

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 la tecnología orientada a objetos.

Porqué usar PDO

Esta versión del driver de SQL Server es compatible con la API de PDO. Con independencia a esta compatibilidad, se sigue manteniendo la API nativa de SQL Server que existía hasta el momento. De esta forma es posible ofrecer 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 lo es para todos aquellos desarrolladores que trabajan con PHP bajo algún entorno de Microsoft. Algunos de los ORM más importantes están escritos en PHP; al igual que muchos gestores de contenido, como Drupal. Con el driver PDO es mucho más fácil integrar aplicaciones y añadir más funcionalidades a uno de los frameworks más utilizados para el desarrollo web.

PDO-php-sqlsrv

Puesto que la versión estable aún no se ha publicado, no es posible ofrecer este servicio por el momento. Eso sí, en cuanto esté disponible, procederemos a implantar el driver en todos nuestros servicios de hosting, para poder ofrecerte siempre el mejor servicio. Queremos hacerte la vida en internet mucho más fácil y ofrecer siempre las últimas innovaciones tecnológicas y versiones estables es prueba de ello. Además, utilizar las últimas versiones es una forma muy eficaz de evitar cualquier ataque informático; ya que en cada actualización de los servicios se soluciona cualquier problema de seguridad que pudiera haber.

Un vistazo a Doctrine 2

Publicado enDesarrollo y Programación

Doctrine es un ORM que cada vez estamos usando más y más aquellos 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. Una actualización del ORM que, entre otras cosas, 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 que su uso sea mucho más ágil.

Jonathan Wage, impartió en Febrero de este año durante la conferencia Symfony Live 2010 una interesante charla en la que dió a conocer 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 flujo de trabajo. 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 duplican los datos de su anterior versión y las consultas se ejecutan en un tiempo mucho menor. Además, se incluye OOP,  nuevas queries e implementaciones que ayudan a 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 enSistemas 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 FastCGI 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="" />
  </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:


<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.

El driver php_sqlsrv para SQL Server 2005 o superior en PHP

Publicado enDesarrollo y Programación

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

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 característica 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 =  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

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.

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.

Si quieres saver más sobre PHP, en concreto cómo crear consultas del tipo select count en PHP, podrás encontrarlo también en nuestro blog.

Crear una consulta select count a una select con PHP

Publicado enDesarrollo y Programación

Es posible que en alguna situación concreta necesitemos hacer una consulta del tipo select count. Algo que es especialmente útil cuando queremos hacer listados con consultas que tienen muchos elementos; como joins, condiciones where, orders o similares. También es posible que lo que quieras sea realizar en el sitio web sea una paginación. En este caso, además de realizar las consultas correspondientes, será necesario que posteriormente cachees cada una de ellas.

Cada vez que generamos este tipo de consulta select count de forma dinámica, lo habitual es que hagamos un count contra una subquery. Una subquery que sea esa misma consulta pero a la que le quitaremos todos los limits. Algo parecido al script que te mostramos a continuación y cuyo uso, en este momento, está totalmente desaconsejado:


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

Consulta select count

Esto puede ocasionar serios problemas de rendimiento, sobre todo si la consulta contiene, por ejemplo, cláusulas de tipo ORDER. Para mejorar esto podemos recurrir al uso de las funciones strrpos y substr de PHP. Unas funciones que se encargan de encontrar cuál es la última coincidencia dentro de una cadena o cuál es el carácter en una cadena que nos ha sido dada. Una vez que las funciones han localizado esta coincidencia, la cadena se partirá en función de los límites que hayamos establecido previamente. El uso de estas funciones nos permiten tener una consulta count para nuestra query principal, sin tener que reescribir lo mismo dos veces.

Para ello, en primer lugar, tenemos que eliminar todos los caracteres en una cadena contenida en la $query. Desde el principio hasta la última coincidencia que se encuentre de la palabra ORDER. Es decir, contando desde el principio hasta el final de una misma cadena. Recurrir a este tipo de funciones hará que se elimine de la query original los últimos ORDERs y LIMITs. Algo similar al script que te mostramos a continuación:


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

Seguidamente, deberemos eliminar desde el principio de la query hasta el último FROM que se haya encontrado al hacer uso de dichas funciones. Es decir, algo como lo siguiente:


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

Finalmente, tendremos que agregar la sentencia COUNT a la query. Para ello, puedes recurrir a un script como el que te mostramos a continuación:


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

De esta forma, la creación de este tipo de consultas en PHP se realizará de una forma mucho más limpia y, sobre todo, ordenada. Todo ello sin que el rendimiento de la web o del servidor pueda verse afectado.

Script para ayudarte a migrar de PHP 5.2 a PHP 5.3

Publicado enDesarrollo y Programación

No es la primera vez y, lamentablemente, no será la última que hablamos de la importancia de utilizar las últimas versiones estables. Tanto de lenguajes de programación, como de gestores de contenido e incluso servidores. Mantener el sistema actualizado es le mejor forma de protegernos ante un posible ciberataque; ya que, por norma general, estos intentan explotar las vulnerabilidades. Y, los fallos de seguridad se solucionan con parches o mediante actualizaciones. Así que, si no cuentas con la última versión de PHP, estás tardando y mucho. Migrar de PHP nos aporta muchísimas ventajas que no deberíamos dejar en el olvido.

Por ejemplo, como la nueva versión de PHP considera a algunas de las funciones que más se utilizan como deprecated; en PHP 5.3 se han añadido nuevas funcionalidades. Nuevas formas para ejecutar las mismas tareas que no deberías seguir realizando mediante funciones ahora consideradas como obsoletas.

Como viene siendo habitual, una vez más, debemos agradecer a todos aquellos desarrolladores; especialmente por su esfuerzo de mejorar y poner al servicio de todos sus extensos conocimientos. En esta ocasión es Stanislav Malyshev quien se ha encargado de desarrollar un script que nos avisa de posibles incompatibilidades en nuestro código. Algo fundamental antes de migrar a una versión superior de cualquier servicio: comprobar la compatibilidad del código; en este caso. El script creado por Malyshev es una utilidad que puedes ejecutar desde la línea de comandos; y que puede ser de gran ayuda para buscar código problemático, ya sea en un archivo PHP o dentro de un directorio.

Descarga Script para migrar de PHP

Si quieres conseguir el script de Stanislav Malyshev, está disponible en su repositorio de GitHub. A pesar de que con dicho script migrar de PHP 5.2 a PHP 5.3 será más sencilla, no hace falta decir que no es automática. Por lo que para que la migración se realice de forma correcta es necesario que, una vez comprobada la compatibilidad del código, lleves a cabo la migración.

En el caso de que no estés muy seguro de llevar esta tarea por ti mismo, puedes ponerte en contacto con nosotros. Nos encargaremos de realizar la tarea y que tu web siga funcionando de forma correcta. Os recordamos que este tipo de labores de mantenimiento están incluidas en nuestro servicio de administración de sistemas. Por lo que puedes librarte de tener que realizar este tipo de cambios técnicos contrátandolo.

Dedica tu tiempo a otras cosas más amenas, que la parte técnica de tu proyecto corre por nuestra cuenta.

Mejoras de PHP 5.3 que todo programador debería conocer

Publicado enDesarrollo y Programación

¿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 aún de la última versión de PHP? En el siguiente artículo te contamos paso a paso cómo migrar de PHP.

Cambiar la 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. Entre otas cosas porque esta acción ayuda a mejorar 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. Además, al cambiar el modo de ejecución se facilitará enormemente las tareas de administración. Igualmente, esto permitirá aislar una aplicación de otra.

Si utilizas el panel de control Plesk, este utiliza ISAPI por defecto para la ejecución de las aplicaciones. Un sistema que te permite elegir entre el protocolo CGI y FastCGI. Si no sabes cuál de las dos opciones utilizar, nuestro consejo es siempre utilizar FastCGI. El uso de este protocolo contribuye a la mejora del rendimiento del servidor, haciendo que tu sitio web caya mucho más rápido. Así que, siempre y cuando sea posible y no haya otra alternativa, establece FastCGI como forma de ejecución de una aplicación programada en PHP.

Establecer PHP a FastCGI por defecto

Si quieres establecer «FastCGI» por defecto en el panel de control Plesk en Windows, primero es necesario establecerlo en el registro. Para ello, en primer lugar, ve a la siguiente ruta dentro del registro de Windows:

HKEY_LOCAL_MACHINESOFTWAREPLESKPSA ConfigConfig

Una vez allí, deberemos establecer lo siguiente:

PLESKCP_PHP_MODE -&gt; fastcgi

A continuación, vamos a la consola de Windows (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 se apliquen de forma correcta.

reconfigurator.exe /check=Services

Versiones recientes de Plesk

Actualmente, las diferentes versiones del panel de control que van publicándose, permiten activar esta funcionalidad desde la propia interfaz. Con este cambio, cambiar el modo de ejecución de PHP a FastCGI es mucho más sencillo; ya que no es necesario recurrir a modificaciones de código. Para ello, solo es necesario modificar la configuración del hosting dentro del apartado sitios web y dominios del panel de control. Una vez allí, deberemos ir al apartado de estadísticas y scripting web para cambiar el modo de ejecución de la aplicación.

Llegados a este punto, en ejecutar PHP como deberemos seleccionar la opción aplicación FastCGI y hacer click en aceptar. De esta manera, se aplicarán de forma correcta los cambios que acabamos de introducir en la configuración del servidor.

Este cambio es igualmente válido en el caso de un alojamiento Windows como en Linux; aunque algunas opciones son diferentes en función del sistema operativo del servidor. En este caso no afecta a la posibilidad de activar FastCGI desde el propio panel de control Plesk.