Come passare le variabili $ _GET a uno script PHP tramite la riga di comando?


14

Sto cercando di creare un server web che serve script PHP. Attualmente funziona come segue:

  1. Il client richiede /index.php?test=value
  2. Il server invoca php index.php
  3. Il server invia le intestazioni della richiesta HTTP come STDIN al processo PHP
  4. Il server legge l'output di phpSTDOUT e lo restituisce al client

Tutto questo funziona tranne per il fatto che i parametri non vengono passati allo script PHP perché:

var_dump($_GET);

ritorna:

array (0) {}

Come $_GETvengono passati i parametri al file binario PHP quando viene invocato?


Quale web server? Come hai configurato il web server? Come hai configurato PHP?
joschi,

@jos: è JetHTTP - uno che ho scritto da solo.
Nathan Osman,

Risposte:


29

Quale binario PHP stai usando? CLI o CGI? Ho il sospetto che tu abbia bisogno di una versione CGI del binario affinché PHP gestisca correttamente accettare le variabili d'ambiente e i dati POST se lo passi.

Il php-cgibinario implementa l'interfaccia CGI, che consente di passare parametri sulla riga di comando:

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

Che finiscono in $_GET:

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

Potresti voler leggere su come funziona CGI in modo da poterlo implementare nel tuo server web.

Rif: RFC3875


Sì ... abbastanza sicuro. Questo era il problema.
Nathan Osman,

3

Secondo Wikipedia , la risposta è impostare la QUERY_STRINGvariabile d'ambiente:

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

o in passaggi separati:

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

Funziona se si utilizza il php-cgicomando, perché fa parte della specifica CGI. Il normale phpcomando ignora questa variabile, ma lo script potrebbe usarla.


1

Se passi php script.php test = asdf

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

Se lo passi a STDIN, dovresti leggere STDIN e analizzare tu stesso le intestazioni. REQUEST_URI conterrebbe i dati necessari e potresti passarli.


Ho bisogno che le variabili siano disponibili $_GETcome sono quando PHP è usato in Apache.
Nathan Osman,

Tutto bene fino a quando qualcuno non visita/index.php?test=asdf;rm%20-rf%20/
danlefree

@dan: non ti preoccupare, il mio server web è abbastanza intelligente da gestirlo.
Nathan Osman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.