Bagaimana cara mengirimkan variabel $ _GET ke skrip PHP melalui baris perintah?

14

Saya mencoba membuat server web yang menyajikan skrip PHP. Saat ini, ia berfungsi sebagai berikut:

  1. Klien meminta /index.php?test=value
  2. Server memanggil php index.php
  3. Server mengumpan header permintaan HTTP sebagai STDIN ke proses PHP
  4. Server membaca output phpdari STDOUT dan mengembalikannya ke klien

Semua ini berfungsi kecuali bahwa parameter tidak diteruskan ke skrip PHP karena:

var_dump($_GET);

pengembalian:

array (0) {}

Bagaimana $_GETparameter dilewatkan ke biner PHP ketika dipanggil?

Nathan Osman
sumber
Server web yang mana? Bagaimana Anda mengonfigurasi server web? Bagaimana Anda mengonfigurasi PHP?
joschi
@ jo: Ini JetHTTP - yang saya tulis sendiri.
Nathan Osman

Jawaban:

29

Biner PHP mana yang Anda gunakan? CLI atau CGI? Saya menduga Anda memerlukan versi CGI dari biner untuk PHP untuk menangani dengan benar menerima variabel lingkungan dan data POST jika Anda lulus itu.

The php-cgibiner mengimplementasikan antarmuka CGI, yang memungkinkan Anda untuk melewati parameter pada baris perintah:

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

Yang berakhir pada $_GET:

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

Anda mungkin ingin membaca tentang cara kerja CGI sehingga Anda dapat menerapkannya di server web Anda.

Ref: RFC3875

Sakit kepala
sumber
Yup ... tentu saja. Itu masalahnya.
Nathan Osman
3

Menurut Wikipedia , jawabannya adalah mengatur QUERY_STRINGvariabel lingkungan:

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

atau dalam langkah terpisah:

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

Ini berfungsi jika Anda menggunakan php-cgiperintah, karena ini adalah bagian dari spesifikasi CGI. phpPerintah biasa mengabaikan variabel ini, tetapi skrip Anda mungkin menggunakannya.

Nathan Osman
sumber
1

Jika Anda lulus php script.php test = asdf

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

Jika Anda meneruskannya ke STDIN, Anda harus membaca STDIN dan mengurai header sendiri. REQUEST_URI akan berisi data yang Anda butuhkan, dan Anda bisa meneruskannya.

karmawhore
sumber
Saya perlu variabel yang tersedia $_GETseperti ketika PHP digunakan di bawah Apache.
Nathan Osman
Semua baik dan bagus sampai seseorang mengunjungi/index.php?test=asdf;rm%20-rf%20/
danlefree
@dan: Jangan khawatir, server web saya cukup pintar untuk mengatasinya.
Nathan Osman