Como passar variáveis $ _GET para um script PHP através da linha de comando?

13

Eu estou tentando criar um servidor que serve scripts PHP. Atualmente, funciona da seguinte forma:

  1. O cliente solicita /index.php?test=value
  2. O servidor chama php index.php
  3. O servidor alimenta os cabeçalhos de solicitação HTTP como STDIN para o processo PHP
  4. O servidor lê a saída de php do STDOUT e a retorna para o cliente

Tudo isso está funcionando, exceto que os parâmetros não estão sendo passados para o script PHP porque:

var_dump($_GET);

retorna:

array(0) { }

Como os parâmetros $_GET são passados para o binário PHP quando é invocado?

    
por Nathan Osman 03.10.2010 / 07:54

3 respostas

26

Qual binário do PHP você está usando? O CLI ou CGI? Eu suspeito que você precisa de uma versão CGI do binário para o PHP para manipular corretamente aceitar as variáveis de ambiente e Dados POST se você passar isso.

O binário php-cgi implementa a interface CGI, que permite passar parâmetros na linha de comando:

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

Que acabam em $_GET :

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

Você pode querer ler como o CGI funciona para que você possa implementá-lo em seu servidor da Web.

Ref: RFC3875

    
por 03.10.2010 / 09:34
3

De acordo com Wikipedia , a resposta é definir a variável de ambiente QUERY_STRING :

QUERY_STRING='user=foo&pass=bar&left=1234' php-cgi index.php

ou em etapas separadas:

export QUERY_STRING='user=foo&pass=bar&left=1234'
php-cgi index.php

Isso funciona se você usar o comando php-cgi , porque isso faz parte da especificação CGI. O comando ordinário php ignora essa variável, mas seu script pode usá-la.

    
por 03.10.2010 / 08:08
1

Se você passar no php script.php test = asdf

$result = parse_args($argv,$argc,$help);
print_r($result);

Se você está passando para STDIN, você precisaria ler STDIN e analisar os cabeçalhos. REQUEST_URI conteria os dados de que você precisa e você poderia passar isso.

    
por 03.10.2010 / 08:14

Tags