downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

bcompiler_load_exe> <bcsub
[edit] Last updated: Mon, 01 Nov 2010

view this page in

VIII. Compilador de PHP bytecode

Introdução

Atenção

Este módulo é EXPERIMENTAL. Isso quer dizer que o comportamento neste módulo --- incluindo suas funções e seus nomes, e TUDO mais que está documentado sobre esse módulo --- poderá mudar em futuras versões do PHP, SEM QUALQUER NOTIFICAÇÃO. Esteja avisado, e use este módulo por sua própria conta e risco.

Bcompiler foi escrito por várias razões:

Para codificar script em uma aplicação PHP proprietária
Para codificar algumas classes e/ou funções em uma aplicação PHP proprietária
Para disponibilizar a produção de aplicações php-gtk que poderiam ser usadas em clientes desktops, sem precisa do php.exe.
Para estudar a possibilidade de fazer um conversor de PHP para C

O primeiro desses objetivos é alcançado usando as funções bcompiler_write_header(), bcompiler_write_file() e bcompiler_write_footer() Os arquivos bytecode podem ser escritos ou como não-compactados ou planos. Para usar o bytecode gerado, você pode simplesmente incluí-lo com instruções include ou require.

O segundo desses objetivos é alcançado usando as funções bcompiler_write_header(), bcompiler_write_class(), bcompiler_write_footer(), bcompiler_read(), e bcompiler_load(). Os arquivos bytecode podem ser escritos ou como não-compactados ou planos. O bcompiler_load() lê um arquivo compactador bzip que contem bytecodes, o que tende a ser 1/3 do tamanho original do arquivo.

Para criar arquivos do tipo EXE, bcompiler tem que ser usado com um arquivo de SAPI modificado ou uma versão do PHP que tenha sido compilada como uma biblioteca compartilhada. Nesse cenário, bcompiler ler o bytecode compactador do fim do arquivo executável.

bcompiler pode aumentar performance em volta de 30% quando usado com bytecodes não-compactados apenas. Mas lembre-se que bytecode não-compactado pode ser até 5 vezes maior que o código-fonte original. Usar compactação de bytecode pode evitar gasto de espaço, mas descompactar requer muito mais tempo do que avaliar um fonte. bcompiler também não faz nenhuma otimização de bytecode, isso pode ser acrescentado no futuro...

Em termos de proteção de código, é seguro dizer que é seria impossível recriar o código-fonte exato do qual ele foi criado, e sem os comentários acompanhando o código-font. Seria efetivamente inútil usar o bcompiler para recriar ou modificar uma classe. No entanto, é possível recuperar dados de um arquivo bytecode compactado - então não ponha suas senhas pessoais ou coisa do tipo nele.

Instalação

Nota curta de instalação:

  • Você precisa de pelo menos o PHP 4.3. para a compressão funcionar

  • Para instalar no PHP 4.3 e superior no shell do unix digite pear install bcompiler

  • Para instalar no Windows, até o mecanismo de distribuíção de pacotes binários estiver completo, favor procure os arquivos da lista de discussão pear-general pelos pacotes pré-compilados. (ou mande um e-mail para a lista de você não conseguir achar uma referência).

  • Para instalar em versões mais antigas, você precisa fazer algumas pequenas alterações ao binário compilado.

  • untar o arquivo bcompiler.tgz no diretório php4/ext.(Pegue o diretamente da PECL http://pecl.php.net/get/bcompiler)

  • Se o novo diretório for chamado algo como bcompiler-0.x, então você deve renomeá-lo para bcompiler (exceto se você só quiser compilá-lo como um módulo do php auto-contido).

  • Se você estiver usando versões anteriores ao PHP 4.3, você terá que copiar os arquivos Makefile.in.old para Makefile.in e config.m4.old para config.m4.

  • execute phpize no diretório ext/bcompiler

  • execute ./buildconf no diretório php4

  • execute o script configure com a opção --enable-bcompiler e as suas outras opções

  • make; make install

  • E por hoje é só pessoal.

Informação para contatos

Se você tiver comentários, resoluções de bugs, melhoramentos ou quer ajudar a desenvolver essa fera, você pode me enviar um e-mail para alan_k@php.net. Qualquer ajuda é muito bem-vinda.

Índice
bcompiler_load_exe -- Lê e cria classes a partir de um arquivo exe do bcompiler
bcompiler_load -- Lê e cria classes a partir de um arquivo compactado pelo bzip
bcompiler_parse_class -- Lê o bytecode de uma classe e chama para uma função do usuário
bcompiler_read -- Lê e cria uma classe a partir de um handle de arquivo
bcompiler_write_class -- Escreve uma classe definida como bytecode
bcompiler_write_constant -- Escreve uma constante definida como bytecodes
bcompiler_write_exe_footer -- Escreve na posição de início e continua até o fim do arquivo de tipo EXE
bcompile_write_file -- Escreve um arquivo-fonte do PHP como bytecodes
bcompiler_write_footer -- Escreve o caracter \x00 para indicar o Fim dos dados compilados
bcompiler_write_function -- Escreve uma função definida como bytecodes
bcompiler_write_functions_from_file -- Escreve todas as funções definidas em um arquivo como bytecodes
bcompiler_write_header -- Escreve o cabeçalho do bcompiler


bcompiler_load_exe> <bcsub
[edit] Last updated: Mon, 01 Nov 2010
 
add a note add a note User Contributed Notes Compilador de PHP bytecode
mail - at- albertkok - dot - com 01-Oct-2009 04:06
It's been a while since my past post, but yes, I'm still using bcompiler. I just found another problem that I think you should be aware of. It took me hours to find.

It pretty much comes to this: When compiling on a 64-bit Linux operating system, your compiled code will NOT run on a 32-bit version, and visa versa. It will merely echo the file's content.

Regards,
Albert Kok
codeslinger+uph80111 at compsalot dot com 11-Jan-2008 09:16
try this, I believe that it will solve the problem with __FILE__

<?php

   
eval("\$Foo = dirname(__FILE__);");
    echo
"\n<br>FILE = '$Foo'\n";

?>
Albert Kok 24-Oct-2007 04:08
A few notes to succesfully configure PHP5 to load bcompiler.

In case of using Debian/Ubuntu Linux: When installing from the PECL (PEAR) package, make sure you have the php5-dev library installed in your system (apt-get install php5-dev).

Newer versions of Ubuntu may error out while installing bcompiler thru PECL, asking you to reinstall bzip2. This will not fix the installation. Instead, install the libbz2-dev library (apt-get install libbz2-dev) and try installing bcompiler from PECL again.

After installing bcompiler from PECL, don't forget to make sure you load the bcompiler.so library in your PHP configuration for the new bcompiler functions to become available. This is done by adding the following line to the bottom of your php.ini file(s):

extension=bcompiler.so

If you were to use the bcompiler functions thru your webserver, you need to restart it to reload the php configuration.

Regards,
Albert Kok
roberto at spadim dot net dot br 24-Jun-2007 10:33
hello guys, since bencoder don't work for __FILE__ constants i have a bcompiler script working, anyone that want it can send me an email
the source is 100% compatible with original file, the only problem is php5 new function methods that
<?
if (!function_exists('function_name')){
 function
function_name()
}
?>
don't work but it's a php5 new method for understand bytecode
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)
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.

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

 
show source | credits | sitemap | contact | advertising | mirror sites