Створення EXE додатків на PHP

INTRO


Всі ми знаємо що PHP призначений для швидкого створення динамічних Web сторінок. В усякому разі саме це написано на офіційному сайті розробників PHP. Однак чому б не спробувати знайти PHP "трохи" інше застосування, наприклад, спробувати створити повноцінне додаток для Windows? Зацікавив? Тоді понеслася!

Чорний квадрат


Програми діляться на консольні і віконні. Почнемо зі створення перше, тому що це простіше. Отже, для початку потрібно визначитися з тим, що ми будемо писати … я пропоную написати простий MD5 & Base64 Encoder – Річ в господарстві потрібна і корисна, тим більше тут все досить просто. Для запуску PHP скрипта з командного рядка та передачі йому потрібних параметрів використовується наступна конструкція:

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

Що стосується змісту самого скрипта, то кількість переданих параметрів зберігається у змінній $ argc, а самі параметри зберігаються в масиві $ argv. На цьому короткий інструктаж з консольним додаткам закінчено і прийшла пора приступити до активних дій.

Щоб не обтяжувати Вас написанням скрипта, я вирішив написати його за Вас. Ось що у мене вийшло:

<?php
if($argc!=3) { echo ”
+————————————–+
/ Create MD5 hash: enc md5 string /
/ Create Base64 hash: enc b64 string /
+————————————–+
“;
} else {
echo ”
“;
if($argv[1]==”md5″) { // MD5 encode
echo md5($argv[2]).”

“; die();
}
if($argv[1]==”b64″) { // Base64 encode
echo base64_encode($argv[2]).”

“; die();
} else { echo “Unknown command. Type “enc” for help.

“; }
}
?>

 

 

Скрипт написаний і тепер саме цікаве – компіляція в 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:

<?

/ / Підключаємо головною бібліотекою
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;
}
}

?>


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

bambalam -w -c C:PHP_ProjectsMD5_Hash_Generator md5.phpw md5.exe
 


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



Чарівна скринька


Все вищесказане звичайно дуже цікаво і пізнавально, проте бувають моменти коли потрібних інструментів під рукою немає … Що робити тоді? Спеціально для такого випадку є один вельми цікавий прийом отримання EXE через шаманство в опціях SFX архіву WinRAR. В якості прикладу я буду використовувати наш перший скрипт для консолі. Для початку поміщаємо наш скрипт в окрему папку, туди ж копіюємо php.exe і php * ts.dll. Далі створюємо в цій же папці run.bat наступного змісту:

@echo off
php.exe -q console.php %1 %2

Тепер нам необхідно це добро упакувати, для цього виділяємо всі файли, тиснемо правою кнопкою і вибираємо "Add to archive …".



У вікні, що з'явилося вибираємо формат архіву RAR, виставляємо максимальне стиснення і ставимо галочку "Create SFX archive".



Після цього переходимо у складку "Advanced -> SFX Options", там виставляємо перемикач на "Create in curent folder" і в "Run after extraction" прописуємо "run.bat", а так само у вкладці "Modes" виставляємо галочку "Unpack to temporary folder", а так само виставляємо перемикачі "Hide all" і "Overwrite all files".



За смаком можете прилип свою іконку у відповідних вкладці. Тепер підтверджуємо створення архіву і на виході отримуємо EXE без всяких компіляторів.

OUTRO


Отже, сьогодні я показав Вам, як легко і просто можна розсунути межі використання PHP. Звичайно хтось усе це назве маренням, скаже мовляв розмір у програм великий, і пам'ять у них тече, і клопітно все це. Нехай говорять, проте ніхто не закликає Вас писати всі віконні додатки на PHP, а дана стаття лише непогана підмога для пхп кодерів і всіх, хто цікавиться. Удачи.


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*