Статьи Создание Exe приложений на Php.

Discussion in 'Статьи' started by Mo4x, 17 Mar 2007.

  1. Mo4x

    Mo4x VX-эпоха перемен

    Joined:
    18 Feb 2007
    Messages:
    369
    Likes Received:
    194
    Reputations:
    -21
    [INTRO]

    Все мы знаем что PHP предназначен для быстрого создания динамических Web страниц. Во всяком случае именно это написано на официальном сайте разработчиков PHP. Однако почему бы не попробовать найти PHP «немного» иное применение, например, попробовать создать полноценное приложение для Windows? Заинтересовал? Тогда понеслась!

    [Чёрный квадрат]

    Приложения делятся на консольные и оконные. Начнём с создания первых, так как это проще. Итак, для начала нужно определиться с тем, что мы будем писать... я предлагаю написать простой MD5 & Base64 Encoder - вещь в хозяйстве нужная и полезная, тем более здесь всё достаточно просто. Для запуска PHP скрипта из командной строки и передачи ему нужных параметров используется следующая конструкция:

    ## CODE

    php.exe [опции] [-f] <наш скрипт> [параметры]

    ## CODE

    Что касается содержания самого скрипта, то количество переданных параметров хранится в переменной $argc, а сами параметры хранятся в массиве $argv. На этом краткий инструктаж по консольным приложениям закончен и пришла пора приступить к активным действиям.

    Чтобы не утруждать Вас написанием скрипта, я решил написать его за Вас. Вот что у меня получилось:

    ## CODE

    <?php
    if($argc!=3) { echo "
    +--------------------------------------+
    | Create MD5 hash: enc md5 string |
    | Create Base64 hash: enc b64 string |
    +--------------------------------------+\n";
    } else {
    echo "\n";
    if($argv[1]=='md5') { // MD5 encode
    echo md5($argv[2])."\n\n"; die();
    }
    if($argv[1]=='b64') { // Base64 encode
    echo base64_encode($argv[2])."\n\n"; die();
    } else { echo "Unknown command. Type \"enc\" for help.\n\n"; }
    }
    ?>

    ## CODE

    Скрипт написан и теперь самое интересное - компиляция в EXE приложение. Для компиляции консольных приложений я использую Roadsend Compiler Studio. Его можно скачать на сайте www.roadsend.com после бесплатной регистрации. Скачали? Теперь открываем Roadsend IDE, создаём новый проект (Project -> New), прописываем необходимые параметры (наш скрипт рекомендую кинуть именно в директорию проекта), жмём "OK" и наконец даём заветное Project -> Build. Теперь направляемся в папку с проектом и если Вы всё правильно сделали - в ней Вы найдёте готовый EXE. Это всё? Да. Всё просто, если знать некоторые нюансы. Единственное что я рекомендовал бы - иногда полезно пошаманить с подключаемыми библиотеками, а так же можно упаковать наш EXE UPX`м, хотя эту тему я затрону чуть ниже. Теперь перейдём к оконным приложениям...

    [Окошки]

    Как Вы наверное уже догадались - при создании оконных приложений штатными средствами PHP уже не обойтись, поэтому для начала нужно выбрать инструмент для разработки нашего окошка. Среди всех инструментов больше всего выделяются два - это достаточно раскрученый PHP-GTK (www.gtk.php.net) и менее раскрученный, но не менее функциональный WinBlider (www.winbinder.org). Здесь как раз тот случай, когда более раскрученный и известный оказывается не так уж и хорош (это моё имхо), поэтому для разработки нашей первой форточки на PHP мы будем использовать WinBlinder. Для начала его нужно скачать. Готово? Окей, двигаемся дальше...

    Винблиндер имеет свой собственный формат данных – phpw, который Вы можете сразу смело привязывать к вашему любимому редактору кода. По умолчанию при запуске phpw файла открывается содержащийся в нём PHP скрипт и прогоняется через интерпретатор с уже подключеными библиотеками блиндера. Как Вы наверное поняли - учится программировать на этой балалайке Вам придётся самим, однако в это нет ничего сложного, особенно человеку хоть немного знакомому с ООП в PHP. Однако даже незнакомый тоже сможет на нём кодить, так как по сути блиндер (в отличии от PHP-GTK) поддерживает и процедурное программирование. Кроме того WinBlinder весьма неплохо документирован, а инсталл архив уже содержит в себе несколько весьма любопытных примеров (особое внимание прошу обратить на редактор форм). У блиндера есть ещё куча фишек, функций и интересностей, но рамки данной статьи не позволяют мне на них останавливаться. Теперь пожалуй самое подходящее время вспомнить о нашем кодере. Чтобы не перегружать всё кодом я решил написать лишь MD5 Encoder:

    ## CODE

    <?

    // Подключаем основную библиотеку
    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_CENTER, WBC_CENTER, 315, 134, 0x00000000, 0);

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

    # Рисуем рамочку
    wb_create_control($winmain, Frame, '', 10, 10, 290, 85, 0, 0x00000000, 0, 0);
    # Рисуем надписи (лейблы)
    wb_create_control($winmain, Label, 'Текст:', 23, 35, 45, 15, 0, 0x00000000, 0, 0);
    wb_create_control($winmain, Label, 'Hash:', 23, 65, 45, 15, 0, 0x00000000, 0, 0);
    # Рисуем окошки редактирования (нижнее будет неактивным), и загоняем их данные в переменные
    $text=wb_create_control($winmain, EditBox, '', 78, 30, 210, 20, IDC_EDITBOX1002, 0x00000000, 0, 0);
    $hash=wb_create_control($winmain, EditBox, '', 78, 60, 210, 20, IDC_EDITBOX1003, 0x00000040, 0, 0);

    // Две необходимые надписи =)
    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;
    }
    }

    ?>

    ## CODE


    Код достаточно прост и думаю посидев с документацией 1-2 часа Вы начнёте разбираться в нём так же, как и я. Ну а теперь кульминация - собираем форточку... Для этого предлагаю создать отдельную директорию и перенести наш скрипт туда. Так же нужно перенести туда папку include из phpcode директории винблиндера. Готово? Теперь компилируем! Эээ... стоп не нужно хвататься за Roadsend IDE. Как? А вот так! Он не поддерживает блиндер, а поддерживает только GTK, причём судя по туманным ответам разработчиков Roadsend на их форуме - поддержку блиндера можно ещё долго ждать. Однако вытрем сопли, и будем искать другие пути, и имя этим путям Bamcompile (www.bambalam.se/bamcompile/). Однако по каким-то причинам версия 1.21 не всегда верно работает и иногда компилирует всё в неработающее приложение, однако версия 1.1 такими глюками не страдает, поэтому рекомендую использовать её. Теперь щедро выделяем для нашего компилятора отдельную папку, заходим в командную строку и гордо командуем:

    ## CODE

    bambalam -w -c C:\PHP_Projects\MD5_Hash_Generator\ md5.phpw md5.exe

    ## CODE

    Если всё сделано правильно, то в директории с компилятором будет лежать свежесколоченое оконное приложение. Всё. Добавлю лишь, что все приложения я ещё рекомендовал бы упаковывать UPX`ом (который идёт сразу с Bamcompile).

    [OUTRO]

    Итак, сегодня я показал Вам, как легко и просто можно раздвинуть границы использования PHP. Конечно кто-то всё это назовёт бредом, скажет мол размер у приложений большой, и память у них течет, и муторно всё это. Пусть говорят, однако никто не призывает Вас писать все оконные приложения на PHP, а данная статья лишь неплохое подспорье для пхп кодеров и всех интересующихся. На сим я статью закончу. Удачи.

    P.S. Кстати OUTRO я бы перевёл как "О, утро - всю ночь статью писал!"

    // S1B [ Security Bunker Team ] | www.secbun.info
     
  2. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Статья хорошая, но, имхо, писать оконные приложения на пхп... как и на перле с гтк... это как-то немного не то все же)
     
  3. Abra

    Abra Member

    Joined:
    17 Sep 2005
    Messages:
    278
    Likes Received:
    51
    Reputations:
    29
    _Great_ иногда бывает полезно. Если на сайте есть некая таблица/список (товаров, чего угодно) бывает полезно сделать кнопку "скачать в формате xls".
     
  4. Talisman

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

    Joined:
    22 Apr 2006
    Messages:
    400
    Likes Received:
    151
    Reputations:
    80
    а я разрешения ждал :DDD
    вот оригинал: http://www.forum.secbun.info/viewtopic.php?pid=691#p691
     
  5. S1B

    S1B Member

    Joined:
    16 Feb 2007
    Messages:
    15
    Likes Received:
    15
    Reputations:
    0
    Указанная выше ссылка наверное не будет большо доступна. Поэтому ищем статью здесь:

    http://www.codenet.ru/webmast/php/PHP-Compiler-EXE/

    (с картинками)
     
  6. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    ждем Html2exe
     
  7. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    Эй, А ну цыц!)))
     
  8. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Не только. К примеру Php не предназначен для создания приложений ни того и не другого типа.

    А писать гуи на сабже - извращение.
    Пишите гуи на языках/технологиях, подходящих для сабжа.

    Питон/С++/джава/дотнет/делфи.
     
  9. S1B

    S1B Member

    Joined:
    16 Feb 2007
    Messages:
    15
    Likes Received:
    15
    Reputations:
    0
    Для таких как ты, нерезус, я и написал, что это статья лишь для того чтобы показать возможность и такого использования php.
     
  10. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    это для каких же?
     
  11. Sn@k3

    Sn@k3 Elder - Старейшина

    Joined:
    13 Apr 2006
    Messages:
    1,000
    Likes Received:
    438
    Reputations:
    90
    мда....

    ты не в курсе, но у нас в страе свобода, мысли, действия и т.д. так какая разница на чем ему писать?
    всё отлично работает и осуждать его не за что....


    парень резпект,

    он нашел оригинальную идею, тебе не всеровно?, пиши на том, не пиши на этом, мда.....
     
  12. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Конечно, но не буду очередной раз упоминать гвозди и телескоп. Типа намек ;)

    Ну для начала прочитай первое предложение в твоем сообщении. Это значит, что я не могу выражать свои мысли?
     
  13. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    Выбор языка програмирования зависит от менталитета человека.


    Vb - МОЙ ЛЮБИМЫЙ ЯЗЫК!!!
     
    _________________________
  14. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Отнюдь, выбор языка программирования зависит от поставленных целей. Писать драйвер ядра на вб ты точно не будешь, например.
     
  15. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    Ну как тебе сказать, тут вопрос в другом, а возможно ли это, если да, то тут идёт выбор качества/скорости работы/скорости написания.

    Я думаю что это так. И врядли ты меня переубедишь. Ты уже пробовал ;)
     
    _________________________
  16. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Возможно все. Теоретически.

    Практически же это может пойти только за PoC.
    Да и то не в этом случае )
     
  17. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    Ну вот и я про то же.
    Знаешь же как говорят:"Если нельзя, но очень хочется - то можно."
     
    _________________________
  18. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Как кто-то говорил на васме, есть 3 типа кодеров.
    1) Для удовлетворения интереса.
    2) Фрилансеры, для заработка денег.
    3) Работающие на дядю, цель та же.

    Так вот, ни 2) и не 3) не будут извращаться.
     
  19. GlobaL

    GlobaL Banned

    Joined:
    21 Feb 2007
    Messages:
    57
    Likes Received:
    66
    Reputations:
    -18
    Сначала проги на пхп потом сайты на асемблере)) эээх куда мир катится)))
     
  20. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    что ,кстати, сообственно тоже возможно ;)
     
    _________________________