+1

Transformar qualquer Script em um arquivo Executável (.exe)

criado por Ronaldo Menezes em 24/06/2007 10:26am

Por diversas vezes confrontei-me com as seguintes situações :
- deixar uma aplicação desenvolvida / site no cliente e não ter como proteger o código.
- Depender do browser para execução de script’s
- Depender de utilizar o script via comannd line

Seja por motivo de protecção ao código ou por dar maior agilidade ao processo , hoje utilizo “Bancompile” , script que permite a transformação de qualquer script em um arquivo executável .Após a transformação posso usar o arquivo executável em um “ Scheduler” ou pedir a execução via php utilizando funcoes como “exec” ou “passtrhu”, as quais permitem a execução de um programa externo.

Compilador( “termo usado no mainframe , indica que um programa tem sua sintaxe verificada e ja encontra-se pronto para ser transformado em executável)

Como exemplo, explicarei o script abaixo onde utilizei o compilador para gerar o executável e dar agilidade ao processo de gerar perto de 1300 gráficos dinamicamente.
Neste script utilizo a class “JPGRAPH” , a qual não vou explicar neste artigo.
Os gráficos após serem gerados fazem parte de uma aplicação onde podem ser vistos sem serem gerados no momento pois foram gerados em "background".

Script compilado.php:
<?php
set_time_limit(0);
$datah = date("Y-m-d");
// class jpgraph
include("jpgraph.php");
include("jpgraph_line.php");
// conexao
$link = mysql_connect("ip", "user", "password")
        or die("Não pude conectar: " . mysql_error());
mysql_select_db("db") or die("Não pude selecionar o banco de dados");

$sql = "SELECT * FROM disco ORDER BY volume";
$resulta = mysql_query($sql);
$num_rows = mysql_num_rows($resulta);
$tamanho =  $num_rows ;
while ($row = mysql_fetch_array($resulta)) {
    $vol[] = $row["volume"];
}
for ($i = 0; $i <= $tamanho - 1; $i++) {
    $rep = str_replace('#', '_', $vol[$i]);
    $query = "SELECT DISTINCT
                  data,
                  volume,
                  free_percent
              FROM
                  discodia
              WHERE
                  volume = '$vol[$i]' AND
                  data > '$datah'
              ORDER BY
                  data,
                  volume";
    echo $query . "\n";
    $result = mysql_query($query)    ;
    $linhas =  mysql_num_rows($result);
    // se existe conteudo monta grafico
    if ($linhas > 1) {
        if ($myrow = mysql_fetch_array($result)) {
            do {
                $datax[] = $myrow["data"];
                $volx[] = $myrow["volume"];
                $ydata[] = $myrow["free_percent"];
            } while ($myrow = mysql_fetch_array($result));
        }
        // Create the graph. These two calls are always required
        $graph = new Graph(800, 200,"DISCO.".$rep.".JPG");
        $graph->SetScale( "textlin");
        $tit = "Percentual Free Space no volume  - " . $vol[$i] ;
        $graph->title->Set($tit);
        $graph->SetMarginColor("azure");
        $graph->xaxis->SetTickLabels($datax);
        //$graph->xaxis->SetTextLabelInterval(5);
        $graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8);
        $graph->xaxis->SetLabelAngle(45);
        $graph->img->SetMargin(45,30,30,80);
        $graph->SetShadow();
        //$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5');
        // Create the linear plot
        $lineplot =new LinePlot($ydata);
        $lineplot ->SetColor("darkblue");
        //$lineplot->value->Show()  ;

        // Add the plot to the graph
        $graph->Add( $lineplot);
        
        // Display the graph
        $graph->Stroke("DISCO.".$rep.".JPG");
        unset($datax);
        unset($volx);
        unset($ydata);
    }
}
?>

Utilização do “Bamcompile”

Através de um arquivo .BAT crio o executável conforme descrito na documentação no site do Bamcompile.

bamcompile [-options] infile.php [outfile.exe]
bamcompile [-options] project_directory mainfile.php [outfile.exe]
bamcompile projectfile.bcp

Opções: ( Ver no site acima documentação)
    -w 
    -c  
    -d 
    -e:extension.dll Embed and use PHP extension
    -i:icon.ico Add icon to exe

O Arquivo utilizado (dll) encontra-se em php/extensions, neste caso como a intenção é gerar gráficos utilizei GD.

compilado.bat:
bamcompile -e  php_gd2.dll compilado.php
pause

Resultado :

Compilado.exe


Observar que um pequeno script fica com o tamanho de muitos KB, pois no executável esta incluso “php.exe”.

Bamcompile: http://www.bambalam.se/bamcompile/
Suporte a PHP 4 somente.

Ronaldo Menezes

Comentários:

Mostrando 1 - 10 de 25 comentários
Dá pra fazer tudo com ele, entrei no site deles aqui e vi os exemplos, até aplicação em banco de dados com dbgrid tem, pra quem não viu vale apena ver lá...
06/10/2007 7:28am (~16 anos atrás)

Olá Ronaldo, fiz um gerenciador de webhost no delphi e tentei criar os plugins pra que ele pudesse interagir com o Cpanel e DirectAdmin, sendo que pra fazer isso eu tenho que incluir no caso do CPanel um arquivo .inc "Accounting.php.inc", tentei muito, tanto que até desisti, mas o que você tá apresentando aí pode solucionar o meu problema. Eu só tenho uma dúvida, e as imagens, folhas de estilo, includes(os outros scripts php), js ? tem como trabalhar usando tudo isso ?

Abraços e parabéns pelo artigo,
Leonardo Gazio.
06/10/2007 7:09am (~16 anos atrás)

Bom dia

Realmente nao sei informar sobre utilizaçao com o GTK2

Desculpe

Ronaldo Menezes
31/08/2007 1:31am (~16 anos atrás)

Teria uma forma de utiliza-lo para compilar codigos PHP-GTK2?
30/08/2007 10:21am (~16 anos atrás)

Ailton

O MySQL não é mais ativado por padrão, assim a DLL php_mysql.dll deve ser ativada dentro do php.ini. Também, o PHP precisa acessar a biblioteca de cliente do MySQL. Um arquivo chamado libmysql.dll é incluso na distribuição PHP do Windows e para permitir que o PHP converse com o MySQL este arquivo precisa estar disponível para o sistema Windows na variavél de ambiênte PATH. (retirado do manual )


Att

Ronaldo
16/07/2007 2:51am (~16 anos atrás)

Bom dia

Aconselho voce a ler o manual do PHP5 .

att


Ronaldo
16/07/2007 2:12am (~16 anos atrás)

Ailton Silva disse:
Valew, pela dica, consegui instalar este pacote no windows vista, mas quando executei os arquivos php que desenvolvi no php4 deu erro, veja ai o exemplo:

$sel="SELECT * FROM titulos WHERE cod_titulo!=''";
$exec=mysql_query($sel,$conexao) or die ('SQL sel está Errada !' . mysql_error());
$tab=mysql_fetch_array($exec);
$title=$tab["desc_titulo"];
mysql_free_result($exec);

Tá retornando o seguinte erro:

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\wamp\www\adesal_off\index.php on line 8
SQL sel está Errada !

Será que no PHP5 o comando mysql_query() não é válido ? No php4 funciona corretamente.

Aguardo sua colaboração. Agradecido.
15/07/2007 9:37am (~16 anos atrás)

Eric Carvalho disse:
Ailton, use o WAMP que já vem quase todo pré definido e é muito fácil de instalar e configurar

wampserver.com/download.php
13/07/2007 12:26am (~16 anos atrás)

Ailton Silva disse:
Ronaldo, era isso que eu intentava fazer inicialmente, mas o problema é que o apache, php, e mysql, para se instalar na plataforma do cliente é complicado, voce sabe onde encontro um pacote apache for windows que se instale automaticamente através de um programa de instalação ?

Valew, obrigado pelas dicas.
Ailton.
12/07/2007 9:13am (~16 anos atrás)

Dzaia

Nao usei o GTK . teria que ler para lhe responder

desculpe

Att

Ronaldo Menezes
10/07/2007 1:19pm (~16 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)