Створення EXE додатків на PHP, HTML, XML, DHTML, Інтернет-технології, статті

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>

*

*