Php – How to pass $_GET variables to a PHP script via the command line

cgihttpPHP

I am trying to create a webserver that serves PHP scripts. Currently, it works as follows:

  1. The client requests /index.php?test=value
  2. The server invokes php index.php
  3. The server feeds the HTTP request headers as STDIN to the PHP process
  4. The server reads the output of php from STDOUT and returns it to the client

All of this is working except that the parameters are not being passed to the PHP script because:

var_dump($_GET);

returns:

array(0) { }

How do $_GET parameters get passed to the PHP binary when it is invoked?

Best Answer

Which PHP binary are you using? The CLI or CGI? I suspect you need a CGI version of the binary for PHP to properly handle accept the environment variables and POST data if you pass that.

The php-cgi binary implements the CGI interface, which allows you to pass parameters on the command line:

php-cgi -f index.php left=1058 right=1067 class=A language=English

Which end up in $_GET:

Array
(
    [left] => 1058
    [right] => 1067
    [class] => A
    [language] => English
)

You may want to read up on how CGI works so you can implement that in your web server.

Ref: RFC3875

Related Topic