Archive for August, 2009

Standalone preforking PHP application server framework

Tuesday, August 18th, 2009

What a lenghty title! But it does characterize well the thing I have been working on a couple of nights.

The idea consists of these basic prerequisites:
– sometimes I need to create small application that is not a standard web application,
– it could be necessary that it it running as root/other privileged user,
– it probably receives client connections from network,
– I need to have total control of what it does, for security reasons,
– I do not want to configure it, I want to write it.
– I want it to be written in PHP, which is a commodity language.

Usually PHP is coupled with some web server software, which together then constitutes web application server. This is a standard setup. It involves installing a web server, like Apache or NginX or IIS etc, which then you have to configure to suit your needs. Then you have to add PHP to it, and configure that too.

But what if you do not want a WEB server, what if you want a CUSTOM application server that does not use HTTP protocol but some weird/invented/forgotten/X protocol that you find suitable for your purpose?

This is why I have written this framework. You do not have to start from scratch, if you do not want to. What it does is this:
– starts and daemonizes
– forks as many children as needed
– children start waiting for connections
– when connection arrives, one of the children accepts the connection
– here your custom processing part starts – you start by rewriting the $this->worker_handleClient() or $this->worker_handleRequest() method, like below:


And that is basically it. Framework handles the rest of the story, accepts multiple simultaneous connections, forks additional children, etc. There is still a lot to do but I managed to get first working daemon written in 10 minutes. It does fairly trivial job (accepting XML-RPC request and then su-ing to some specified user and running some shell command) but what seemed miles away once is now easily achieved.

If you need it, enjoy it. Here is the URI:
Standalone preforking PHP application server framework.

If you find some feature missing and/or you have prepared a patch for it, let me know in comments. Also, (constructive) critique is welcome.