Створення exe додатків на php

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

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

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

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

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

Створення exe додатків на php

Скрипт написаний і тепер найцікавіше - компіляція в 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. Для початку його потрібно завантажити. Готово? Окей, рухаємося далі.

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

Створення exe додатків на php

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

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

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

Тепер нам необхідно це добро упакувати, для цього виділяємо всі файли, тиснемо правою кнопкою і вибираємо "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 додатків на php

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

Чи не підкажете в чому проблема і як виправити.
У мене стоїть php 5.2.4 під апатчем, сам він прекрасно працює
Дякуємо

При натисканні на Project -> Build видає помилку
binary is not set

Цікаво. Створювати віконні додатки дійсно можна, але дуже вже прості.
На подобу вищенаведеного прикладу.

У комплекті Winbinder йде formeditor теж написаний на php.

Спробував попрацювати з пів години, жахнувся від файлу - підкачки, який роздувся до 1,7 Гб. Так само намагався написати календар - щоденник, то ж черезмерное використання ресурсів.
Буду дивитися на PHP-GTK

Дякую за комент. Тепер користувачі точно розберуться;)

Взагалі для створення працездатних файлів біндеровскіх десктопних додатків за допомогою bamcompile 1.21, як я зрозумів, в проект треба підключати бібліотеку php_winbinder.dll. Тоді все ОК (принаймні скрипт, наведений у статті, прекрасно оре).
І, як пишеться в readme bamcompile-архіву, фішкою цього компілятором, починаючи з версії 1.2, є можливість підключення до проекту додаткових бібліотек, що було недоступне раніше. Так, можна написати біндеровскій (рнр-шний) скрипт, прекрасно працює з бібліотекою gd_2, але після створення відповідного файлів за допомогою bamcompile 1.1, в додатку будуть недоступні графічні функції; у версії ж bamcompile 1.21 зазначену gd_2-бібліотеку можна підключити до проекту, і отриманий екзешник вже буде виконувати відповідні графічні функції.
А взагалі дивіться приклади папки examples bamcompile-архіву - можна знайти щось корисне (в плані того, ка як задавати створення єкзешніка).