จะส่งตัวแปร $ _GET ไปยังสคริปต์ PHP ผ่านทางบรรทัดคำสั่งได้อย่างไร


14

ฉันพยายามสร้างเว็บเซิร์ฟเวอร์ที่ให้บริการสคริปต์ PHP ปัจจุบันทำงานได้ดังนี้:

  1. ลูกค้าร้องขอ /index.php?test=value
  2. เซิร์ฟเวอร์เรียกใช้ php index.php
  3. เซิร์ฟเวอร์ดึงข้อมูลส่วนหัวคำขอ HTTP เป็น STDIN ไปยังกระบวนการ PHP
  4. เซิร์ฟเวอร์อ่านเอาต์พุตของphpจาก STDOUT และส่งคืนไปยังไคลเอ็นต์

ทั้งหมดนี้ใช้งานได้ยกเว้นว่าพารามิเตอร์จะไม่ถูกส่งไปยังสคริปต์ PHP เพราะ:

var_dump($_GET);

ผลตอบแทน:

อาร์เรย์ (0) {}

วิธีทำ$_GETพารามิเตอร์ได้รับการส่งผ่านไปยังไบนารี PHP เมื่อมันถูกเรียก?


เว็บเซิร์ฟเวอร์ใด คุณกำหนดค่าเว็บเซิร์ฟเวอร์เป็นอย่างไร คุณกำหนดค่า PHP อย่างไร
joschi

@jos: มันคือ JetHTTP - อันที่ฉันเขียนเอง
นาธานออสมัน

คำตอบ:


29

คุณใช้ไบนารี PHP ตัวไหนอยู่ CLI หรือ CGI ฉันสงสัยว่าคุณต้องการไบนารีCGI เวอร์ชันสำหรับ PHP เพื่อจัดการยอมรับตัวแปรสภาพแวดล้อมและข้อมูล POST อย่างถูกต้องหากคุณผ่านสิ่งนั้น

php-cgiไบนารีการดำเนินการอินเตอร์เฟซ CGI ซึ่งช่วยให้คุณสามารถส่งผ่านพารามิเตอร์ในบรรทัดคำสั่ง:

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

ซึ่งจบลงด้วย$_GET:

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

คุณอาจต้องการอ่านข้อมูลเกี่ยวกับวิธีการทำงานของCGIเพื่อให้คุณสามารถใช้งานได้ในเว็บเซิร์ฟเวอร์ของคุณ

Ref: RFC3875


ใช่แล้ว ... นั่นคือปัญหา
Nathan Osman

3

ตามที่Wikipediaคำตอบคือการตั้งค่าQUERY_STRINGตัวแปรสภาพแวดล้อม:

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

หรือแยกขั้นตอน:

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

ใช้งานได้หากคุณใช้php-cgiคำสั่งเนื่องจากนี่เป็นส่วนหนึ่งของข้อกำหนด CGI phpคำสั่งธรรมดาจะไม่สนใจตัวแปรนี้ แต่สคริปต์ของคุณอาจใช้มัน


1

หากคุณผ่าน php script.php test = asdf

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

หากคุณผ่านไปยัง STDIN คุณจะต้องอ่าน STDIN และแยกส่วนหัวด้วยตัวคุณเอง REQUEST_URI จะมีข้อมูลที่คุณต้องการและคุณสามารถส่งผ่านได้


ฉันต้องการตัวแปรที่พร้อมใช้งาน$_GETเหมือนตอนที่ใช้ PHP ภายใต้ Apache
Nathan Osman

ทุกอย่างดีและดีจนกระทั่งมีผู้เยี่ยมชม/index.php?test=asdf;rm%20-rf%20/
danlefree

@ ด่าน: ไม่ต้องกังวลเว็บเซิร์ฟเวอร์ของฉันฉลาดพอที่จะจัดการมันได้
Nathan Osman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.