This content originally appeared on DEV Community and was authored by Javad
Hey Dev Community!
After my last blog about binding OLSRT to Node.js, I’m back again—this time with a new challenge: How can I bind OLSRT to PHP?
If you’ve ever wanted to bring async/event‑driven power into PHP, this post is for you. Let’s dive in together!
Prerequisites
Before we start, make sure you have:
- Knowledge: C programming and basic PHP internals (Zend API).
-
Tools:
- On Windows: PHP SDK, Visual Studio (MSVC), Git.
- On Linux/macOS:
php-dev,phpize, GCC/Clang, Autotools, Git.
- OLSRT repo cloned:
git clone https://github.com/OverLab-Group/OLSRT
Project Setup
Inside your project root, create:
-
php_olsrt.h— header file -
php_olsrt.c— main binding code -
config.m4(Linux/macOS) orconfig.w32(Windows) — build config -
test.php— to test the extension
Also add include directories to compiler: OLSRT/src, OLSRT/includes, and Root Project.
php_olsrt.h
#ifndef PHP_OLSRT_H
#define PHP_OLSRT_H
extern zend_module_entry olsrt_module_entry;
#define phpext_olsrt_ptr &olsrt_module_entry
#define PHP_OLSRT_EXTNAME "olsrt"
#define PHP_OLSRT_VERSION "0.1.0"
PHP_FUNCTION(olsrt_hello);
PHP_FUNCTION(olsrt_version);
#endif /* PHP_OLSRT_H */
php_olsrt.c
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_olsrt.h"
// #include "olsrt.h" // Uncomment when OLSRT headers are ready
PHP_FUNCTION(olsrt_hello)
{
php_printf("[OLSRT] Hello from PHP binding!\\n");
RETURN_TRUE;
}
PHP_FUNCTION(olsrt_version)
{
RETURN_STRING("OLSRT PHP binding 0.1.0 (stub)");
}
static const zend_function_entry olsrt_functions[] = {
PHP_FE(olsrt_hello, NULL)
PHP_FE(olsrt_version, NULL)
PHP_FE_END
};
PHP_MINIT_FUNCTION(olsrt) { return SUCCESS; }
PHP_MSHUTDOWN_FUNCTION(olsrt) { return SUCCESS; }
PHP_RINIT_FUNCTION(olsrt) { return SUCCESS; }
PHP_RSHUTDOWN_FUNCTION(olsrt) { return SUCCESS; }
PHP_MINFO_FUNCTION(olsrt)
{
php_info_print_table_start();
php_info_print_table_header(2, "OLSRT support", "enabled");
php_info_print_table_row(2, "Version", PHP_OLSRT_VERSION);
php_info_print_table_end();
}
zend_module_entry olsrt_module_entry = {
STANDARD_MODULE_HEADER,
PHP_OLSRT_EXTNAME,
olsrt_functions,
PHP_MINIT(olsrt),
PHP_MSHUTDOWN(olsrt),
PHP_RINIT(olsrt),
PHP_RSHUTDOWN(olsrt),
PHP_MINFO(olsrt),
PHP_OLSRT_VERSION,
STANDARD_MODULE_PROPERTIES
};
#ifdef COMPILE_DL_OLSRT
ZEND_GET_MODULE(olsrt)
#endif
config.m4 (Linux/macOS)
PHP_ARG_ENABLE(olsrt, whether to enable OLSRT support,
[ --enable-olsrt Enable OLSRT support])
if test "$PHP_OLSRT" != "no"; then
PHP_NEW_EXTENSION(olsrt, php_olsrt.c, $ext_shared)
PHP_ADD_INCLUDE(/absolute/path/to/OLSRT/includes)
fi
config.w32 (Windows)
ARG_ENABLE("olsrt", "Enable OLSRT support", "no");
if (PHP_OLSRT != "no") {
var OLSRT_INC = "C:\\path\\to\\OLSRT\\includes";
ADD_SOURCES(configure_module_dirname, "php_olsrt.c", "olsrt");
ADD_INCLUDE(OLSRT_INC);
}
Build & Install
Linux/macOS
phpize
./configure --enable-olsrt
make
sudo make install
Add to php.ini:
extension=olsrt.so
Windows
- Run
buildconf.bat configure.js --enable-olsrt- Build with MSVC → output
php_olsrt.dll - Copy to
ext\and add tophp.ini:
extension=php_olsrt.dll
test.php
<?php
if (!extension_loaded('olsrt')) {
@dl('olsrt.' . (PHP_SHLIB_SUFFIX ?? 'so'));
}
olsrt_hello();
echo "Version: ", olsrt_version(), PHP_EOL;
Run:
php test.php
Conclusion
And that’s it! You’ve just built a PHP extension that binds to OLSRT. Right now it’s a skeleton with olsrt_hello and olsrt_version, but the structure is ready for you to plug in Futures, Actors, Event Loop, Streams, and WebSockets from OLSRT.
This is the foundation—next steps could be:
- Wrapping OLSRT Futures into PHP classes
- Adding async/await‑like APIs
- Building a real demo (e.g. chat server)
Final words
Thanks for following along! I hope this guide helps you bring the async/event‑driven magic of OLSRT into PHP.
If you try this out, let me know what you build—I’d love to see it.
Until next time, have a great OLSRT day! 
This content originally appeared on DEV Community and was authored by Javad