Bambalam PHP EXE Compiler/Embedder 1.21

Discussion in 'ПО для Web разработчика' started by b3, 24 Jul 2009.

  1. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    Компилируем PHP в Win приложения

    Компилируем PHP в Win приложения

    Что нам понадобится скачать:
    1. winbinder - Фреймворк для разработки ГУИ, легкий в использовании.
    Скриншот программы
    2. Bambalam PHP EXE Compiler/Embedder - Компилятор PHP скриптов. Качаем последнюю версию.
    Мини фак по использованию:
    Далее будет подробно...
    3. UPX - Компресор, чтоб наше приложение на выходе было не таким весомым. В bamcompile он уже есть, но я качал последнюю версию с SVN'a.
    4. Иконка =) для нашего приложения, допустим эта - ЙА ИКОНКО
    5. php_winbinder.dll - библиотека для создания окон, это нужно для того что в некоторых версиях bamcompile к примеру в последней версии на данный момент 1.21 некоректно работает с окнами и создает нерабочие приложения, данная либа решает эту проблемму.

    Подготовка

    1. Создаем на Диске C: файл cmd.bat с содержимым:
    2. Создаем там же папку bamcompile, в нее кидаем:
    bamcompile.exe - компилятор
    favicon.ico - иконку
    php_winbinder.dll - библиотеку
    upx.exe - упаковщик
    И обязательно папку include из установленой программы WINBINDER по умолчанию путь к ней C:\WinBinder\phpcode\include в етой папке класс для работы с Формами.
    Вот в принцыпе и все. Перейдем к небольшому примеру:

    Пример
    1. Запускаем наш cmd.bat в него закидываем bamcompile.exe[пробел]
    Теперь нужно указать все параметры:
    2. Ставим иконку:
    Подсказка: в окно консоли можно закидывать файлы, и путь будет прописываться автоматом, ненужно писать все пути вручную.
    3. Добавляем библиотеку
    4. Далее указываем что ето Оконное приожение а не консольное (-w) и то, что мы хотим его запаковать пакером UPX (-c)
    5. Указываем путь к скрипту который компилим:
    Готово, если сделали все правильно, то в папке где был скрипт появится EXE файл, упакованый и с иконкой. На скрине удачно выполненый нерультат:
    [​IMG]

    Для примера я взял готовый php скрипт, с коментариями. Скрипт скапипизжен с http://www.codenet.ru/webmast/php/PHP-Compiler-EXE/
    PHP:
    <?php

    // Подключаем основную библиотеку
    include "include/winbinder.php";

    // Даём метки окнам редактирования
    define('IDC_EDITBOX1002'1002);
    define('IDC_EDITBOX1003'1003);

    // Рисуем окошко
    $winmain wb_create_window(null,
            
    AppWindow,
            
    'MD5 Hash Generator by S1B [SBT]',
            
    WBC_CENTERWBC_CENTER315134,
            
    0x000000000);

    // Шпигуем окошко кнопками

    # Рисуем рамочку
    wb_create_control($winmainFrame''10102908500x0000000000);
    # Рисуем надписи (лейблы)
    wb_create_control($winmainLabel'Текст:'2335451500x0000000000);
    wb_create_control($winmainLabel'Hash:'2365451500x0000000000);
    # Рисуем окошки редактирования (нижнее будет неактивным), и загоняем их данные в переменные
    $text=wb_create_control($winmainEditBox''783021020IDC_EDITBOX10020x0000000000);
    $hash=wb_create_control($winmainEditBox''786021020IDC_EDITBOX10030x0000004000);

    // Две необходимые надписи =)
    wb_set_handler($winmain"process_main");
    wb_main_loop();

    function 
    process_main($window,$id) {
      
    # Объявляем данные окошек редактирования глобальными
     
    global $text,$hash;
     switch(
    $id) {
      case 
    IDC_EDITBOX1002:
        
    wb_set_text($hash,md5(wb_get_text($text)));
      break;
      case 
    IDCLOSE:
       
    wb_destroy_window($window);
      break;
     }
    }

    ?>
    В результате имеем программу с приятным интерфейсом

    [​IMG]

    Все файлы, можно скачать с моего архива - http://b3.grabberz.com/files/bamcompile.rar [3mb]
    b3 (c) Спешинал для недовольного Pashkela :D
     
    #1 b3, 24 Jul 2009
    Last edited: 27 Jul 2009
    2 people like this.
  2. BiG_][aKeR

    BiG_][aKeR New Member

    Joined:
    30 Nov 2008
    Messages:
    21
    Likes Received:
    1
    Reputations:
    0
    классно,вот только я так понял этот пхп скрипт написан специально для этого компилятора,а мне например нужно чтоб самый обычный пхп скрипт взял и скомпилировал в exe...
     
  3. zifanchuck

    zifanchuck Elder - Старейшина

    Joined:
    27 Oct 2008
    Messages:
    396
    Likes Received:
    154
    Reputations:
    3
    Тоже интересует. обычный пхп скрипт можно перевести в екзешник и чтобы он нормально выполнялся? Тоисть и курл работать будет и все остальное?
    и еще такой вопрос. скомпилил я допустим екзешку если ее с другого комапа запустить то он будет работать? или нужно чтобы ети библиотеки были на компе или че там?
     
    #3 zifanchuck, 19 Sep 2009
    Last edited: 19 Sep 2009
  4. Mixon

    Mixon Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    Сейчас вот сижу и дуплю это,подскажите кто знает,как тут сделать подобие этого <input type="file" name="Filedata">,тоисть выбор файла с кнопочкой "Обзор"...
     
  5. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    очень просто, примеры есть в winbinder , пункт 1 из первого поста. Когда скачаешь, загляни в папочку "\phpcode\examples" и у тебя глаза на лоб вылезут от открывшихся переспектив:)
     
  6. geforse

    geforse Elder - Старейшина

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    А у меня отказывается работать :(
    Делаю всё по инструкции, в логах написано что все ОК и *.exe создаётся, но когда его открываю, то ничего не происходит :(
     
    1 person likes this.
  7. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    покажи код, который компилишь
     
  8. geforse

    geforse Elder - Старейшина

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    Код "калькулятора" из первого поста
    Вот логи:

    PHP:
    Bambalam PHP EXE Compiler/Embedder 1.21

    Windowed application
    Compress
    Mainfile
    calculate.php
    Outfile
    calculate.exe

    Encoding 
    and embedding calculate.php
    Embedding php_winbinder
    .dll and adding it to extension loader
    Compressing 
    final exe..
    Compression done

    calculate
    .exe created successfully!
    Думал у меня с вистой что-то не так, запустил на ХП, тот же результат :(
     
  9. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    ну ты выбрал для первогот раза, молодец, чтобы скомпилировать калькулятор, у тебя должны быть:

    В отдельной папке лежать файлы и папка:

    - файл calculate.bcp
    Code:
    ; Bamcompile example project file
    mainfile calculate.php
    outfile calculate.exe
    compress
    windowed
    icon calculate\hal.ico
    embed calculate
    extension calculate\php_winbinder.dll
    
    - файл compile.bat
    Code:
    bamcompile calculate.bcp
    
    - файл bamcompile.exe

    - папка calculate, в ней:

    ------файл php_winbinder.dll
    ------файл calc.rc
    ------файл calculate.php
    ------файл hal.ico (файл иконки для программы)
    ------папка include, в ней:
    -----------файл winbinder.php
     
  10. geforse

    geforse Elder - Старейшина

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    Все заработало, спасибо :)
    Вы добавили слишком много репутации в последние 24 часа. Попробуйте попозже.
     
    1 person likes this.
  11. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    CURL+bamcompile

    1. Качаем нужные библы тут
    2. Для компиляции вашего php-скрита с curl положите рядом со скриптом все файлы, что вы скачали - php_curl.dll, libeay32.dll, ssleay32.dll
    3. Сам bamcompile.exe должен тоже лежать рядом (т.е. вообще все файлы в одной отдельной папке)
    4. Создайте и запустите такой create.cmd:
    Code:
    cmd /k bamcompile -e:php_curl.dll -c ваш_скрипт.php ваш_скрипт.exe
    
    5. Готово, curl работает.

    PS: Ограничения - если вы убираете получившийся .exe в другую папку, всегда придется с собой таскать php_curl.dll, libeay32.dll, ssleay32.dll - без них программа работать не будет. Т.е. они всегда должны лежать рядом с .exe

    Tested on Bamcompile 1.21 + Win XP
     
  12. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    Как тут сделать в окне <textarea> с полосой прокрутки?
     
  13. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    m0Hze

    Это тебе не php :)

    Тут от PHP остались только функции, а оформление по-другому строится.
     
  14. erihtoney

    erihtoney Member

    Joined:
    3 Mar 2009
    Messages:
    91
    Likes Received:
    73
    Reputations:
    20
    Извращение, зачем тогда гребаный delphi, всеми любимый си++, java и другие языки?
     
  15. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Для того чтоб мы занимались онанизмом, глядя на них :)
     
    1 person likes this.
  16. Mixon

    Mixon Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    Блин,когда начинает исполняться скрипт то окно с скриптом полностью зависает аж до его полного исполнения,что делать????
    sleep(x);
    Не помогает!((((
     
  17. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Для начала научиться юзать неблокируемые сокеты, если речь идет о парсинге чего либо с www

    PS: Всё там работает, и работает довольно прилично, просто нет многопоточности. У меня даже есть SIPT5 практически рабочий на winbinder :)

    Но скрипт на том же перле круче в разы, если не в десятки раз

    Но чтобы юзать winbinder для серьезных задач - простыми знаниями на php не обойдешься, нужны годы практики и абсолютное понимание каждой функции
     
  18. Mixon

    Mixon Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    я юзаю тут curl,и пока полное исполнение именно php скрипта не пройдёт то он зависает!!! Пример:

    function starter(){
    sleep(10);
    }

    По нажатию кнопки старт в интерфейсе запуститься эта функция,и эти 10 секунд что он спит окно скрипта "Не отвечает"! Причём тут сокеты или что либо если даже sleep зависает...:(
     
    #18 Mixon, 14 Nov 2009
    Last edited: 14 Nov 2009
  19. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    curl не пойдет для таких целей - кури неблокируемые сокеты, или задавай конкретные вопросы, что именно не получается с сокетами, тогда будет конкретный ответ (куски кода обязательны, а также подробное описание той задачи, которую надо выполнить, а не общие твои домыслы)

    PS: sleep - не выход, выполнение sleep есс-но влияет на работу всего приложения, т.е. если юзать sleep - то, пока пауза, ничего нажать не получиться. Тем более 10 секунд.

    Вот функция с неблокируемыми сокетами которая подойдет для парсинга любой URL (кроме https):

    PHP:
    function sql($url) {
      
    $patern "/^(http:\/\/)?([^\/]+)/i"
      
    $source_host preg_match($patern$url$rezz);
      
    $host $rezz[2];
      
    $url1 "GET $url\n"// Тут GET можно поменять на POST, к примеру
      
    $responce ""
      
    $timeout 30// На Ваше усмотрение
      
    $fsock    fsockopen($host80$errnum,$errstr,$timeout); 
      if (
    $fsock) {  
             
    $headers  $url1;
             
    $headers .= "Host: $host\n"
             
    $headers .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2\n"
             
    $headers .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\n"
             
    $headers .= "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\n"
             
    $headers .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\n"
             
    $headers .= "Keep-Alive: 500\n"
             
    $headers .= "Connection: close\n"
             
    $headers .= "Content-Type: application/x-www-form-urlencoded\r\n\r\n"
             
    fwrite   ($fsock,$headers); 
             
    stream_set_blocking($fsock0);
             
    stream_set_timeout($fsock$timeout);  
             while    (!
    feof($fsock)) $responce .= fread($fsock,4096);  
             
    fclose   ($fsock);
      }
      return 
    $responce;       
    }
    пример вызова:

    PHP:
    $a sql("http://rambler.ru");
     
    #19 Pashkela, 14 Nov 2009
    Last edited: 14 Nov 2009
    1 person likes this.
  20. Mixon

    Mixon Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    Pashkela,плиз,можеш тогда мне сейчас сделать на неблокируемых сокетах аналог моей функции на php?

    PHP:
    function curl($urlcurl,$postcurl,$cookiescurl){
        
    $ch=curl_init ($urlcurl);
        
    $ua 'Opera/9.64 (Windows NT 5.1; U; ru) Presto/2.1.1';
        
    curl_setopt($chCURLOPT_USERAGENT$ua);
        
    curl_setopt($chCURLOPT_HEADER0);
        
    curl_setopt($chCURLOPT_USERAGENT$ua);
        
    curl_setopt($chCURLOPT_REFERER$ref);
        
    curl_setopt($chCURLOPT_POST1);
        
    curl_setopt($chCURLOPT_POSTFIELDS$PostData);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    curl_setopt($chCURLOPT_COOKIE$cookiescurl);
        
    curl_setopt($chCURLOPT_POSTFIELDS$postcurl);
        
    $page=curl_exec($ch);
        return 
    $page;
    }
    чтоб был вызов функцыи такой: sock("Ссылка URL","POST запрос вида s=1&hh=4","Кукисы");

    Просто я с соксами не работал,всегда курлом обходился,как с ними работать хз,ну более чем такая функция мне и ненужно ничего.Спс