PHP BIC Validation: Validate the owner of a container with a BIC code

PHP BIC Validation: Validate the owner of a container with a BIC code

This class can validate the owner of a container with a BIC code.

It takes the BIC code of a container being shipped and computes the check digit.

The class can display a message showing whether the verification code is correct with a link to the site of BIC (Bureau International des Containers et du Transport Intermodal) to show who is the container owner.

Download

Hexagram of the Day : Displays the hexagram of the day from I-ching

This class can displays the hexagram of the day from I-ching.

It takes the current day and looks up an array with entries for the hexagram picture of that day from the I-ching book of changes.

The class displays the hexagram picture in a Web page along with the associated fortune telling phrases and the respective link to the Wikipedia page.

Currently the hexgram and phrases definitions are made available in English and Spanish.

Download from phpclasses.org

PHP AntiLeech, Código para evitar los Leechs o sanguijuelas de internet

Un leech o sanguijuela en internet es un ente? persona o maquina que se dedica a robar información de sitios de manera sistemática y/o automatizada.

En la actualidad hay mas maquinas haciendo de leech o sanguijuela que personas, ya que el volumen de información que estos entes prentende robar es grande, ya son cientos de millones de sitios web en el mundo.

Según la wikipedia un leech en computación es:

“En la computación y específicamente Internet, una sanguijuela es el que se beneficia, por lo general deliberadamente, de la información o el esfuerzo de los demás, pero no ofrece nada a cambio, o sólo hace ofrendas simbólicas en un intento de evitar ser llamado una sanguijuela. En economía, este tipo de comportamiento se denomina “free riding” y se asocia con el problema del polizón. ”

En la realidad no ofrecen absolutamente nada, solo la molestia de perder información en nuestros sitio web cuando un leech automático ingresa al sistema y roba información vital o no, es de mal gusto que luego de horas de trabajo tengamos que volver a una version anterior perdiendo post o cualquier otra información.

Para ello he publicado el paquete PHP AntiLeech en la comunidad www.phpclasses.org donde tradicionalmente he publicado los códigos que hhe desarrollado de acuerdo a cada caso.

Esta clase puede comprobar las direcciones IP en un archivo de lista negra de IP.

Se puede agregar una dirección IP a un archivo de texto de lista negra.

La clase también puede comprobar si una determinada IP ya aparece más de un número determinado de veces, la clase salidas HTML etiquetas meta para redirigir al usuario a una página determinada.

El usuario que la implemente puede asignar varios parametros entre ellos:

en la función check_ip

  • la url hacia donde quiere redireccionar el atacante cuando es baneado
  • la ip del atacante
  • la cantidad de intentos permitidos antes de ser baneado

en la funcion clear_ip_list

  • la hora del día en que quiere el usuario que implementa, borrar la lista negra
  • el nombre del archivo de la lista negra.

en la funcion add_bad_ip

  • la ip del ente que ha sobrepasado la cantidad de intentos permitidos.

 

Puede descargar el paquete desde este enlace:

DESCARGAR PHP ANTI LEECH

Diez Ideas Equivocadas Sobre PHP

Diez Ideas Equivocadas Sobre PHP

PHP es a menudo un lenguaje incomprendido por personas que no lo aman o lo odian.

Por un lado hay desarrolladores que odian PHP aparentemente debido a que no entienden muy bien cómo funciona. No respetan a PHP y prefieren otros lenguajes. Por lo que pierden muchas oportunidades para hacer bastante dinero en el mercado de PHP, que tiene muchos empleos bien remunerados para los desarrolladores calificados.

Por otro lado hay desarrolladores que aman PHP pero no aprovechan plenamente el lenguaje porque no son plenamente conscientes de todo lo que pueden hacer con él.

Este artículo intenta aclarar algunas de las ideas equivocadas más comunes que tienen muchos desarrolladores sobre PHP.

Lea el artículo hasta el final, para que eventualmente pueda empezar a tener una mejor perspectiva sobre PHP y aprovechar las oportunidades que este lenguaje y el ecosistema PHP pueden proporcionar.

Contenido

Introducción

Diez Ideas equivocadas sobre PHP

1. PHP no es un lenguaje compilado (es interpretado)
2. PHP no puede hacer X (acceso a memoria, control de dispositivos de hardware o algún propósito inusual)
3. PHP no puede hacer algo que puede hacerse en el lenguaje X
4. PHP es sólo para desarrollo Web
5. PHP es controlado por una única empresa (Zend)
6. La Documentación de PHP es mala o insuficiente
7. Los proyectos PHP no son reutilizables porque no están orientadas a objetos
8. PHP es peor que Ruby On Rails, Python Django, algún framework de lenguaje X
9. PHP no es bueno para aplicaciones o sitios Web escalables de alto rendimiento
10. Los desarrolladores de PHP son más baratos porque no están calificados

Otras Ideas equivocadas sobre PHP

Introducción

Recientemente he encontrado un artículo en el sitio de DZone titulado “Me gusta PHP” por Cedric Beust. Actualmente este es un repost del artículo original publicado primero en el blog de Cedric.

El artículo llamó mi atención por varias razones. Una de ellas es el hecho de que el artículo está escrito por un fan de Java y fue reenviado en una sección del sitio DZone llamado Lobby de Java. Es un poco sorprendente encontrar tal tipo de confesión de un fan de Java.

Me gusta este artículo no sólo porque alaba algunos aspectos importantes sobre PHP sino porque en su mayoría es preciso. Esa es otra razón por la qué el artículo llamó mi atención.

En el artículo ciertas características de PHP son destacadas por un desarrollador que es fan de otro lenguaje. Probablemente él esperaba que Java proporcionara esas características de PHP. Por lo menos mientras Java no ofrezca estas características, él dice que disfrutará PHP. Bien por él por ser de mente abierta.

De todos modos, la razón principal por la que decidí escribir este post no es tanto ese artículo, sino sobre un comentario que se encuentra debajo de la página de artículo en DZone, hecho por alguien llamado Matt Young.

Matt empieza a contestar algunas de las afirmaciones del artículo. La mayoría de sus argumentos son inexactos, sólo por decirlo amablemente. Para ser franco la mayoría de esos argumentos son simplemente ideas comunes y erradas que muchas personas tienen sobre PHP.

He visto muchos de esos argumentos una y otra vez volver a ser difundidos por “detractores” de PHP. Realmente el hecho de que haya desarrolladores que odien con pasión a PHP se siente muy extraño para mí. No es que me importe que exista gente que odie a PHP. Es que me parece que están perdiendo muchas oportunidades que PHP ofrece a millones de desarrolladores que no tienen esos sentimientos tan duros.

Por lo tanto, decidí escribir este artículo con la intención de ayudar a esos “detractores” a ver a PHP desde un lado más positivo que incluso puedan aprovechar.

Estoy seguro que no seré capaz de convencer a aquellos que están tan obsesionados en montar campaña contra PHP porque son fans extremos de otros lenguajes. Espero que al menos pueda proporcionar información útil a aquellos que están dispuestos a ayudar a impugnar esas ideas equivocadas acerca de PHP, y así PHP obtenga más respeto de las personas que fueron engañadas a creer en esas ideas equivocadas.

Diez Ideas equivocadas sobre PHP
A continuación hay una lista de algunas de las ideas equivocadas más comunes sobre PHP. Sólo presento el top 10 que me parece más relevante, pero pude incluso haber listado más. Es que el 10 es simplemente un número redondo que las personas están acostumbradas a encontrar con frecuencia en las principales listas. 🙂

1. PHP no es un lenguaje compilado (es interpretado)
En primer lugar permítanme ser un poco técnico para explicar lo que esto significa. Un lenguaje compilado es uno que necesita convertir el código fuente de ese lenguaje en una especie de código de máquina antes de que se pueda ejecutar. Un lenguaje interpretado es aquel que permite que el código se ejecute directamente desde el código fuente sin un paso de compilación (convertir código fuente en código de máquina ejecutable).

PHP no es un lenguaje interpretado desde PHP 4, el cual fue lanzado en el año 2000. No es la primera vez que cubro este tema en este blog. Anteriormente he escrito un artículo popular sobre el rendimiento del motor de compilación de PHP. Permítanme sólo adherirme a los conceptos fundamentales que son importantes para aclarar este tema.

Cuando se ejecuta un script PHP, primero el código fuente de PHP es compilado por el motor Zend en código máquina de datos llamados Zend opcodes. Estos códigos se almacenan en la memoria RAM. Luego los opcodes son ejecutados para ejecutar la secuencia de comandos.

Así que PHP es un lenguaje compilado como Java, C# y otros. De lo contrario sería bastante lento.

Normalmente el código máquina compilado de PHP (Zend opcodes) no se guardan en archivos ya que no es necesario. Pero si es importante para ti, hay extensiones que pueden generar código compilado de PHP hacia archivos.

Por defecto, si se ejecuta de nuevo, el mismo script de PHP, este debe ser recompilado en la RAM cada vez que se ejecute. Sin embargo, hay varias extensiones de caché de opcode que pueden guardar los opcodes de PHP compilados a memoria compartida, así que la próxima vez que un script PHP sea ejecutado por una solicitud de servidor Web diferente, el código fuente original ya no tiene que volverse a compilar. Este es simplemente cargado de la memoria compartida, ahorrando mucho tiempo de procesamiento.

El uso de una extensión de caché de opcode es completamente recomendado por motivos de rendimiento, especialmente en sitios de alto tráfico. Hay varias extensiones de caché de opcode gratuitas que puedes utilizar.

Así, como puedes entender ahora, el motor de ejecución de código PHP es bastante sofisticado en este momento. Pero si se necesita algo más sofisticado, existe el HipHop para el compilador de PHP. Se trata de un proyecto de código abierto desarrollado por Facebook para llevar el rendimiento de PHP al extremo. Compila código PHP en C++, que luego se compila a código máquina nativo en un servidor Web binario o un programa ejecutable. Facebook lo utiliza para ejecutar la mayoría de su sitio.

También hay otros proyectos de compiladores de PHP que convierten código PHP en bytecodes de Java o ensamblados de .NET. Se pueden encontrar más detalles en el artículo sobre rendimiento del compilador de PHP que fue mencionado anteriormente.

2. PHP no puede hacer X (acceso a memoria, control de dispositivos de hardware o algún propósito inusual)
PHP es un lenguaje extensible. Si necesitas algo que no implementa la distribución principal de PHP, puedes crear extensiones de PHP, generalmente mediante algo de código C o C++. Así que PHP puede hacer cualquier cosa que puedan hacer C o C++.

Hay decenas, si no cientos de extensiones PHP. Muchas de ellas son integradas en la distribución principal de PHP. Si necesitas algo que no está incorporado en PHP, siempre puedes comprobar el repositorio de extensiones PECL de PHP. Este es el repositorio oficial de extensiones PHP menos populares escritas en código C o C++.

Si no hay ninguna extensión para hacer algo que necesitas, tal vez es porque tienes una necesidad inusual. Probablemente están abordando un problema nuevo, o es algo que nadie más tiene como necesidad. Por lo tanto, puedes siempre desarrollar una nueva extensión propia. Si no eres capaz de desarrollar código C o C++, puedes contratar otro desarrollador para hacerlo por ti. Por lo tanto nunca estas atrapado sin una solución.

3. PHP no puede hacer algo que puede hacer el lenguaje X
Dudo que haya muchas cosas relevantes que no se puedan hacer en PHP y que si se puedan hacer en otros lenguajes. Tal vez puedas hacer cosas en otros lenguajes usando diferentes estilos de programación, pero eso no significa que no puedas desarrollar las mismas funcionalidades en PHP, habida cuenta de todas las extensiones de PHP disponibles.

Aún así, si encuentras algo que sólo puede hacerse en algún otro lenguaje o tienes que confiar en los componentes existentes escritos en ese lenguaje, puedes intentar hacer interfaz con código escrito en otros lenguajes mediante extensiones especiales de PHP disponibles para ese fin.

Este no es un hecho bien conocido, probablemente porque no es algo que tenga gran demanda, pero hay extensiones PHP que permiten ejecutar código en otros lenguajes desde scripts de PHP, por ejemplo código: Java, C# (.NET), Python, Perl, Lua, JavaScript usando los motores V8 o SpiderMonkey.

Oh, espera, no hay ninguna extensión de Ruby para PHP como puedes haber notado. Como ya he dicho, esto es probablemente porque nadie tiene tal extraña necesidad. Aún así, si realmente tienes esa necesidad, tal vez puedas convertir Ruby en Java con JRuby y, a continuación, puedes utilizar la extensión PHP de Java para ejecutar el código Ruby convertido. Lo mismo ocurre con otros lenguajes menos populares.

Es un tiro largo que puede hacerte preguntar si realmente tiene sentido, pero al menos PHP no te deja sin una solución.

4. PHP es sólo para el desarrollo Web
El uso más común de PHP es para el desarrollo de aplicaciones Web. Aunque PHP puede ejecutarse fuera de un servidor Web con PHP CLI (Command Line Interface) ejecutable. Es un programa que se puede iniciar desde el shell de líneas de comandos para realizar todo tipo de operaciones, relacionadas con sitios Web o no.

Incluso aplicaciones con uso intensivo de la CPU son desarrolladas en PHP y ejecutadas fuera de un servidor Web mediante el programa CLI de PHP, como por ejemplo enviar boletines a muchos suscriptores. El propio PHPClasses envía millones de mensajes de boletín cada mes utilizando el programa PHP CLI.

Incluso puedes crear aplicaciones de escritorio para que se ejecuten en Windows, Linux, Mac o cualquier otro sabor de Unix mediante la extensión PHP-Gtk. También puedes desarrollar aplicaciones específicas de Windows o incluso servicios de Windows utilizando extensiones como WinBinder y otras extensiones de PHP específicas para Windows.

No es que exista gran demanda de desarrollo de estos tipos de aplicaciones específicas del sistema operativo, pero si los necesitas, puedes desarrollarlas en PHP si así lo deseas.

5. PHP es controlado por una única empresa (Zend)
Si has leído acerca de la historia PHP sabrás que PHP fue creado por Rasmus Lerdorf en 1994. Con el tiempo se unieron a Rasmus decenas o incluso centenares de otros desarrolladores, incluyendo Andi Gutmans y Zeev Suraski, los fundadores de Zend, así como otros desarrolladores principales que trabajan (o al menos han trabajado) para Zend.

Creo que es natural que los desarrolladores de Zend siempre tratarán de influir en el desarrollo de PHP, para que este tome las direcciones que sean convenientes para su negocio. Después de todo, ellos han basado todo su negocio en PHP. Si el desarrollo de PHP tiene una ruta que hace irrelevante a Zend, probablemente esto destruiría su negocio.

Seguir afirmando que el desarrollo de PHP está controlado por una compañía parece ser una gran exageración. El hecho es que PHP fue desarrollado y continúa desarrollándose por muchas personas que no están asociadas con Zend.

Hay incluso desarrolladores principales que trabajan para Microsoft, como Pierre Alain Joye, un desarrollador del núcleo de PHP por mucho tiempo que fue contratado por Microsoft en los últimos años para hacer que PHP se ejecutase bien con Windows y otros productos de Microsoft. También hay desarrolladores de Oracle, no sólo para hacerse cargo de las extensiones de base de datos de Oracle, sino también de MySQL, que ahora es también un producto Oracle ya que adquirieron Sun.

El hecho es que los desarrolladores principales de PHP que están conectados con Zend, Microsoft, Oracle u otras empresas, son sólo una minoría, a pesar de su influencia. La mayoría de los desarrolladores principales no están conectados con alguna compañía.

Si te preocupa que esas empresas puedan ser malintencionadas y tratar de influir en el desarrollo de PHP para que vaya en la dirección equivocada, ten la certeza de que todos los otros desarrolladores principales que no están vinculados a ninguna empresa también están preocupados y vigilando cualquier mal movimiento. Si has intentado ver por un tiempo los debates en la lista interna de PHP probablemente ya te habrás dado cuenta.

6. La documentación de PHP es mala o insuficiente
Esta es probablemente la afirmación equivocada más asombrosa que he visto, pero creo que debo mencionarlo porque la he visto más de una vez. En realidad incluso vi a alguien diciendo que la documentación de PHP es tan mala que necesita los comentarios de los usuarios para solucionarlo.

Si hay sólo una cosa buena acerca de PHP, es sin duda la documentación. La documentación está bien estructurada, claro, y teniendo en cuenta el tiempo dado al equipo de documentación, muy completa. Los comentarios de los usuarios que aparecen en las páginas de documentación sólo la hacen aún más rica y completa.

Todavía no he visto otro proyecto de software de código abierto o no, que tenga mejor documentación que PHP. El hecho de que incluya comentarios de los usuarios califica el proyecto de documentación de PHP como: Documentación 2.0 – utilizar documentación mejorada

El equipo de documentación de PHP hace un trabajo increíble. No sólo se ocupan de la documentación principal en inglés, si no también tienen equipos dedicados a traducir a decenas de otros idiomas. Esta es parte de la razón por la qué PHP es tan popular en todas partes del mundo. Felicidades a todo el mundo que ayuda en la documentación de PHP.

Aunque el equipo de documentación de PHP no puede hacer milagros. Los aspectos que cubre PHP son tan extensos, que resulta imposible conocer todos los detalles oscuros que pueden hacer que PHP funcione de forma diferente a como se espera en ciertas plataformas. Puede haber errores en PHP que puedan causar un comportamiento incorrecto, pero eso no es culpa del equipo de documentación de PHP.

Por eso son tan importantes los comentarios de los usuarios. Proporcionan información adicional que permite a otros usuarios de PHP conocer un comportamiento inesperado que no podía anticipar el equipo de documentación.

Además, a menudo puedes encontrar código de ejemplo en los comentarios de otros usuarios para realizar ciertas tareas que los usuarios de PHP desean que pudiesen hacer las funciones de PHP. Eso hace la documentación de PHP más rica con los comentarios de los usuarios que si nos los tuviera. ¿No es eso sorprendente?

7. Los proyectos de PHP no son reutilizables porque no son orientadas a objetos
Una de las razones por las qué PHP es tan popular es debido a varias killer applications que dominan el mercado web. Varias de las que vienen a mi mente son WordPress, Drupal, Joomla, etc… Si quieres trabajar como consultor PHP, lo más probable es que una buena parte de tus clientes querrán que sus sitios se integren con algunas de estas aplicaciones.

Hoy en día sin duda WordPress es la killer application más popular escrita en PHP. Recientemente, Matt Mullenweg, el creador del proyecto WordPress, anunció en su discurso de 2011 que WordPress está presente en el 14,7% del top uno del millón de sitios web de acuerdo con la encuesta web técnica de W3. ¡Eso es un montón!

Matt también comentó que muchos desarrolladores configuran sus instalaciones de WordPress con plugins para que funcionen como un CMS o, eventualmente, otros tipos de aplicaciones.

Aunque el código de WordPress está escrito principalmente en código no objeto orientado. Este viene con algunas clases base para implementar algunas funcionalidades comunes, pero la funcionalidad básica está escrita en código procedimental.

Esto hace evidente el hecho de que aunque no está escrito con código orientado a objetos, esto no es necesario para que el proyecto sea reutilizable, incluso para otros fines que están mucho más allá del propósito original de plataforma de blogs.

Pero espera, no me malinterpreten. Este es el sitio PHPClasses. Una de las reglas obligatorias para aceptar la publicación de un componente en el sitio PHPClasses, es que el código que implementa la funcionalidad descrita debe escribirse en forma de clases de código orientado a objetos, de ahí el nombre del sitio: PHPClases.

La razón de este requisito es que las clases encapsulan funcionalidades dentro de un contenedor llamado clase. Si las funciones del componente fueran globales, habría una enorme posibilidad de colisión de nombres al combinar varios componentes de diferentes fuentes.

¿Por ejemplo, si dos componentes tuvieran una función llamada “imprimir”, cómo sabrían las aplicaciones de cuál de los componentes quiere llamar la función “imprimir”?. Las clases facilitan el encapsulamiento de funciones con iguales nombres en diferentes ámbitos.

Pero existe una solución para evitar ese problema sin recurrir a las clases. Simplemente se puede agregar un prefijo a las funciones de cada componente para evitar colisiones de nombres. Por ejemplo, la extensión de MySQL proporciona funciones con el prefijo mysql_.

Esta es una solución muy antigua utilizada en las funciones básicas de PHP desde hace mucho, especialmente porque hasta la versión 3 no hubo soporte a la orientación a objetos en PHP. Pero esta práctica se mantuvo a lo largo de los años incluso hasta hoy.

Es cierto que no es una solución elegante. Evitar la colisión de nombres de funciones en componentes (encapsulación) es simplemente uno de los beneficios de la programación orientada a objetos. Pero nadie puede decir que sin usarla estos no funciona o evita que los proyectos de PHP sean reutilizables.

8. PHP es peor que Ruby On Rails, Python Django, algún framework de lenguaje X
PHP viene con muchas extensiones que proporcionan muchas características pero comparando un lenguaje con un framework completo es como comparar pinos con manzanas.

Creo que es justo comparar PHP con Java, C#, Ruby, Python o “insertar el lenguaje de quieras aquí”. También es justo comparar Ruby on Rails, Django, etc… con un framework similar de PHP. De hecho hay tantos frameworks similares en PHP, que no voy a mencionar ninguno en específico para evitar ser injusto con los aficionados de cada uno de ellos.

Personalmente creo que lo que necesitan los desarrolladores de cualquier lenguaje no es exactamente usar un framework. Lo que necesitan los desarrolladores es adoptar una metodología de desarrollo que les haga productivos.

Una vez que adoptes una metodología de desarrollo consistente, todo se vuelve mecánico y toma menos tiempo producir ese mismo volumen de trabajo, ya que sólo hay que repetir los mismos pasos de desarrollo consistentemente.

Realmente no es necesario utilizar un framework específico para adoptar un método de desarrollo consistente. Por ejemplo, yo no uso ningún framework. Sigo la misma metodología de desarrollo que he estado evolucionado con los años, por lo que hoy en día soy muy productivo con esa metodología.

No entraré en detalles sobre qué método de desarrollo uso, porque ya lo he mencionado en un post anterior sobre frameworks PHP recomendados y otro sobre el desarrollo de componentes PHP de nivel de aplicación.

Sigo buenas prácticas de desarrollo como separar los problemas en componentes de código diferentes, pero no necesito ningún framework MVC. Realmente creo que a menudo MVC es un patrón de diseño insuficiente para usarlo en el desarrollo de aplicaciones Web escalables.

Normalmente separo la aplicación en componentes independientes que pueden distribuirse fácilmente entre diferentes máquinas por medio de capas de servicio. Pero eso puede ser un tema para un post diferente.

El punto principal aquí es que no es necesario utilizar el framework X para ser productivo. Lo que importa es que sigas una metodología de desarrollo coherente que haga tu trabajo mecánico y fluido.

El hecho es que ciertos frameworks imponen una cierta metodología de desarrollo. Esos frameworks están siendo llamados “militantes” porque reflejan la opinión de sus creadores sobre cómo debe ser el desarrollo.

Por lo tanto, si inviertes en el estudio de una metodología que impone un cierto framework y que te hace productivo al implementar aplicaciones Web, bien, quédate con él.

Pero por favor no vengas y digas que el framework X, del que eres un gran fan, es la mejor solución, o peor decir que los desarrolladores de PHP no pueden ser igual o más productivos que tu simplemente porque no utilizan ese framework del lenguaje que tanto te gusta. Es sólo tu opinión basada sólo en tu propia experiencia. No subestimes la experiencia de otros desarrolladores.

9. PHP no es bueno para aplicaciones o sitios Web escalables de alto rendimiento
La forma en que yo lo veo, rendimiento y escalabilidad no son una cuestión de lenguaje, sino más bien una cuestión de arquitectura de la aplicación.

Cuando se trata de rendimiento, como se mencionó anteriormente, PHP es un lenguaje compilado, por lo que su velocidad hoy en día es muy buena para la mayoría con propósitos de aplicaciones Web.

Facebook es, sin duda, el sitio más grande que se ha desarrollado en PHP. Y ellos no parecen tener problemas de escalabilidad debido a su adopción de PHP.

Es cierto que desarrollaron su propio compilador de PHP a C++ para lograr que las aplicaciones PHP se ejecuten a mayor velocidad. También es cierto que para aplicaciones intensivas de CPU, las ganancias de compilar PHP en un lenguaje de bajo nivel pueden ser significativas.

Sin embargo, la realidad es que la mayoría de las aplicaciones Web no son intensiva en el uso de la CPU. Por ejemplo, una de las actividades en las que las aplicaciones Web dedican más tiempo es acceder a bases de datos.

Cuando la aplicación ejecuta una consulta SQL, la mayoría del tiempo se gasta esperando a que el servidor de base de datos ejecute la consulta y devolvuelva los resultados. Esperando la ejecución de una consulta en un servidor de base de datos PHP o en un lenguaje de bajo nivel como C++ va a tomar prácticamente la misma cantidad de tiempo.

Por lo tanto, ahora te preguntaras si PHP puede ser en la práctica igual de rápido que C++ para aplicaciones Web basadas en base de datos, ¿por qué Facebook iba a invertir un gran esfuerzo desarrollando un compilador de PHP a C++?

La respuesta radica en el hecho de que también cambiaron la arquitectura. Ellos no sólo compilan PHP a C++. Ellos toman losscripts de una aplicación PHP completa, y lo compilarlan en única bola de código de C++ y generan un único ejecutable que funciona como un servidor Web multihilo. Observe el énfasis en la palabra multihilo.

Servidores Web multihilo utilizan un único proceso para manejar muchas peticiones HTTP simultáneas. Les ahorra una gran cantidad de RAM porque varios hilos comparten el mismo pool de memoria. Esto significa que terminan necesitando menos servidores Web para controlar la misma carga. Para una empresa como Facebook que tiene miles de servidores, las ganancias son importantes.

Para otros sitios Web pequeños, las ganancias probablemente no son lo suficientemente importantes como para invertir esfuerzo en compilar PHP en C++.

Eso no significa que no debas hacer un esfuerzo para preocuparte por aprender y adoptar buenas técnicas de optimización de arquitectura. Muchas de estas técnicas se han cubierto en este blog en la categoría de artículos de rendimiento de PHP. Vé y léelo cuando te sea posible.

Aún así, la mayoría de esas técnicas no son específicas para un lenguaje. Deben adoptarlas independientemente de si usted desarrollas tus aplicaciones en PHP o en otros lengujes.

10. Los desarrolladores de PHP son más baratos porque no están calificados
La economía funciona siempre en términos de oferta y demanda. Si hay un producto que es querido por muchos clientes y no hay suficiente cantidad del producto en el mercado para la venta, los precios tienden a subir. Por otro lado, si el producto es abundante en el mercado y los clientes no están comprando mucho, los precios tienden a bajar.

Lo mismo vale para el empleo. Si hay más empresas buscando candidatos calificados que los que están disponibles para contratar, los salarios ofrecidos tienden a subir. Por otro lado, si hay más candidatos que empresas dispuestos a contratarlos, los salarios ofrecidos pueden ir hacia abajo.

El mercado de PHP es enorme porque la Web es enorme. Hay muchas empresas dispuestas a contratar desarrolladores web calificados en PHP. Pero para los trabajos más simples, no quieren pagar mucho porque puede encontrar un montón de candidatos con cualificación suficiente. Esos puestos de trabajo pueden ser tan simples como instalar y personalizar aplicaciones PHP existentes.

Pero para empresas que necesitan contratar programadores que no sólo saben PHP, sino también otras habilidades más sofisticados como planificación de arquitectura de aplicaciones e implementación, desarrollo de sitios Web de alta escalabilidad, manejar apropiadamente cuestiones de seguridad, optimización de motores de búsqueda, etc., las empresas tienden a pagar mejores salarios porque los desarrolladores con todos esos títulos son escasos.

Por lo tanto, no es tanto un problema de los desarrolladores PHP. Es más un asunto de las calificaciones que son demandadas por los tipos de trabajos en PHP que requieren habilidades en PHP.

Otras Ideas equivocadas sobre PHP
Bien, la lista de ideas falsas sobre PHP no termina aquí. Sólo mencioné algunos que me parecieron más importantes. Podría mencionar unos cuantos más pero tienes el punto.

Estoy seguro que algunos de los conceptos erróneos que se extienden por PHP son por algún odio hacia PHP. Creo que odiar es una pérdida de tiempo. PHP es un lenguaje. Los lenguajes de programación son sólo herramientas para hacer un trabajo.

Un buen profesional debería conocer más de un lenguaje para aprovechar más las oportunidades que puedan aparecer en sus carreras. Así que mi consejo es si amas u odia PHP, no sólo te mantengas con PHP sino a ese otro lenguaje que prefieres en ves de PHP.

Traté de cubrir varios tipos de ideas equivocadas sobre PHP que hacen a las personas evitarlo erróneamente, y pierden oportunidades. Estoy seguro que hay otras ideas equivocadas sobre PHP que están siendo distribuidas por personas que pierden el tiempo luchando contra la popularidad de PHP.

¿Qué otras ideas equivocadas encontraste que están siendo distribuidas y que sientes que sería importante aclarar para beneficio de aquellos que aman u odian PHP? Por favor, no dudes en informar sobre otras ideas equivocadas o comentarios sobre las que se mencionan en este artículo.

Artículo Original de Manuel Lemos , Traduccion CodeMaxter

Top 10 Wrong Ideas About PHP That You Should Get Right from PHPClasses

Introduction

Recently I found an article in the DZone site titled I like PHP by Cedric Beust. Actually it is a repost of the original article published first on Cedric’s own blog.

The article got my attention for several reasons. One of them is the fact that the article is written by a Java fan and was reposted on a section of the DZone site called Java Lobby. It is a bit surprising finding such type of confession from a Java fan.

I like this article not merely because it praises some important aspects about PHP but rather because it is mostly accurate. That is another reason why the article got my attention.

In the article certain PHP features are highlighted by a developer that is fan of another language. Probably he hoped that Java provides those PHP features. At least while Java does not provide those features, he says he will be enjoying PHP as well. Good for him for being open minded.

Anyway, the main reason why I decided to write this post is not so much about that article, but rather about a comment found below in the DZone article page by somebody named Matt Young.

Matt goes on contesting some of the claims of the article. Most of his arguments are inaccurate, just to put it nicely. To be quite frank most of those arguments are just common plain wrong ideas that many people have about PHP.

I have seen many of those arguments over and over again being spread by PHP haters. Actually the fact that there are developers that hate PHP with a passion feels very odd to me. Not that I mind people bothering to hate PHP. It seems to me that they are losing so many opportunities that PHP provides to millions of developers that do not have such hard feelings.

Therefore I decided to write this article with the intention of helping those haters to see PHP from a more positive side that even they can take advantage.

I am sure I will not be able to convince those that are so obcessed in campaigning against PHP because they are extreme fans of other languages. I hope at least I can provide useful information to those that are willing to help contesting those wrong ideas about PHP, so PHP gets more respect from people that were mislead into believing in those wrong ideas.

Top 10 Wrong Ideas About PHP

Here follows a list of some of more common wrong ideas about PHP. I just presented the top 10 that I find more relevant, but I could have even listed more. It is that 10 is just round number that people are used to find more frequently in top listings. 🙂

1. PHP is not a compiled language (it is interpreted)

First let me get a bit more technical to explain what this means. A compiled language is one that needs to convert source code in that language into a sort of machine code before it can be executed. An interpreted language is one that allows its code to be executed directly from the source text without a compilation step (convert source text into executable machine code).

PHP is not an interpreted language since PHP 4, which was launched in the year 2000. It is not the first time that I cover this subject in this blog. Previously I have written a popular article about PHP compiler engines performance. Let me just stick to the essential concepts that matter to clarify this subject.

When a PHP script is executed, first the PHP source code is compiled by the Zend engine into machine code data named Zend opcodes. These opcodes are stored in the RAM. Then those opcodes are executed to actually run the script.

Diagram of the compilation of PHP source code into Zend Engine opcodes

So PHP is really a compiled language just like Java, C# and others. Otherwise it would be rather slow.

Usually the compiled PHP machine code (Zend opcodes) are not saved to files because it is not necessary. But if that is important to you, there are extensions that can output compiled PHP code to files.

By default, if you run the same script again, PHP source code needs to be recompiled into the RAM every time it is executed. However, there several opcode caching extensions that can save the compiled PHP opcodes to shared memory, so next time a PHP script executed for a different Web server request, the original source no longer needs to be recompiled. It is just loaded from shared memory, thus saving a lot of processing time.

The use of an opcode cache extension is thorougly recommended for performance reasons, especially on busy sites. There are several free opcode caching extensions that you can use.

So, as you may understand by now, the PHP code execution engine is quite sophisticated these days. But if you need something even more sophisticated, there is the HipHop for PHP compiler. This is an Open Source project developed by Facebook to take the PHP performance to the extreme. It compiles PHP source code into C++, which is then compiled into native machine code into a single Web server binary or a standalone executable program. Facebook uses it to run most of their site.

There are also other PHP compiler projects that convert PHP code into Java bytecodes or .NET assemblies. More details can be found on the PHP compiler performance article already mentioned above.

2. PHP cannot do X (access memory, control hardware devices, or some unusual purpose)

PHP is an extensible language. If you need something that the main PHP distribution does not implement, you can create PHP extensions, usually by writing some C or C++ code. So PHP can do anything that C or C++ can do.

There are tens, if not hundreds of PHP extensions. Many of them are shipped built-in the main PHP distribution. If you need something that is not built-in PHP, you can always check the PECL PHP extension repository. This is the official repository for less popular PHP extensions written in C or C++ code.

If there is no extension to do something that you need, maybe that is because you have an unusual need. Probably you are addressing a new problem or it is something that nobody else has a need for. So, you can always develop a new extension yourself. If you are not capable of developing C or C++ code, you can always hire another developer to do it for you. So you are never stuck without a solution.

3. PHP cannot do something that can be done in language X

I doubt that there many relevant things that you cannot do in PHP that you can do in other languages. Maybe you can do things in other languages using different programming styles but that does not mean that you cannot develop the same features in PHP, given all the available PHP extensions.

Still, if you find something that can only be done in some other language or you have to rely in existing components written in that language, you can always try to interface with code written in other languages using special PHP extensions available for that purpose.

This is not a very well known fact, probably because it is not something that has great demand, but there PHP extensions that let you execute code in other languages from PHP scripts, like code in: Java, C# (.NET), Python, Perl, Lua, JavaScript using either V8 or SpiderMonkey engines.

Oh, wait, there is no Ruby extension for PHP as you may have noticed. As I said, that is probably because nobody has such an odd need. Still, if you really have that need, maybe you can convert Ruby into Java using JRuby and then you can use the PHP Java extension to run the converted Ruby code. The same goes for other less popular languages.

It is a long shot that may make you wonder if it really makes sense, but at least PHP does not leave you without a solution.

4. PHP is only for Web development

PHP most common use is indeed for Web application development. Still you can run PHP outside a Web server using the PHP CLI (Command Line Interface) executable. It is a program that can be started from the command line shell for performing all sorts of operations, being Web site related or not.

Even CPU intensive applications are developed in PHP and run outside a Web server using the PHP CLI program, like for instance sending newsletters to many subscribers. The PHPClasses itself sends millions of newsletter messages every month using the PHP CLI program.

You can even create desktop applications to run on Windows, Linux, Mac or any other Unix flavor using the PHP-Gtk extension. You can also develop Windows specific applications or even Windows services using extensions like WinBinder and other PHP Windows specific extensions.

It is not as if there is great demand for developing these kinds of operating system specific applications, but if you need them, you can develop them in PHP too if you want.

5. PHP is controlled by only one company (Zend)

If you have already read about the PHP history you can realize that PHP was created by Rasmus Lerdorf in 1994. Over time Rasmus was joined by tens or even hundreds of other developers, including Andi Gutmans and Zeev Suraski, the founders of Zend, as well other core developers that work (or at least worked) for Zend.

I think it is only natural that Zend developers will always try to influence PHP development, so it takes directions that are convenient to their business. After all they have invested their whole business in PHP. If PHP development takes a route that makes Zend irrelevant, it would probably kills their business.

Still stating that PHP developement is controlled only by one company seems to be a great exaggeration. The fact is that PHP was developed and continues to be developed by many more people that are not associated with Zend.

There are even core developers that work for Microsoft, like Pierre Alain Joye, a long time PHP core developer that was hired by Microsoft in the recent years to make PHP run well with Windows and other Microsoft products. There are also developers from Oracle, not just to take care of Oracle database extensions, but also MySQL, which is now also an Oracle product since they acquired Sun.

The fact is that those PHP core developers that are connected to Zend, Microsoft, Oracle or other companies, are just a minority, despite their influence. The majority of core developers are not connected with any company.

If you are concerned that those companies can be evil and try to influence the development of PHP to go in the wrong direction, rest assured that all the other core developers that are not tied to any company are also concerned and watching out for any wrong moves. If you tried to watch the discussions in the PHP internals list for a while you probably have already realized that.

6. PHP documentation is bad or insufficient

This is probably the most amazing wrong claim I have seen, but I thought I should mention it because I have seen it more than once. Actually I even saw somebody stating that PHP documentation is so bad that it needs the user comments to fix it.

If there is only one good thing about PHP, that is certainly the documentation. The documentation is well structured, clear and, given the necessary time to the documentation team, very complete. The user comments that appear in documentation pages only make it even more rich and complete.

I have yet to see any other software project, Open Source or not, that has better documentation than PHP. The fact that it includes user comments qualify the PHP documentation project to be titled: Documentation 2.0 – used enhanced documentation.

The PHP documentation team does an amazing job. Not only they take care of the main documentation in English, but they also have teams dedicated to translate it to tens of other idioms. That is certainly part of the reason why PHP is so popular everywhere in the world. Kudos to everybody that helps in the PHP documentation.

Still the PHP documentation team cannot do miracles. The aspects that PHP covers are so extensive, that it is impossible to know every obscure detail that may make PHP work in a different way that it is expected in certain platforms. There can be bugs in PHP that may cause incorrect behavior, but that is not the fault of the PHP documentation team.

That is why the user comments are so important. They provide additional information that lets other PHP users learn about unexpected behavior that the documentation team could not anticipate.

Additionally, you may often find in documentation user comments sample code to perform certain tasks that PHP users wished that PHP functions could do. That makes PHP documentation with user comments even richer than it would be without the comments. Isn’t that amazing?

7. PHP projects are not reusable because they are not Object Oriented

One of the reasons why PHP got so popular is the due to several killer applications that dominate the Web market. Several of them come to my mind like WordPress, Drupal, Joomla, etc.. If you want to work as a PHP consultant, chances are that a good part of your clients will want you to integrate their sites with some of these applications.

Nowadays WordPress is certainly the most popular of the PHP killer applications. Recently, Matt Mullenweg, the creator of the WordPress project, announced in his State of the Word 2011 speech that WordPress is present in 14.7% of the top one million Web sites according to the W3 Techs Web survey. That is a lot!

Matt also commented that many developers tweak their WordPress installations with plug-ins to make it work as a CMS or eventually other types of applications.

Still WordPress code is mostly written in non-Object Oriented code. It ships with same base classes to implement some common functionality, but the core functionality is written in procedural code.

This makes evident the fact that not being written with Object Oriented code is not necessary to make the project reusable, even for other purposes that are way beyond the original blogging platform purpose.

But wait, do not get me wrong. This is the PHPClasses site. One of the rules that is mandatory to have PHP components accepted for publication in the PHPClasses site, is that the code that implements the described functionality must be written in the form of classes of Object Oriented code, thus the name of the site: PHP Classes.

The reason for this requirement is that classes encapsulate functionality inside a container called a class. If component functions were global, there would be a greater chance of name clashing when combining multiple components of different sources.

For instance, if two components had a function named “print” , how would the applications tell which of the components they want to call the function print? Classes make it easier to encapsulate functions with the same names within different scopes.

But there is a workaround to avoid that problem without resorting to classes. You can just add a prefix to the functions of each component in order to avoid name clashing. For instance, the MySQL extension provides functions with the prefix mysql_.

This is a very old solution used in the core PHP functions since ever, specially because until version 3 there was no Object Oriented support in PHP. But this practice was kept throughout the years even until today.

Admittedly it is not an elegant solution. Component function name clashing (encapsulation) is just one of the benefits of Object Oriented Programming. But nobody can say that it does not work, or that it prevents PHP projects from being reusable.

8. PHP is worse than Ruby On Rails, Python Django, X language Framework

PHP comes with many extensions that provide many features but comparing a language with a full stack framework is like comparing pines with apples.

I think it is fair to compare PHP with Java, C#, Ruby, Python, or “insert the language of the jour here”. It is also fair to compare Ruby on Rails, Django, etc.. with a similar PHP framework. As a matter of fact there are so many similar frameworks in PHP, that I am not mentioning anyone in specific here to avoid being unfair to the fans of each of them.

Personally I think that what the developers of any language need is not exactly to use a framework. What developers need is to embrace a methodology of development that makes them productive.

Once you adopt a consist development methodology, everything becomes mechanic and you take less time to produce that same volume of work, as you just need to repeat the same development steps consistently.

You do not really need to use a specific framework to adopt a consistent development method. For instance, I do not use any framework. I just follow the same development methodology that I have been evolving over the years, so nowadays I am quite productive using that methodology.

I am not going into details about what development method I use because I already mentioned it in a past post about recommended PHP frameworks and another about developing PHP application level components.

I follow good development practices like separating concerns into different code components, but I do not need any MVC framework. Actually I feel that MVC is often an inadequate design pattern for use in the development of scalable Web applications.

I usually separate application concerns in components that are can be distributed easily among different machines by the means of service layers. But that may be a subject for a different post.

The main point here is that you do not need to use the framework X to be productive. What matters is that you follow a consistent development methodology that makes your work mechanic and fluent.

The fact is that certain frameworks impose a certain development methodology. Those frameworks are being called “opinionated” because they reflect the opinion of their creators about how development should be.

So, if you invested in studying a methodology that a certain framework imposes and that makes you productive when you implement your Web applications, fine, stick with it.

But please do not come and tell that the framework X, of which you are a big fan, is the best solution, or worse like saying that PHP developers cannot be equally or more productive than you just because they do not use that other language framework that you love so much. That is just your opinion based just in your own experience. Do not underestimate other developers’ experience.

9. PHP is not good for high performance scalable Web sites or applications

The way I see it, performance and scalability are not a matter of language, but rather a matter of application architecture.

When it comes to performance, as mentioned above, PHP is a compiled language, so its is speed is nowadays very good for most Web application purposes.

Facebook is certainly the largest site that was developed in PHP. They do not seem to have scalability issues due to their adoption of PHP.

It is true that they developed their own PHP to C++ compiler to make PHP applications run at top speed. It is also true that for CPU intensive applications, the gains of compiling PHP into a lower level language can be significant.

However, the reality is that most Web applications are not CPU intensive. For instance, one of the activities that Web applications spend most time on is accessing databases.

When your application executes a SQL query, most of the time is spent waiting for the database server to execute the query and return the results. Waiting for a query to execute on a database server in PHP or in a lower level language like C++ is going to take practically the same amount of time.

So, now you may wonder, if PHP can be in practice equally as fast as C++ for database based Web applications, why did Facebook people went through such a great effort to develop a PHP to C++ compiler?

The answer lies in the fact that they also changed the architecture. They do not just compile PHP into C++. They take the scripts of whole PHP applications, compile them into single ball of C++ code and generate a single executable that works as a multi-threaded Web server. Notice the emphasis on the multi-threaded word.

Multi-threaded Web servers use a single process to handle many simultaneous HTTP requests. That saves them a lot of RAM because multiple threads share the same memory pool. This means that they end up needing less Web server machines to handle the same load. For a company like Facebook that has thousands of server machines, the gains are significant.

For most other smaller Web sites, the gains are probably not significant enough to go through the effort of compiling PHP into C++.

That does not mean you should not make an effort to educate yourself to learn and to adopt good architecture optimization techniques. Many of those techniques have been covered in this blog in the PHP performance articles category. Go and read them when you can.

Still, most of those techniques are not language specific. You should adopt them regardless whether you develop your applications in PHP or other languages.

10. PHP developers are cheaper because they are not qualified

The economy works all in terms of offer and demand. If there is a product that is wanted by many customers and there is not enough quantity of the product on the market for sale, the prices tend to go up. On the other hand, if the product is abundant on the market and the customers are not buying it much, the prices tend to go down.

The same goes for jobs. If there are more companies looking for qualified candidates than those that are available for hire, the offered salaries tend to go up. On the other hand, if there are more candidates than companies willing to hire them, the offered salaries may go down.

The PHP market is huge because the Web is huge. There are many companies willing to hire qualified PHP Web developers. But for simpler jobs, they do not want to pay much because they can find plenty of candidates with sufficient qualifications. Those jobs can be as simple as installing and customizing existing PHP applications.

But for companies that need to hire developers that not only know PHP, but also have other more sophisticated skills like application architecture planning and deployment, developing high scale Web sites, handle security matters properly, search engine optimization, etc., companies tend to pay much better salaries because developers with all those qualifications are scarce.

So, it is not so much a matter a problem of the PHP developers. It is more a matter of the qualifications that are demanded by the types of PHP jobs that require PHP skills.

Other Wrong Ideas About PHP

Well, the list of misconceptions about PHP does not end here. I just listed a few that I found more important. I could mention a few more but you got the point.

I am sure that some of the misconceptions are spread by PHP that for some reason hate PHP. I think hating is such a waste of time. PHP is just a programming language. Programming languages are just tools to do a job.

A good professional should know more than just one language to eventually take more advantage of the opportunities that may show up in their careers. So my advice is that whether you love or hate PHP, do not just stick to PHP or that other language that you prefer instead of PHP.

I tried to cover several types of wrong ideas about PHP that make people erroneously avoid it, and so they lose opportunities. I am sure there are other wrong ideas about PHP that are being spread by people that waste time fighting the popularity of PHP.

What other wrong ideas did you find are being spread that you feel it would important to clarify for the benefit of those that love or hate PHP? Please, feel free to tell about other wrong ideas or comment on those that were mentioned in this article.

La clase Upload and Compress

upcom

Upload And Compress es una clase que permite crear y borrar archivos ZIPs en el hosting donde la instales, a estos archivos puedes subir tus archivos preferidos como imágenes, datos, etc… de tal manera que puedas compartir tus archivos .zip con tus amigos o clientes.

En la actualidad los clientes de correo como gmail o hotmail ofrecen descargar los archivos adjuntos comprimidos en un .zip, UpCom realiza algo similar pero con mas opciones, a medida que se van subiendo archivos se van agregando al zip elegido , con un nombre diferente generador aleatoriamente (hasta su version 0.4.1) de tal manera que si subes un archivo con un nombre similar a otro que ya estaba alli nunca se sobreescriban, asegurando que tus contenidos quedará intactos.

En las próximas versiones voy a añadir mas funciones, como crear carpetas y borrarlas , verificar que no haya nada en una carpeta que se quiera borrar, colocar al inicio de cada archivo que se comprima el nombre original del archivo seguido del sha1 para el ID único, poder subir cualquier tipo de extensión sin problemas, y generar un RSS de los archivos que se han comprimido en cada paquete.. interesante no?

Puedes descargarla desde www.phpclasses.org/upcom

Este es el change log:

 

/*
/*
Class Name : Upload and Compress
Abreviation : UpCom
Author: Roberto C. Aleman
Web : www.ventics.com
License: BSD License

Description:
UpCom class lets you upload a file with declared due to a folder, and add the file to upload a
compressed file that exists in that folder, just shows a link to the archive so that it can be shared,
as security for overwrite no uploads are renamed and packaged using SHA1 and select 10
characters with a unique ID, likewise, the uploaded file to the temporary directory is deleted after
being packed …

Requeriments: PHP5

Install: upload this package to favorite folder on your hosting and create de “zips” folder to start

Change log:

0.2.1, the class can it upload and compress file in zip file with this command

$new_upload -> up(‘package.zip’,’/zips/package.zip’,$new_upload ->rand_name(‘jpg’));

0.4.1, the class can :

-Create New Zip
-Delete Zip package
-UpLoad file to favorite package, you can select the package to upload

0.6.0, the class have this new options :

– Detect the file extension
– Keeps the original name of the file and generates a final name to be compressed in the format: Original File Name + “-” + Random Number + “.” +Original File Extension
– Allow choice the numbers for the random generation

0.8.0, the class have this new options :

– Show a list of all files in each .ZIP package.. wow! to monitorize the upload!!

Next Version:
– Delete files in package
– RSS of files in each package, wow!! to monitorize the upload!!