Evitar navegación.
Principal

php

¿Cómo ordenar datos?

Uno de los procedimientos más comunes a la hora de procesar datos y generar aplicaciones de todo tipo es el procesamiento de los datos, por procesamiento entendemos la clasificación u ordenación de los mismos.

A menudo esta acción pasa desapercibida porque interactuamos con datos almacenados en bases de datos, las bases de datos nos dan las herramientas necesarias para ordenar, buscar y recuperar aquellos datos que deseamos ("order by id","where nombre like '%Man%'"); ¿Qué ocurriría si no pudieramos utilizar estas herramientas?

Pues tendriamos que encontrar un método de ordenación y procesamiento de datos que se adecúe a nuestras necesidas, en primer lugar deberíamos de analizar los diferentes métodos de ordenación y determinar cuántas comparaciones se realizarían en los diferentes casos que nos encontremos.

En este análisis deberíamos estudiar si necesitamos orden ascendente o descendente o si los datos a ordenar van a ser numéricos o alfanuméricos.

Los métodos son bien conocidos para muchos y todo el mundo que ha programado, se habrá encontrado alguna vez con la realización de alguno de estos famosos algoritmos de ordenación.


El futuro de PHP

El 13 de Julio de 2007, en el tercer aniversario del lanzamiento de PHP 5, se anunció que el desarrollo de PHP 4 iba a ser parado de manera definitiva, esto significa que a partir del 1/1/2008 no va a haber más versiones de PHP 4.4 y que se continuarán resolviendo problemas críticos de seguridad hasta el 08/08/2008, traduciendo que antes de esa fecha deberiamos tener nuestras aplicaciones corriendo bajo PHP 5.

El 11 de Noviembre del 2005 el núcleo principal de desarrolladores de PHP se encontraron en París para decidir el camino que iba a tomar PHP6, del encuentro salieron todos los cambios que iba a sufrir.

Hay que tener en cuenta estos cuatro puntos:

  1. La mayoría de las nuevas funcionalidades planeadas para PHP 6, saldrán en PHP 5.3 y 5.4.
  2. La migración de aplicaciones PHP 5 a PHP 6 será mucho más costosa que de PHP 4 a PHP 5.
  3. PHP 6 aportará sobre todo soporte para Unicode y tardará todavía, al menos, un año más.
  4. Pese a la salida de Eclipse PDT, Zend Studio seguirá desarrollándose.

Nuevas características de PHP V6

Soporte Unicode

Posiblemente la mejora más notable para la nueva versión de PHP, está característica nos permitirá adaptar nuestra aplicaciones a las necesidades de la internacionalización, uno de los grandes problemas de la red.

Unicode es un estándar industrial cuyo objetivo es proporcionar el medio por el cual un texto en cualquier forma e idioma pueda ser codificado para el uso informático.

Actualmente podemos activar esta característica bajo petición, con lo cual PHP consume más recursos al tener que guardar las clases, funciones y el resto de elementos necesarios.

Namespaces

El uso de namespaces no provee de organización para proyectos donde la librería de clases es extendida y genera un desorden tenerlas en un scope global, por lo tanto tendríamos mejor organizacion para proyectos en capas lógicas o fisicas.

Nuevas características de PHP V6 (Web 2.0)

SOAP

SOAP (Simple Object Access Protocol) es un protocolo estándar que define cómo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos XML. SOAP es uno de los protocolos utilizados en los "Web Services".

La extensión de SOAP para PHP llegó con PHP V5, pero esta extensión no está habilitada por defecto, en PHP V6 a menos que cambies la configuración por defecto SOAP estará habilitado por defecto permitiendo sin ninguna modificación desarrollar aplicaciones que se beneficien de los "Web Services".

XML

Desde PHP V5.1, XMLReader y XMLWriter forman pare del núcleo de PHP, esto facilita el trabajo con documentos XML dentro de las aplicaciones PHP, lo bueno es que igual que con la llegada de esta nueva versión el funcionamiento mejorará ya que XMLReader y XMLWriter estarán activadas por defecto.

Principales cambios con versiones anteriores

Resgister Globals

El compilador nos devuelve un error E_CORE_ERROR cuando se encuentre con una variable global registrada.

Magic Quotes

Al igual que con Register Globals, su uso provocará un E_CORE_ERROR, afectará a magic_quotes, magic_quotes_sybase y magic_quotes_gpc.

Desaparece el modo seguro

Parece ser que el motivo es que daba una impresión de seguridad no real.

Se abandona el soporte de Freetype1 y GD1

Son librerías que tienen ya muchos años y con versiones actualizadas.

HTTP_*_VARS

En PHP6 sólo $_POST y $_GET serán aceptados, HTTP_*_VARS devolverán errores.

El futuro de PHP

En estos momentos PHP 5.2.5 es la versión más popular a pesar de que versiones como: PHP 4.4.8 y 4.4.4. siguen teniendo un gran número de usuarios.

Versiones PHP en involución


Este gráfico presenta datos de sitios webs que han modificado su versión de PHP en el mes de Abril, como se puede ver poco a poco va desapareciendo las versiones 4.x de PHP.


Oculta la extensión PHP en tus páginas


En esta entrada vamos a ver una solución por si por algún motivo en concreto quereis convertir las extensiones PHP de vuestro sitio web en otro tipo de extensión, ya sea alguna conocida con .htm o alguna que se te ocurra, en este ejemplo utilizaremos .wii.

Como convertir páginas con extensión .PHP a la extensión que desees

Los requisitos para realizar este truco es tener un servidor Apache version 1.3 ó superior. La solución es redefinir los procesos de ejecución asociados a los tipos de archivos mod_mime de Apache.

Despues de esta breve introdución pasaremos a la explicacion de eeste sencillo proceso de cambiar las extensiones .php por .wii en nuestro servidor.

Tenemos que indicar al servidor que ejecute los archivos .wii como .php.

La primera cosa que necesitaremos hacer es configurar Apache para permitir que utilicemos ”.wii” como extensión.

  • Abrimos el archivo de Apache httpd.conf y vamos al área donde esta AddType application/x-httpd-php .php y apenas agreguemos un .wii detrás de él. Debe parecerse esto:
    AddType application/x-httpd-php .php .ass
  • Una vez que hayas conseguido incorporar tu “.wii” en el archivo de httpd.conf, reinicia apache. Generalmente podría ser “reiniciar httpd” o “reiniciar apachectl”, todo depende de tu sistema.

Ahora, una vez que cambiemos todas nuestras extensiones “.wii” de PHP en vez de” .php " podrás ver las paginas de esta manera:

"tusitio/index.wii" y funcionará justo como fuera "tusitio/index.php"

Otra cosa que podemos ajustar en el Apache en el archivo de httpd.conf es el ServerSignature a OFF y después corregir tu archivo de php.ini para incluir el “expose_php = off”.

Estos ajustes juntos harán más difícil a usuarios maliciosos descubrir la versión del servidor y otras informaciónes valiosas que pueden poner en peligro tu servidor.

Recapitulación rápida de lo que acabamos de hacer:
1.) Corregir httpd.conf para reflejar “AddType application/x-httpd-php .php .wii”

2.) Corregir httpd.conf para reflejar “ServerSignature off”

3.) Corregir el archivo de php.ini para reflejar el “expose_php = off”

4.) Renombrar todos los archivos de .php a .wii y después fijar todos los enlaces para reflejar .wii en vez de .php

5.) ¡Reiniciar Apache y prepararte para mostrar tu extension .wii!

Averiguar si una web utiliza PHP

Bueno si te gusta o desarrollas tus aplicaciones con Php seguro que alguna vez te has preguntado que webs con una gran cantidad de tráfico utilizan php como soporte principal de sus aplicaciones.

Para ver que grandes webs utilizan Php comprobemos por ejemplo las 100 primeras del Ranking Alexa.

  1. Yahoo INC

  2. Wikipedia.org

  3. Friendster.com

  4. Facebook.com

  5. Digg.com

  6. Sourceforge.org

  7. Flickr.com

Y no unicamente lo utilizan las grandes webs sino que tambien es utilizado por CMS cómo Wordpress y Drupal.

Ahora probablemente te preguntes y cómo podemos saber si de verdad estos sitios utilizan Php... hay diferentes maneras:

- La primera es mirar la extensión de los archivos que se pueden ver en las diferentes URLs de los sitios (no funciona si esta utiliza URLs Amigables) ó si lo han ocultado con un método como por ejemplo el que anteriormente hemos visto.

- La segunda manera es un pequeño truco no muy conocido...

* PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 - Creditos Php
* PHPE9568F34-D428-11d2-A769-00AA001ACF42 - Logo Php
* PHPE9568F35-D428-11d2-A769-00AA001ACF42 - Logo Zend
* PHPE9568F36-D428-11d2-A769-00AA001ACF42 - Huevo de Pascua

www.dominio.com/?=*(código)

Pongamos un ejemplo:
http://www.meneame.net/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000: si este enlace nos devuelve los créditos de Php será porque esta página esta desarrollada con este lenguaje, cómo puedes comprobar Meneame.net está desarrollada con Php.
Sin embargo en el caso http://www.google.com/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 nos devuelve una página de error porque no está desarrollada con Php.



¿Es PHP un buen primer lenguaje de programación?

Es una buena pregunta y seguramente te harás si te gustaría empezar a programar, lo mejor en estos casos es preguntar a personas experimentadas y que están capacitados para dar buenos consejos.

En estos momentos probablemente la mejor idea sea aprender algún lenguaje web (PHP, ASP.net, etc) ya que es la tendencia en estos momentos, dentro del mundo del desarrollo web sin duda el lenguaje idóneo es PHP y si no te sientes realmente atraido por el desarrollo web los más recomendables serían: C, C ++, Java y Visual Basic.

PHP como primer lenguaje de programación

En CodeUtopia nos dan un buen número de razones por las que PHP es un buen primer lenguaje de programación.

PHP no es un lenguaje excesivamente complejo y con una curva de aprendizaje asequible, es bastante fácil de aprender pero también te permite aprender características de lenjuages más complejos como son los lenguajes de programación orientados a objetos.

Es posiblemente el lenguaje web más popular lo que hace que haya numerosos tutoriales y ejemplos de código que agilizan el periodo de aprendizaje.

Debido a su enorme popularidad probablemente sea con el lenguaje que más fácilmente encontrarás trabajo.

Por lo tanto PHP reune las características más importantes que un primer lenguaje de programación debe reunir:

  • Emepzar a programar es realmente sencillo
  • Es potente y proporciona funciones de alto nivel con poco código
  • Es fácil ver nuestro progreso en un corto periodo de tiempo

¿Por qué comenzar con PHP y no con C?

Aunque PHP posee grandes coincidencias con los lenguajes más comunes de la programación estructurada (C y Perl) es más recomendable que estos ya que nos permite involucrarnos con aplicaciones de contenido dinámico sin tener que aprender todo un nuevo grupo de funciones.

Con C tenemos bastantes conceptos difícles de entender como es el caso de los punteros, se necesita una gran cantidad de código para las aplicaciones más sencillas y para principiantes puede ser un tanto difícil enamorarse de la consola.


Optimiza Codeigniter

CodeIgniter es un genial framework, pensado para ofrecer un alto rendimiento, claro está con una óptima configuración.

Como ya hemos comentado en otras ocasiones CodeIgniter cumple perfectamente el fin de cualquier framework, una estructura definida que de soporte a un proyecto web y ayude a que este proyecto sea organizado y desarrollado, veamos los puntos clave a tener en cuenta a la hora de optimizar la configuración de CodeIgniter.

Ver Ejemplo (Benchmark para CodeIgniter)

Modelo Vista Controlador (MVC)

Seguramente hayas oido e incluso utilizado algún MVC (Modelo Vista Controlador), de lo que se trata en este tipo de modelos es de repetirse lo menos posible y hacer una separación entre la lógica de la aplicación y su presentación:

  • El modelo representa la estructura de datos, a menudo con clases que contienen funciones que te ayudan a insertar, eliminar y actualizar la información de la base de datos.
  • La vista es la información que se presenta al usuario, una vista es a menudo una página web en sí misma, pero en CodeIgniter una vista también puede llegar a ser un fragmento de la página web (pie, cabecera, contenido principal, etc...).
  • El controlador sirve de intermediario entre los Modelos y las Vistas, y es el encargado de coordinar la petición y generar la página web.

Teniendo estos tres puntos claros podemos pasar a ver el diagrama de flujo de CodeIgniter.

Diagrama de Flujo de CodeIgniter

Configuración básica de CodeIgniter

Modelo Vista Controlador
  1. El index.php sirve inicializa el nucleo de CodeIgniter.
  2. El enrutador examina la petición HTTP y determina que se debe de hacer.
  3. Si existe la cache devuelve el archivo HTML sin pasar por el sistema , ahorrandos la carga que ello conlleva.
  4. Seguridad, antes de que se cargue el controlador se filtra los datos enviados para que estos sean fiables.
  5. El controlador carga el modelo, librerias, plugins, helpers y todos los recursos necesarios para satisfacer la petición.
  6. Una vez la Vista está renderizada es enviada al navegador si la cache está habilitada se almacena el resultado en cache para la próxima vez que esta URL sea servida.

Configuración avanzada de CodeIgniter con librería Sparks

Sparks es una librería que nos permite solventar dos deficiencias con las que nos podemos encontrar a la hora de afrontar un proyecto basado en CodeIgniter.

1. Mejora la cache que únicamente permite cachear páginas completas.
2. Podremos incluir "vistas" dentro de "vistas".

Para entender este supuesto tenemos que imaginar que necesitamos que la página tenga un módulo de autentificación, al devolver sólo HTMl sería imposible hacer convivir la cache y el módulo de autentificación, con esta librería solucionamos el problema pero el diagrama de flujo cambia un poco.

Modelo Vista Controlador
  1. El index.php sirve inicializa el nucleo de CodeIgniter.
  2. El enrutador examina la petición HTTP y determina que se debe de hacer.
  3. Seguridad, antes de que se cargue el controlador se filtra los datos enviados para que estos sean fiables.
  4. El controlador comprueba si existe cache, en caso afirmativo la devuelve pero al hacer la comprobación en este punto podemos llegar a pasar datos dinámicos a la vista (podríamos conseguir que funcionará un módulo de autentificación aún con la cache habilitada), si no existe cache carga el modelo, librerias, plugins, helpers y todos los recursos necesarios para satisfacer la petición.
  5. Una vez la Vista está renderizada es enviada al navegador si la cache está habilitada se almacena el resultado en cache para la próxima vez que esta URL sea servida.

Limitar descargas con Php

Probablemente no te encuentres con este problema pero si lo encuentras esta es una buena solución.

A menudo nos encontramos con sitios con un gran número de archivos para descargar, estos sitios limitan el número de descargas permitidas a sus visitantes.

En un principio no suele haber problemas si no limitas las descargas, pero si el visitante utiliza un "gestor de descargas" en los que puedes introducir un número de conexiones por archivo descargado, veras muy limitados los recursos de tu servidor.

Si tienes un control total de tu servidor puedes limitar de manera sencilla el número de descargas permitidas gracias al módulo mod_limitipconn, pero si tu sitio esta en un "hosting compartido" tendrás que tirar de ingenio para ponerle solución.



Yahoo! Developer Network

Yahoo Developer Network ofrece a los desarrolladores una variedad de características, como acceso a las API, ejemplos de código fuente, grupos de discusión, listas de correo y secciones es las que se pueden previsualizar herramientas creadas por Yahoo.

Esta serie de herramientas pretende dar solución a los problemas de diseño e interfaz que aparecen en cualquier portal web: autocompletado, pestañas de navegación, Drag & Drop, paginación y calificación.

Se pueden encontrar ejemplos en JavaScript y PHP para infinidad de aplicaciones, desde elementos de interface de usuario hasta cómo parsear las respuestas XML de los Yahoo! Web Services. Es una genial reocopilación de recursos de programación para poder construir nuestro propio portal con numerosas de funcionalidad Ajax para implementar.


Test de algunas funciones Php

Estos tests se han realizado en un VIA Nehemiah 999 MHz con 480 Mb RAM, Windows XP Professional SP2 y PHP 5.2.1. Los scripts necesarios para realizar estas pruebas pueden ser descargados.

1. sizeof vs count

En primer lugar veamos las funciones sizeof y count. Ambas pueden ser utilizadas para contar el número de elementos de un array.

sizeof vs count

sizeof: 3.75928902626 microsegundos
count: 3.33035206795 microsegundos
Tiempo ahorrado: 0.428936958313 microsegundos; 12.8796280262%

La función "count" es un 12% más rápida y ambas tardan entre 3 y 4 microsegundos en contar los elementos de un array con 100.000 elementos. No sólo es más rápida en la ejecución sino que incluso es más sencilla de recordar y más corta a la hora de escribirla en código.

2. is_int vs is_integer

Vamos a ver cuál de estas funciones valida mejor.

is_int vs is_integer

is_int: 3.11394786835 microsegundos
is_integer: 3.42630600929 microsegundos
Tiempo ahorrado: 0.312358140945 microsegundos; 9.11646946006%

La diferencia es pequeña un 9% y ambas tardan en torno a los 3 microsegundos en validar una variable, de nuevo vuelve a ser la función de nombre más corto la más eficiente.