Blog. Just Blog

Создание исполняемых приложений на PHP

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Создание исполняемых приложений на PHP
Создание исполняемых приложений на PHP

Мы привыкли, что язык PHP используется для web-разработки, и в большинстве случаев это действительно так. Но при этом PHP обладает обширным арсеналом различных функций и инструментов, которые можно использовать не только в сайтостроительстве. Из PHP-скриптов можно делать полноценные приложения для Windows в виде привычных нам EXE-файлов. Для PHP4 в свое время были такие интересные штуки, как Roadsend Compiler Studio и Bambalam PHP EXE Compiler, которые делали из скриптов консольные приложения. Были даже такие инструменты, как PHP-GTK и WinBlider, позволявшие создавать на PHP программы с графическим оконным интерфейсом. Теперь, к сожалению, все эти проекты уже прекратили свое существование. Инструментов нет, но задачи никто не отменял! Значит надо искать какие-то новые решения.

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

Для запуска PHP-скрипта на выполнение используется команда

php.exe -f скрипт.php
В ней заключается суть создания исполняемых приложений на PHP. Самый простой способ сделать подобие приложения на PHP - это использовать самораспаковывающийся архив RAR.

Создаем SFX-архив
Создаем SFX-архив

Предположим, что наше PHP-приложение содержится в единственном скрипте index.php. Запускаем архиватор, создаем новый архив, добавляем в него файл скрипта, а из папки с установленным PHP берем два файла - php.exe и php5ts.dll. Если в скрипте не используются функции работы с сетью, графикой и т.п., то этого набора должно хватить. В параметрах архива ставим галочку "Создать SFX-архив".

Параметры SFX-архива
Параметры SFX-архива

На следующей вкладке открываем дополнительные параметры архива.

Настройка параметров
Настройка параметров

В окне настроек проставляем галочки, как показано на скриншотах.

Настройка параметров
Настройка параметров

При таких настройках все содержимое архива автоматически будет извлекаться во временную папку, существующие файлы будут перезаписываться, никаких сообщений и подтверждений показываться не будет.

Настройка параметров запуска
Настройка параметров запуска

Последним шагом прописываем, что после распаковки должен быть запущен интерпретатор PHP с нашим скриптом. Для большей изящности в настройках архива можно выбрать собственную иконку, которая будет у созданного приложения. Вот и все, создаем архив, запускаем его на выполнение. Скрипт запускается и отрабатывает как надо.

Если в скрипте используются функции из расширений, то придется подключить и их тоже. Для этого надо будет создать файл php.ini примерно такого содержания

[PHP]
extension_dir = "."
extension=php_curl.dll

и упаковать его вместе с расширениями в этот же архив. Вообще, такие комплекты удобнее всего собирать в отдельной папке, там можно сразу проверять работоспособность скрипта, а главное, наличие всех зависимых библиотек и расширений. Например, указанное расширение php_curl потянет за собой паровозом еще библиотеки libeay32.dll, libssh2.dll и ssleay32.dll, которые также придется включать в архив.

Несмотря на простоту создания, у таких приложений есть существенные недостатки. Во-первых, кто угодно может открыть архив, ознакомиться с его содержимым, даже внести какие-то свои коррективы. Во-вторых, SFX-архивы не обрабатывают в чистом виде параметры командной строки, надо изворачиваться со специфическими ключами типа -sp<параметры>. Поэтому приложения на базе SFX-архивов обычно могут выполнять только какие-то фиксированные действия, не предусматривающие взаимодействие с пользователем.

Более удобный вариант для создания приложений из PHP-скриптов - это коммерческая утилита MoleBox. Она упаковывает целое приложение в контейнер в виде единого exe-файла. Вместе с основным исполняемым файлом в контейнер помещаются необходимые для его работы библиотеки и прочие файлы, что нам и нужно. Несколько лет назад проект MoleBox прекратил существование, но это не значит, что его больше негде взять (пароль на архив "manhunter.ru").

Добавление файлов в проект
Добавление файлов в проект

Запускаем оболочку MoleBox, добавляем в корень проекта уже знакомый нам набор файлов для запуска интерпретатора PHP и нужные скрипты, затем открываем настройки проекта.

Настройки проекта
Настройки проекта

В настройках проекта в качестве главного исполняемого файла выбираем php.exe, из него же будет извлечена иконка для результирующего файла. В параметрах командной строки указываем имя запускаемого скрипта и дополнительный ключ <@>, который означает, что кроме имени скрипта надо ретранслировать на обработку параметры, переданные файлу приложения. Для работы с параметрами командной строки в PHP предусмотрены две предустановленных переменных. В целочисленной переменной $argc содержится количество переданных параметров, а в массиве $argv хранятся сами параметры.

После сборки проекта получаем единый исполняемый файл. Увы, без недостатков тут тоже не обошлось. По причине популярности MoleBox у малварщиков, некоторые антивирусы очень плохо относятся к таким сборкам, сразу записывая их в подозрительные. В остальном же это очень хороший способ создания исполняемых приложений из PHP-скриптов.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 499 | Комментариев: 5

Метки: PHP

Комментарии

Отзывы посетителей сайта о статье
LaScala (15.12.2020 в 18:48):
Спасибо за molebox. Лучший инструмент для преодоления dll-hell.
ManHunter (15.12.2020 в 15:33):
Я его и имел в виду. И он точно так же не нравится антивирям.
Руслан (15.12.2020 в 15:27):
Зато можно использовать их Box
ManHunter (15.12.2020 в 11:22):
Энигма не умеет в проброс командной строки.
Владимир (15.12.2020 в 11:19):
enigmaprotector.com/ru/aboutvb.html

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0028 сек.) / Память: 5 Mb
Наверх