Compilador Bytecode de PHP

VIII. Compilador Bytecode de PHP

Introducci贸n

Aviso

Esta extensi贸n es EXPERIMENTAL. Esto significa que el comportamiento de esta extensi贸n, los nombre de sus funciones y en definitiva TODO lo documentado sobre esta extensi贸n, puede cambiar en una futura versi贸n de PHP SIN AVISO. La advertencia queda hecha, y utilizar esta extensi贸n queda bajo su propia responsabilidad.

Bcompiler fue escrito por varias razones:

Para codificar un script entero en una aplicaci贸n propietaria escrita en PHP.
Para codificar algunas clases y/o funciones en una aplicaci贸n propietaria escrita en PHP.
Para permitir la producci贸n de aplicaciones PHP-GTK que puedan ser usadas del lado del cliente, sin necesidad de un php.exe.
Para hacer viable el estudio de un convertidor PHP al lenguaje de programaci贸n C.

La primera de estas metas se pueden alcanzar usando las funciones bcompiler_write_header(), bcompiler_write_file() y bcompiler_write_footer(). Las funciones de bytecode pueden estar escritas tanto descomprimidas, como en texto plano. Para usar el bytecode generado, simplemente puede incluirlo con sentencias include o require.

La segunda de estas metas se pueden alcanzar usando las funciones bcompiler_write_header(), bcompiler_write_class(), bcompiler_write_footer(), bcompiler_read(), y bcompiler_load(). Los archivos bytecode pueden estar escritos tanto descomprimidos, como en texto plano. La funci贸n bcompiler_load() lee un archivo bytecode comprimido con bzip, el cual suele ser 1/3 del tama帽o original del archivo.

Para crear archivos del tipo exe, bcompiler tiene que ser usado con un archivo sapi modificado o una versi贸n de PHP que haya sido compilada como una librer铆a compartida. En este escenario, bcompiler lee el bytecode comprimido desde el final del archivo exe.

bcompiler puede mejorar su desempe帽o cerca del 30% cuando s贸lo se usa con bytecodes descomprimidos. Pero tenga presente que un bytecode descomprimido puede ser hasta 5 veces m谩s grande que el c贸digo fuente original. Usando la compresi贸n bytecode puede ahorrarle espacio, pero la descompresi贸n requiere mucho m谩s tiempo que analizar un c贸digo. Adem谩s, bcompiler no lleva a cabo alguna optimizaci贸n bytecode; esto pudiera ser agregado en el futuro...

En cuanto a la protecci贸n del c贸digo, es seguro decir que ser铆a imposible recrear el c贸digo fuente exacto desde el cual se construy贸, y sin la compa帽铆a de comentarios en el c贸digo fuente. Efectivamente ser铆a in煤til usar los bytecodes de bcompiler para recrear y modificar una clase. Sin embargo, es posible recuperar informaci贸n desde un archivo bytecode de bcompiler - as铆 que no coloque sus contrase帽as o cualquier otra cosa privada en 茅l.

Instalaci贸n

Nota de instalaci贸n corta:

  • Necesitar谩 tener al menos PHP 4.3 para que la compresi贸n funcione.

  • Para instalar en PHP 4.3 o mayor, escriba en el int茅rprete de comandos de UNIX pear install bcompiler.

  • Para instalar en Windows, hasta que est茅 listo el mecanismo para el paquete de distribuci贸n binario, por favor busque los paquetes pre-construidos en la lista de correo pear-general. (o env铆eles un correo electr贸nico si no pudo hallar una referencia).

  • Para instalar en versiones anteriores, necesita hacer algunos cambios ligeros al paquete.

  • extraer el archivo bcompiler.tgz en el directorio php4/ext. (Obt茅ngalo directamente desde PECL http://pecl.php.net/get/bcompiler).

  • Si el nombre del nuevo directorio no es similar a bcompiler-0.x, deber铆a cambiarle el nombre a bcompiler (a menos que s贸lo desee construirlo como un m贸dulo PHP contenido desde de s铆 mismo).

  • Si est谩 usando versiones anteriores a PHP 4.3, entonces necesitar谩 copiar el archivo Makefile.in.old a Makefile.in, y config.m4.old a config.m4.

  • ejecute phpize en ext/bcompiler.

  • ejecute ./buildconf en php4 .

  • ejecute configure con --enable-bcompiler (y otras opciones que use).

  • make; make install

  • eso es todo.

Informaci贸n de contacto

Si tiene comentarios, soluciones a fallos, mejoras o quiere ayudar a desarrollar esta bestia, puede enviarme un correo-e a alan_k@php.net. Cualquier ayuda es bienvenida.

Tabla de contenidos
bcompiler_load_exe -- Lee y crea clases desde un archivo exe de bcompiler
bcompiler_load -- Lee y crea clases desde un archivo comprimido bz
bcompiler_parse_class -- Lee los bytecodes de una clase y genera una llamada a una funci贸n definida por el usuario
bcompiler_read -- Lee y crea clases desde un gestor de archivo
bcompiler_write_class -- Escribe una clase determinada como bytecodes
bcompiler_write_constant -- Lee una constante definida como bytecodes
bcompiler_write_exe_footer -- Writes the start pos, and sig to the end of a exe type file
bcompiler_write_file -- Writes a php source file as bytecodes
bcompiler_write_footer -- Writes the single character \x00 to indicate End of compiled data
bcompiler_write_function -- Writes an defined function as bytecodes
bcompiler_write_functions_from_file -- Writes all functions defined in a file as bytecodes
bcompiler_write_header -- Writes the bcompiler header