|
|
 |
VIII. Compilador Bytecode de PHP| 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.
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.
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.
add a note
User Contributed Notes
Compilador Bytecode de PHP
cdsheen+bencoder at gmail dot com
25-Jul-2006 05:58
Here's a script to act as a front-end for bcompiler, which may be very similar to the eA ones:
http://bbs.giga.net.tw/bencoder.php
BENCODER v1.1 - Encode your PHP script using bcompiler
Usage: bencoder [-f] -o FILE file1.php
bencoder [-f] -o OUTDIR file1.php file2.php ...
bencoder [-f] -o OUTDIR -a SRCDIR [-s SUFFIX] [-c] [-r]
-f : force overwriting even if the target exists
-o FILE : the file name to write the encoded script
(default to '-encoded.php' suffix)
-o OUTDIR : the directory to write all encoded files
-a SRCDIR : encode all files in this source directory
-s SUFFIX : encode the files with the SUFFIX extension only (default: php)
-c : copy files those shouldn't be encoded (no by default)
shannah at sfu dot ca
23-May-2006 03:44
>the special constant __FILE__ cannot be handled correctly by bcompiler
> (it will always contain the name of the original file that was compiled).
I would think that this is the preferred behavior anyways since the compilation should be independent from the source code. I would want to be able to compile any part of my source code without having to worry if any constants will change as a result of it. Hence it is better for __FILE__ to contain the name of the original file that was compiled.
arplynn at gmail dot com
28-Apr-2006 08:49
PHP seems to choke on trying to compile PHP5 classes with the private, protected or public modifiers. Additionally, when including files with properly compiled classes on PHP5, it works fine but when php tries to exit it throws a segmentation fault.
It's just not a great idea to use bcompiler for anything other than functions on PHP5, at least for now.
tda at example dot com
07-Feb-2006 05:50
Creating a function after checking if a function exists using function_exists will result in a "Zero Sized Reply" error.
this does NOT work any longer:
if (!function_exists("file_get_contents")) {
function file_get_contents($filename, $use_include_path = 0)
{ ...define your own function here... }
}
Apache returns: "Zero Sized Reply" after compilation.
alan at akbkhome dot com
27-Oct-2005 07:32
Note:
the special constant __FILE__ cannot be handled correctly by bcompiler (it will always contain the name of the original file that was compiled). There is no known way around this, as it is converted to a string by the Zend engine.
| |
| | Citas célebres | Quien de verdad sabe de qué habla, no encuentra razones para levantar la voz. Leonardo da Vinci Pintor e inventor italiano (1452-1519) | | Citas en tu mail | | ©Contenidos Gratis |
| Chiste de... Médicos | | Puntitos molestos | - Doctor, doctor, que veo puntitos moviéndose enfrente de mis ojos.
- ¿Pero las gafas que le mandé no le han ayudado?
- Bueno, ahora veo los puntos mejor que antes. | | Chistes en tu mail | | ©ContenidosGratis |
| Inicio | Acción | Estrategia | Palabras | Puzzles | Solitarios | Foro Trucos |  | Cake Mania Jugadores: 6835 Categoría del juego: Acción Objetivo del juego: Ayuda a Jill a recuperar la pastelería de su abuela llevando su propia pastelería; consigue clientes y gana dinero. |
|  | Rainbow Web Jugadores: 2199 Categoría del juego: Puzzles Objetivo del juego: Rompe un pegajoso hechizo y salva un reino de fantasía en Rainbow Web. Tendrás toneladas de diversión mientras juegas a este mágico desafío para la mente. |
|  | Mahjongg Fortuna Jugadores: 12462 Categoría del juego: Solitarios Objetivo del juego: Velocidad y habilidad mental son las armas más importantes en esta versión de un antiguo juego asiático. Despeja el tablero lo antes posible haciendo clic en las fichas iguales y gánate la fama eterna de la puntuación más alta. |
|  | Chainz 2 Jugadores: 6955 Categoría del juego: Puzzles Objetivo del juego: Entra en el mundo de las combinaciones con Chainz 2: Relinked, emocionante secuela del exitazo del año pasado, Chainz. Gira eslabones y crea combinaciones de 3 ó más. |
|  | Delicious Jugadores: 4405 Categoría del juego: Acción Objetivo del juego: ¿Eres un as de la multitarea? ¿Quieres que tus clientes estén contentos? ¡Pues Delicious es tu juego! Sacia el apetito de los clientes y tenlos contentos; ¡no te arriesgues! |
|  | Bookworm Jugadores: 4568 Categoría del juego: Palabras Objetivo del juego: Junta las letras para formar palabras. ¡Las palabras más largas valen más puntos! |
|  | Zuma Jugadores: 4976 Categoría del juego: Acción Objetivo del juego: Controla el ídolo de la rana de piedra de los antiguos Zuma en este intrigante enigma de acción. ¡Dispara bolas para formar conjuntos de tres, pero si dejas que lleguen a la calavera dorada morirás! |
|  | Jewel of Atlantis Jugadores: 3798 Categoría del juego: Puzzles Objetivo del juego: Descubre la ciudad hundida de la Atlántida y busca valiosos tesoros. Viaja más allá de las profundidades del mar y vive trepidantes aventuras en Jewel of Atlantis. |
|  | Jewel Quest Jugadores: 3727 Categoría del juego: Puzzles Objetivo del juego: Convierte la arena de la antigua selva en oro tan rápido como puedas juntando grupos de 3 elementos. ¡Los grupos más grandes valen más puntos! |
|  | Bejeweled 2 Jugadores: 3659 Categoría del juego: Puzzles Objetivo del juego: Con cuatro modos de juego únicos y fascinantes, nuevas piezas de juego explosivas e imponentes fondos planetarios, Bejeweled 2 es mucho más adictivo que nunca. |
|
|