Introduction
You may be like me and want to write your own desktop GUI programs with PHP 7 (i.e. not web programs in a browser). There are various options out there but many seem to have been abandoned or stuck with support only at PHP 5. In my search for desktop goodness I found the PHP extension "UI", which is a wrapper around a neat C library for creating desktop programs, "libui". The UI extension has the advantage of working with PHP 7.x.
The libui project can be found here.
The PHP UI extension project can be found here.
What follows are instructions on how to first install libui, then the UI extension for PHP. I'm assuming you've got a bog standard PHP 7.2 set up already. I've tested this all out in Ubuntu 18.04 (and Lubuntu). I'm using the vim editor here, but you can try whichever editor suits you.
The C library, libui
On the command line, install packages:
sudo apt-get install build-essential cmake pkg-config libgtk-3-dev re2c git php7.2-dev
Then let's clone the libui project:
cd /opt
git clone https://github.com/andlabs/libui.git
cd libui
git checkout alpha3.5
And then compile the project:
mkdir build
cd build
cmake ..
make
Try it out:
View one of the example source C files that generates a windows with controls:
vim ../examples/controlgallery/main.c
Compile the example libui programs:
make examples
ls out
--> see the compiled files in the out directory
To run one:
out/controlgallery
--> see a window appear with example controls
Make the libui library available elsewhere:
sudo install ui.h /usr/local/include/;
sudo install ui_unix.h /usr/local/include/;
sudo install build/out/libui.so /usr/lib/;
sudo install build/out/libui.so.0 /usr/lib/;
The PHP UI extension
I had problems with errors when trying to install this as a PECL extension. So instead, let's manually clone the UI project:cd /opt
git clone git://github.com/krakjoe/ui;
cd ui
There's a fix we have to make. Change a line in a file:
vim classes/box.c
Perform a line alteration near this:
#if PHP_VERSION_ID >= 70200
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(php_ui_box_is_padded_info, 0, 0, _IS_BOOL, NULL, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(php_ui_box_is_padded_info, 0, 0, _IS_BOOL, 0)
Configure & compile the extension:
phpize
./configure
make
Find your PHP extensions directory:
php-config --extension-dir
--> e.g. see:
/usr/lib/php/20170718
Copy the compiled file to the PHP extensions directory:
cp modules/ui.so /usr/lib/php/20170718/
Configure PHP to use the extension:
Add an "ini" file for the extension:
vim /etc/php/7.2/mods-available/ui.ini
enter:
extension=ui.so
sudo phpenmod ui
php --ri ui
-see is enabled
See example PHP code to show a window with some controls:
vim examples/gallery.php
Run the example PHP file and try stuff out with your new PHP desktop greatness!
php examples/gallery.php
Next time I'll post an entry on writing a desktop app with UI. See the next post.
Note, thanks to this forum post below for help on getting things going:
https://github.com/krakjoe/ui/issues/43