मैं वेब पेज के माध्यम से PHP स्क्रिप्ट में पैरामीटर कैसे पास कर सकता हूं?


139

जब भी कोई वेबपेज लोड होता है तो मैं एक PHP स्क्रिप्ट बुला रहा हूं। हालांकि, एक पैरामीटर है कि PHP स्क्रिप्ट को चलाने की आवश्यकता है (जो कि मैं सामान्य रूप से कमांड लाइन से गुजरता हूं जब मैं स्क्रिप्ट का परीक्षण कर रहा हूं)।

पृष्ठ लोड होने पर स्क्रिप्ट चलने पर मैं इस तर्क को कैसे पारित कर सकता हूं?


1
क्या आप अपना कोड पोस्ट कर सकते हैं?
सेनोरमोर

1
तो आप एक कमांड लाइन चलाना चाहते हैं? या एक php स्क्रिप्ट?
क्रिस्टोफर पेलायो

ठीक है, धन्यवाद दोस्तों। मुझे नीचे उत्तर मिला: $ GET का उपयोग करें और इसे url में पैरामीटर मान के रूप में पास करें।
निक

जवाबों:


232

संभवतः आप निम्नानुसार कमांड लाइन पर तर्क पारित कर रहे हैं:

php /path/to/wwwpublic/path/to/script.php arg1 arg2

... और फिर उन्हें स्क्रिप्ट में इस तरह एक्सेस करना:

<?php
// $argv[0] is '/path/to/wwwpublic/path/to/script.php'
$argument1 = $argv[1];
$argument2 = $argv[2];
?>

HTTP के माध्यम से तर्क पास करते समय आपको क्या करने की आवश्यकता है (वेब ​​पर स्क्रिप्ट का उपयोग करके) क्वेरी स्ट्रिंग का उपयोग कर रहा है और $ _GET सुपरग्लोबल के माध्यम से उन तक पहुंच सकता है:

Http://yourdomain.com/path/to/script.php?argument1=arg1&argument2=arg2 पर जाएं

... और पहुंच:

<?php
$argument1 = $_GET['argument1'];
$argument2 = $_GET['argument2'];
?>

यदि आप स्क्रिप्ट को चलाना चाहते हैं, जहां आप इसे (कमांड लाइन या ब्राउज़र से) कहते हैं, तो आप निम्नलिखित में से कुछ चाहते हैं:

EDIT: जैसा कि टिप्पणियों में Cthulhu ने बताया है, PHP_SAPI निरंतर का उपयोग करने के लिए आप जिस वातावरण का निष्पादन कर रहे हैं, उसका परीक्षण करने का सबसे सीधा तरीका है । मैंने तदनुसार कोड अपडेट किया है:

<?php
if (PHP_SAPI === 'cli') {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
else {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
}
?>

मैं उपयोग करूंगा empty($_GET)$_GETएक पूर्वनिर्धारित मूल्य है, इसलिए मुझे पूरा यकीन है कि यह हमेशा सेट है, लेकिन अगर कोई GET पैरामीटर सेट नहीं है तो खाली है। खाली तारों और सरणियों के लिए empty()रिटर्न false
टिम एस।

वास्तव में जाँच के बिना, मुझे विश्वास है कि $_GETवास्तव में सेट नहीं है अगर स्क्रिप्ट को कमांड लाइन के संदर्भ में कहा जाता है। empty()यदि कमांड स्क्रिप्ट को क्वेरी स्ट्रिंग के बिना वेब से एक्सेस किया जाता है, तो यह अधिक नोटिस फेंकने के लिए कमांड लाइन तर्कों को देखने का कारण होगा।
जेसन

$ argv [0] वास्तव में आपके 1 उदाहरण में arg1 नहीं है, यह "/path/to/wwwpublic/path/to/script.php" होगा। ( php.net/manual/en/reserved.variables.argv.php )
अनौपचारिक

3
मुझे एहसास है कि मुझे पार्टी के लिए देर हो रही है, लेकिन जाँच करने का उचित तरीका है PHP_SAPI === 'cli'
Cthulhu

1
@emanueledelgrande मुझे पूरा यकीन नहीं है कि आप जो पूछ रहे हैं उसका मैं पालन करता हूँ, लेकिन मैं कोशिश करूँगा। .htaccessएक अपाचे फ़ाइल है - अपाचे निर्देशों के साथ आने वाले अनुरोधों को संसाधित करता है .htaccessऔर फिर अनुरोध की प्रतिक्रिया बनाने के लिए PHP को आमंत्रित करता है। इसलिए, यदि आप कमांड लाइन में हैं, .htaccessतो पूरी तरह से नजरअंदाज कर दिया जाएगा। यदि आप वेब के माध्यम से एक स्क्रिप्ट का उपयोग कर रहे हैं, और आप अनुरोध प्राप्त करने के बाद नए क्वेरिस्ट्रिंग तर्क जोड़ना चाहते हैं, तो यह आमतौर पर के साथ किया जाता है mod_rewrite। यदि वह आपके प्रश्न का पर्याप्त उत्तर नहीं देता है, तो मेरा सुझाव है कि आप एक नया प्रश्न पोस्ट करें।
जेसन

17
$argv[0]; // the script name
$argv[1]; // the first parameter
$argv[2]; // the second parameter

यदि आप सभी स्क्रिप्ट को चलाना चाहते हैं, जहाँ आप इसे (कमांड लाइन या ब्राउज़र से) कहते हैं, तो आप कुछ इस तरह चाहते हैं:

<?php
if ($_GET) {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
} else {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
?>

कमांड लाइन से कॉल करने chmod 755 /var/www/webroot/index.phpऔर उपयोग करने के लिए

/usr/bin/php /var/www/webroot/index.php arg1 arg2

ब्राउज़र से कॉल करने के लिए, उपयोग करें

http://www.mydomain.com/index.php?argument1=arg1&argument2=arg2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.