जवाबों:
सामान्यतया, कमांड लाइन स्क्रिप्ट में तर्क पारित करने के लिए, आप या तो argv
वैश्विक चर का उपयोग करेंगे या गेटअप करेंगे :
// bash command:
// php -e myscript.php hello
echo $argv[1]; // prints hello
// bash command:
// php -e myscript.php -f=world
$opts = getopt('f:');
echo $opts['f']; // prints world
$ _GET HTTP GET विधि मापदंडों को संदर्भित करता है, जो कमांड लाइन में अनुपलब्ध हैं, क्योंकि उन्हें आबाद करने के लिए वेब सर्वर की आवश्यकता होती है।
यदि आप वास्तव में $ _GET को किसी भी तरह से आबाद करना चाहते हैं, तो आप ऐसा कर सकते हैं:
// bash command:
// export QUERY_STRING="var=value&arg=value" ; php -e myscript.php
parse_str($_SERVER['QUERY_STRING'], $_GET);
print_r($_GET);
/* outputs:
Array(
[var] => value
[arg] => value
)
*/
आप किसी दिए गए स्क्रिप्ट को निष्पादित कर सकते हैं, $_GET
कमांड लाइन से पॉपुलेट कर सकते हैं , बिना स्क्रिप्ट को संशोधित किए बिना:
export QUERY_STRING="var=value&arg=value" ; \
php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "index.php";'
ध्यान दें कि आप के साथ $_POST
और साथ ही कर सकते हैं $_COOKIE
।
getopt()
, तो यह स्पष्ट रूप से PHP को बताता है कि आप तर्क चाहते हैंf
, न कि विकल्प f
(जो कि कोलन निर्दिष्ट किया जाएगा)। तो यह सिर्फ वाक्यविन्यास है।
ServerFault पर इस जवाब से :
php-cgi
बाइनरी का उपयोग केवल के बजाय करें php
, और इस तरह कमांड लाइन पर तर्क पास करें:
php-cgi -f index.php left=1058 right=1067 class=A language=English
जो इस में डालता है $_GET
:
Array
(
[left] => 1058
[right] => 1067
[class] => A
[language] => English
)
आप पर्यावरण चर भी सेट कर सकते हैं जो इस तरह से वेब सर्वर द्वारा निर्धारित किया जाएगा:
REQUEST_URI='/index.php' SCRIPT_NAME='/index.php' php-cgi -f index.php left=1058 right=1067 class=A language=English
<b>Notice</b>: Undefined index: testing in <b> ... </b><br />
php-cgi -f /var/www/vhosts/example.com/public_html/index.php action=DoSomething
काम करता है : वर्क्स गुड ..
मेरे पास उबंटू पर php-cgi बाइनरी नहीं है, इसलिए मैंने ऐसा किया:
% उर्फ php-cgi = "php -r '" "parse_str (implode (" & ", array_slice ($ argv, 2)), $ _GET); शामिल हैं ($ argv [1]); "" - " % php-cgi test1.php foo = 123 <Html> आपने फू को 123 पर सेट किया है। </ Html> % बिल्ली test1.php <html> आपने foo को <? php प्रिंट $ _GET ['फू']?> </ html में सेट किया है।
कभी-कभी आपके पास पास किए गए मापदंडों के लिए $ _GET सेट करने के लिए php फ़ाइल को संपादित करने का विकल्प नहीं होता है, और कभी-कभी आप php-cgi को स्थापित या नहीं कर सकते हैं।
मैंने इसे उस मामले के लिए सबसे अच्छा समाधान पाया:
php -r '$_GET["key"]="value"; require_once("script.php");'
यह आपकी php फ़ाइल को बदलने से बचता है और आपको सादे php कमांड का उपयोग करने देता है। यदि आपके पास php-cgi स्थापित है, तो हर तरह से इसका उपयोग करें, लेकिन यह अगली सबसे अच्छी बात है। सोचा यह विकल्प उल्लेख के योग्य था
-r का अर्थ है निम्नलिखित स्ट्रिंग में php कोड को रन करना। आप $ _GET मान को वहां मैन्युअल रूप से सेट करते हैं, और फिर उस फ़ाइल का संदर्भ देते हैं जिसे आप चलाना चाहते हैं।
इसकी ध्यान देने योग्य बात आपको इसे सही फ़ोल्डर में चलाना चाहिए, अक्सर नहीं, लेकिन हमेशा फ़ोल्डर में php फ़ाइल नहीं होती है। बयानों के अनुसार आपके आदेश के स्थान का उपयोग रिश्तेदार यूआरएल को हल करने के लिए करेंगे, फ़ाइल का स्थान नहीं।
php file_name.php var1 var2 varN
फिर $_GET
PHP में अपनी पहली पंक्ति पर अपने चर सेट करें , हालांकि यह $_GET
चर सेट करने का वांछित तरीका नहीं है और आप उस चर के साथ बाद में क्या करते हैं, इसके आधार पर आपको समस्याओं का अनुभव हो सकता है।
if (isset($argv[1])) {
$_GET['variable_name'] = $argv[1];
}
आपके द्वारा स्क्रिप्ट लॉन्च करने वाले चर $argv
आपके PHP ऐप में सरणी से सुलभ होंगे । पहली प्रविष्टि उस स्क्रिप्ट का नाम होगी, जिससे वे आए थे, इसलिए आप array_shift($argv)
उस ड्रॉप को पहली प्रविष्टि करना चाहें, यदि आप चर का एक गुच्छा संसाधित करना चाहते हैं। या बस एक स्थानीय चर में लोड करें।
प्रयोग करके देखें WGET
:
WGET 'http://localhost/index.php?a=1&b=2&c=3'
$_GET
एक वेबसर्वर चल रहा है।
- विकल्प 1: php-cgi -
अपनी स्क्रिप्ट चलाने के लिए 'php' के स्थान पर 'php-cgi' का उपयोग करें। यह सबसे सरल तरीका है क्योंकि आपको इसके साथ काम करने के लिए अपने php कोड को विशेष रूप से संशोधित करने की आवश्यकता नहीं होगी:
php-cgi -f /my/script/file.php a=1 b=2 c=3
- विकल्प 2: यदि आपके पास एक वेब सर्वर है -
यदि php फ़ाइल एक वेब सर्वर पर है, तो आप कमांड लाइन पर 'wget' का उपयोग कर सकते हैं:
wget 'http://localhost/my/script/file.php?a=1&b=2&c=3'
या:
wget -q -O - "http://localhost/my/script/file.php?a=1&b=2&c=3"
- चर में पहुँच php -
1 और 2 दोनों विकल्प में आप इन मापदंडों को इस तरह एक्सेस करते हैं:
$a = $_GET["a"];
$b = $_GET["b"];
$c = $_GET["c"];
आप पारित करने के लिए की जरूरत है $_GET
, $_REQUEST
, $_POST
, या कुछ और आप भी पीएचपी इंटरैक्टिव मोड का उपयोग कर सकते हैं:
php -a
फिर टाइप करें:
<?php
$_GET['a']=1;
$_POST['b']=2;
include("/somefolder/some_file_path.php");
यह मैन्युअल रूप से आपके इच्छित किसी भी चर को सेट करेगा और फिर उन चर सेट के साथ अपनी php फ़ाइल चलाएगा।
यदि आपके पास PHP स्क्रिप्ट को संपादित करने की संभावना है, तो आप स्क्रिप्ट की शुरुआत में निम्नलिखित कोड का उपयोग करके $ _GET सरणी को कृत्रिम रूप से आबाद कर सकते हैं और फिर स्क्रिप्ट को सिंटैक्स के साथ कॉल कर सकते हैं: php -f script.php name1=value1 name2=value2
// When invoking the script via CLI like "php -f script.php name1=value1 name2=value2", this code will populate $_GET variables called "name1" and "name2", so a script designed to be called by a web server will work even when called by CLI
if (php_sapi_name() == "cli") {
for ($c = 1; $c < $argc; $c++) {
$param = explode("=", $argv[$c], 2);
$_GET[$param[0]] = $param[1]; // $_GET['name1'] = 'value1'
}
}
मैं उन्हें इस तरह से पास करता हूं:
php5 script.php param1=blabla param2=yadayada
ठीक काम करता है, $ _GET सरणी है:
array(3) {
["script_php"]=>
string(0) ""
["param1"]=>
string(6) "blabla"
["param2"]=>
string(8) "yadayada"
}
या बस (यदि आपके पास LYNX है):
lynx 'http://localhost/index.php?a=1&b=2&c=3'
php [script name] "a=1&b=2&c=3"
पॉप्युलेट नहीं होगी$_SERVER['QUERY_STRING']
, लेकिन आप आसानी से संदर्भित करके उसी चीज़ को प्रभावित कर सकते हैं$_SERVER['argv'][1]
।