Basically, I’m trying to figure out how PHP can be called from a “web server”.
I’ve read the documentation, but it didn’t help much.
As far as I can tell, there are three ways to invoke PHP:
- via command line (eg:
php -f "/path/to/script.php") - via CGI(??) / via FastCGI (???)
- via a web server (eg: Apache) module
So let’s start with CGI. Maybe I’m just blind, but the spec doesn’t mention how on Earth the web server passes data (headers & callbacks) to the thing implementing CGI. The situation is even worse with FastCGI.
Next up, we have server-specific modules, which, I don’t even know what to search for since all leads end up nowhere.
Invoking a CGI script is pretty simple. PHP has a few peculiarities, but you basically only need to setup a list of environment variables, then call the PHP-CGI binary:
Most of them are boilerplate.
SCRIPT_FILENAMEis how you pass the actual php filename to the PHP interpreter, not as exec parameter. Crucial for PHP is also the non-standard variableREDIRECT_STATUS=200.For a GET request you only need the environment variables. For a POST request, you simply pipe the HTTP request body as
stdinto the executed php-cgi binary. The returnedstdoutis the CGI response consisting of an incomplete HTTP header, \r\n\r\n, and the page body.(Just from memory. There maybe a few more gotchas.)