कमांड लाइन के माध्यम से PHP स्क्रिप्ट में $ _GET चर कैसे पारित करें?


14

मैं एक वेबसर्वर बनाने की कोशिश कर रहा हूं जो PHP स्क्रिप्ट्स परोसता है। वर्तमान में, यह निम्नानुसार काम करता है:

  1. क्लाइंट अनुरोध करता है /index.php?test=value
  2. सर्वर चालान करता है php index.php
  3. सर्वर HTTP अनुरोध हेडर को PHP प्रक्रिया के लिए STDIN के रूप में फीड करता है
  4. सर्वर phpSTDOUT से आउटपुट को पढ़ता है और क्लाइंट को लौटाता है

यह सब काम कर रहा है सिवाय इसके कि पैरामीटर को PHP स्क्रिप्ट में पारित नहीं किया जा रहा है क्योंकि:

var_dump($_GET);

रिटर्न:

सरणी (0) {}

$_GETजब इसे लागू किया जाता है तो पीएचपी बाइनरी को कैसे पैरामीटर पास किया जाता है?


कौन सा वेब सर्वर? आपने वेब सर्वर को कैसे कॉन्फ़िगर किया है? आपने PHP को कैसे कॉन्फ़िगर किया है?
जोशी

@ जोस: यह जेटएचटीपी है - एक मैंने खुद लिखा था।
नाथन उस्मान

जवाबों:


29

आप किस PHP बाइनरी का उपयोग कर रहे हैं? सीएलआई या सीजीआई? मुझे संदेह है कि यदि आप पास हैं तो पर्यावरण चर और POST डेटा को ठीक से संभालने के लिए PHP के लिए बाइनरी के सीजीआई संस्करण की आवश्यकता है।

php-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


हाँ ... ज़रूर। यही समस्या थी।
नाथन उस्मान

3

विकिपीडिया के अनुसार , इसका उत्तर 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);

यदि आप इसे एसटीडीआईएन के पास भेज रहे हैं, तो आपको एसटीडीआईएन पढ़ने और हेडर को स्वयं पार्स करने की आवश्यकता होगी। REQUEST_URI में वह डेटा होगा जिसकी आपको आवश्यकता है, और आप इसे पारित कर सकते हैं।


मुझे वैरिएबल उपलब्ध होने की आवश्यकता है $_GETजैसे वे हैं जब Apache के तहत PHP का उपयोग किया जाता है।
नाथन उस्मान

सभी अच्छी तरह से और अच्छे जब तक किसी का दौरा नहीं होता/index.php?test=asdf;rm%20-rf%20/
danlefree

@ डान: चिंता मत करो, मेरे वेबसर्वर को संभालने के लिए काफी स्मार्ट है।
नाथन उस्मान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.