PHP как кроссплатформенный язык разработки приложений для настольных компьютеров? Богохульство! Тем не менее, это возможно.
Несколько лет назад у всех, кто интересовался внедрением PHP на рабочий стол, было давно заброшенный GTK PHP . С тех пор появились новые игроки, но давайте сначала ответим «почему».
Почему?
Зачем кому-то разрабатывать кросс-платформенные PHP-приложения для настольных компьютеров? Почему бы не выбрать что-то, что на самом деле может быть связано с низкоуровневыми API операционной системы, например Adobe AIR? Почему бы не пойти с чем-то устаревшим и раздутым, но надежным, как Java? Почему бы не сделать его приложением Chrome, а если вам нужна встроенная поддержка, используйте Native Client? Черт, если вам нужен язык сценариев, почему бы просто не пойти с Python? Все идет, пока мы избегаем необходимости объединять сервер со всем шебаном, верно?
Вдобавок ко всему, я могу вспомнить несколько надуманных сценариев:
- Вам нужно хорошее промежуточное звено между простым синтаксисом и хорошей структурой, то есть PHP, и вы не можете потрудиться изучать новые языки, такие как ActionScript
- Вы управляете ИТ в компании с очень неграмотными людьми, и единственный способ заставить их использовать хороший браузер для приложения вашей компании — это встроить его в приложение, которое вы поставляете. Это все еще веб-приложение, но открывается в Chrome без головы!
- Вы хотите не оплачивать стоимость хостинга для своего личного приложения и носить его с собой на USB-накопителе. Вы просто подключаете его, запускаете, и ваше приложение уже там — используя ту же базу данных SQLite, что и раньше. Если вам нужно синхронизировать данные в режиме онлайн, вы отправляете весь экспорт БД в Dropbox или какой-либо другой сервис одним нажатием кнопки, таким образом гарантируя, что вы буквально единственный, кто может получить доступ к вашему «веб-приложению» даже без вашего компьютера.
- Вам не нужен низкоуровневый доступ к API операционной системы — вы просто хотите создать браузерную игру, вспомогательное приложение или что-то такое же простое. PHP отлично подходит для этого, и вы уже знаете язык.
Эти сценарии могут выглядеть как хвататься за соломинку, и действительно, я действительно не могу придумать РЕАЛЬНУЮ, практическую причину хотеть сделать это, у которого нет жизнеспособной альтернативы. Тем не менее, приятно знать, что это возможно. Посмотрим как.
1. Ночной дождь
Nightrain — это предварительно упакованный набор предпосылок для PHP-хостинга, работающий на PHP 5.5.x на данный момент. Это упаковщик, написанный на Python, который использует внутренний сервер PHP для размещения вашего приложения, таким образом избегая Apache и Nginx и сводя к минимуму изменения конфигурации. Однако это также означает, что некоторые более сложные аспекты недоступны , и вы действительно можете использовать его только для очень элементарных приложений.
Другой большой недостаток заключается в том, что в Windows сначала запускается командная строка, а затем «приложение». Окна команд должны оставаться открытыми, если вы хотите использовать приложение, и это может немного смущать технически неграмотных людей из сценария 2) выше.
Более того, по умолчанию вы можете запустить только одно ночное приложение, потому что оно фактически запускает сервер на порту 8000, а затем заставляет браузер без монитора, который открывается «тайно», посетить localhost:8000
Если вы хотите запустить несколько разных ночных приложений, вам нужно изменить порт в settings.ini
Это также означает, что простое посещение localhost:8000
Nightrain совместим с большинством PHP-приложений / фреймворков «из коробки», если вы измените базу данных на SQLite, которая используется, и настроите связанный php.ini
MySQL не входит в комплект поставки, и его установка вместе с обычным стеком не простая задача. Это очень просто сделать так, чтобы приложение отправляло данные SQLite в обратном направлении на сервер, который вы используете для централизованной базы данных в любом случае, поэтому использование только SQLite в системе, где запущено приложение, несколько логично.
Безусловно, самым большим недостатком приложения является то, что оно использует WX-виджеты для питания автономного браузера, а в Windows это, похоже, сводится к IE7 . Изменение кажется возможным с помощью WXPython, как упомянуто в проблеме, связанной выше, но еще не было попыток. Можно только надеяться, что объект браузера будет обновлен до чего-то более пригодного для использования в скором времени — до тех пор, и пока все другие критические недостатки не будут устранены, я даже не могу представить себе использование Nightrain.
2. WXPHP
wxPHP расшифровывается как «wxWidgets для PHP» и является расширением PHP, которое включает в себя библиотеку wxWidgets, которая позволяет создавать многоплатформенные настольные приложения, использующие собственные графические компоненты, доступные для различных платформ. — Википедия
Вы устанавливаете wxPHP как отдельную программу, которая затем поддерживает выполнение файлов .wxphp
Это означает, что ваши приложения — это просто файлы, и вы можете с легкостью распространять их везде. Вы можете организовать свой код в файлы и классы, как обычно, и распределять папки. Основной файл .wxphp
Установка поставляется с несколькими примерами, включая пример, который инициализирует WebView и загружает веб-сайт wxPHP во фрейме wx. Стоит отметить, что с wxPHP вы не разрабатываете веб-сайты, как если бы вы работали в Интернете. Другими словами, вы не разрабатываете оффлайн-сайты, а объединяете различные виджеты wx. Таким образом, у библиотеки есть некоторая кривая обучения, и вам не хватит функций HTML5, к которым вы могли бы привыкнуть, или простоты веб-разработки. Существует некоторое Подтверждение Концепции внутреннего PHP-сервера, выполняющего и обслуживающего запросы, но это экспериментально и сложно, и снова показывает localhost
wxPHP также поставляется с восхитительным инструментом для создания форм, который поможет вам автоматически генерировать PHP-код, необходимый для ваших приложений wxPHP, с помощью редактора wysiwyg.
Прежде чем вы отклоните wx как тривиальное, люди разработали больше, чем просто базовые приложения. Например, вот редактор PHP с удаленной отладкой и плагином API .
Если вы серьезно относитесь к разработке десктопов на PHP, то wxPHP — лучший вариант по сравнению с Nightrain, хотя Nightrain позволяет вам писать старый добрый HTML для GUI.
Одним из самых больших преимуществ wx здесь является тот факт, что после установки все файлы .wxphp
Никаких дополнительных установок, никаких неудобных окон консоли. Для технически неграмотных людей это просто находка — вы можете легко распространять приложение внутри своей компании по электронной почте, а процедура обновления так же проста, как перезапись файла.
3. TideSDK
TideSDK имеет несколько иной подход, чем два предыдущих . Вы устанавливаете SDK, чтобы иметь возможность разрабатывать приложения, и у каждой платформы есть определенные предпосылки. TideSDK — это фактически переименованный проект Titanium Desktop. Titanium оставался ориентированным на мобильные устройства и отказался от настольной версии, которую переняли некоторые люди, которые открыли ее и назвали TideSDK.
После установки в соответствии с руководством по началу работы и после того, как у нас будет приложение TideSDK Developer (вспомогательное приложение, которое поможет нам объединить наше приложение в распространяемый пакет), мы можем приступить к разработке. Приложения, которые вы создаете с помощью Tide (через приложение-помощник или через командную строку), могут распространяться как чисто исполняемые, или могут распространяться как устанавливаемые пакеты, которые получают всю обработку «приложения», включая встроенную процедуру установки, что делает их неустановимыми через Установка и удаление программ в Windows или ваши менеджеры пакетов в других операционных системах.
Ресурсы приложений используются в сочетании с клиентом WebKit и знакомым и обширным API. API является привилегированным, предоставляя доступ к файловой системе, которая позволяет вам читать и управлять файлами. Также предоставляются API для создания и взаимодействия с локальной базой данных. Сетевой API позволяет создавать клиенты и серверы или взаимодействовать с HTTP на гораздо более низком уровне. Также возможно открыть сокетные соединения с другими сервисами.
Как правило, TideSDK использует HTML, CSS и JS для визуализации приложений, но также поддерживает скриптовые языки, такие как Python, Ruby и PHP. Ядром рендеринга является WebKit, что означает, что запуск будет несколько медленным, но он будет поддерживать новейшие веб-технологии.
Сердцем TideSDK является объектный мост, скомпилированный в компонент WebKit. Мост позволяет другим языкам сценариев — python, php или ruby - запускаться на HTML-странице с использованием тегов сценариев в DOM, как и JavaScript. Вы также можете напрямую вызывать файлы .py, .rb или .php из вашего приложения.
PHP активируется добавлением выражения модуля в файл манифеста, например так:
#appname:HelloWorld
#appid:com.tidesdk.helloworld
#publisher:Software in the Public Interest (SPI) Inc
#image:default_app_logo.png
#url:http//tidesdk.org
#guid:845e9c3c-c9ff-4ad4-afdf-9638092f044f
#desc:Sample Hello World application
#type:desktop
runtime:1.3.1-beta
app:1.3.1-beta
codec:1.3.1-beta
database:1.3.1-beta
filesystem:1.3.1-beta
media:1.3.1-beta
monkey:1.3.1-beta
network:1.3.1-beta
platform:1.3.1-beta
process:1.3.1-beta
ui:1.3.1-beta
worker:1.3.1-beta
php:1.3.1-beta
Обратите внимание, что использование модулей сценариев для языков сценариев приведет к значительным потерям производительности при установке и времени выполнения ваших приложений.
Интересно, что TideSDK имеет объектный мост, который позволяет при использовании PHP в ваших приложениях беспрепятственно преобразовывать данные из JS в PHP и обратно. Вы можете прочитать больше здесь , но подробное руководство TideSDK скоро появится.
Есть несколько основных недостатков в использовании TideSDK для разработки настольных приложений на PHP:
- Рабочий процесс разработки PHP сильно недокументирован и очень подвержен ошибкам, но почти невозможен для отладки.
- Версия PHP в комплекте ужасно устарела — версия 5.3.X на момент написания этой статьи. Хотя относительно легко заменить его на современный в папке
/modules
- Есть кривая обучения. DOM API отличается от того, что вы можете использовать в веб-разработке. Чтобы отобразить что-то на экране, вам нужно вызвать
$document->write()
echo
Это небольшая разница, но она плохо документирована и может сбить вас с толку. - Безусловно, самым большим недостатком является компиляция. Пакет, который вы получаете, создавая приложение, привязан к платформе, на которой вы его создали. Чтобы создать приложение для нескольких сред, вам нужно иметь эти несколько сред. Несоответствие Windows / Linux легко решается с помощью виртуальных машин (хотя легче решить, если у вас хост Windows, а у вас виртуальные машины Linux, чем наоборот), но удачи в компиляции для OS X, если у вас нет устройства OS X , тоже.
TideSDK — отличный вариант, но он далек от использования. Он отлично подойдет для доставки HTML / CSS / JS, но когда дело доходит до PHP, я считаю, что wxPHP по-прежнему является вашим лучшим выбором.
Другие опции
Есть и другие доступные варианты, но они, по меньшей мере, не в восторге.
-
PHPDesktop похож на Nightrain, но только для Windows. С другой стороны, он поставляется вместе с сервером Mongoose и может выполнять параллельные запросы. Он также запускает Chrome, что означает, что он медленно рендерится / открывается, но поддерживает последние веб-технологии. Однако эксклюзивность Windows исключает его из списка мультиплатформенных решений.
-
Webinder и PHP GTK сильно устарели и, вероятно, не должны использоваться. Кроме того, Webinder предназначен только для Windows.
Вывод
Хотя причины создания приложений PHP для настольных компьютеров варьируются от варианта использования к случаю и зачастую нелегко обосновать, я считаю, что полезно знать, есть ли вариант, если он вам когда-нибудь понадобится.
Вы разрабатывали настольные приложения на PHP? Если да, пожалуйста, дайте мне знать, почему и какую технологию вы использовали — я бы очень хотел, чтобы вы написали о своем опыте. Знаете какие-нибудь другие варианты? Дай мне знать в комментариях!