পিএইচপি লিনাক্স কমান্ড প্রম্পটে G _GET কে পাশ করছে


125

বলুন আমরা সাধারণত এর মাধ্যমে অ্যাক্সেস করি

http://localhost/index.php?a=1&b=2&c=3

আমরা কীভাবে লিনাক্স কমান্ড প্রম্পটে একই সম্পাদন করব?

php -e index.php

তবে $ _GET ভেরিয়েবলগুলি পাস করার বিষয়ে কী? হয়তো পিএইচপি-ই সূচি.এফপি --এ 1 - বি 2 - সি 3 এর মতো কিছু? সন্দেহ যে কাজ করবে।

ধন্যবাদ!

উত্তর:


122

সাধারণত, একটি কমান্ড লাইন স্ক্রিপ্টে তর্কগুলি পাস করার জন্য, আপনি 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পাশাপাশি করতে পারেন ।


1
এটি লক্ষণীয় যে, আমাদের সেন্টোস 6 মেশিনে চলমান পিএইচপি 5.3 চালানো, কলিংটি php [script name] "a=1&b=2&c=3"জনপ্রিয় হবে না $_SERVER['QUERY_STRING'], তবে আপনি সহজেই উল্লেখ করে একই জিনিসটিকে প্রভাবিত করতে পারেন $_SERVER['argv'][1]
এরিক এল

4
পিএইচপি স্ক্রিপ্ট পরিবর্তন না করে কমান্ড লাইন থেকে ক্যোরিয় স্ট্রিংটি জনপ্রিয় করার জন্য এই উত্তরটি চেষ্টা করুন ।
qris

এটি সেরা উত্তর নয়। এই পৃষ্ঠায় এই অন্যান্য উত্তরটি দেখুন: stackoverflow.com/a/11965479/543738
এলএস

সহায়ক উত্তর, যদিও আমার মতো আপনি যদি ভাবছেন যে এই কলোনগুলি যুক্তি নামগুলির পরে কী রয়েছে তবে getopt()এটি স্পষ্টতই পিএইচপিকে বলে যে আপনি যুক্তি চান f, বিকল্পটি নয় f (যা কোলনটি মাইনাসে নির্দিষ্ট করা হবে) not সুতরাং এটি ঠিক বাক্য গঠন।
মিত্য

আমি শেষ উত্তরটি সত্যিই পছন্দ করি এবং গতকাল আমি এটি ব্যবহার করেছি। এটিকেও স্ক্রিপ্টে পরিণত করা যেতে পারে।
রিনিয়ারপোস্ট

239

সার্ভারফল্টে এই উত্তর থেকে :

ন্যায়বিচারের 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

10
+1 এবং +1: এই উত্তরটি গ্রহণযোগ্য উত্তর হওয়া উচিত ছিল। অনেক কম ঝামেলা! পিএইচপি উত্স পরিবর্তন করার প্রয়োজন নেই।
মিচা

2
দুর্দান্ত, এটি কোনও ওএস-নির্ভর স্ক্রিপ্টে সহজেই মোড়ানো হতে পারে।
সেবাস্তিয়ান

2
+1, দুর্দান্ত সমাধান, এখনই এটি সমর্থন করার জন্য আমি আমার সমস্ত সিএলআই স্ক্রিপ্টগুলি ব্যাকপোর্ট করছি;)
এহাইম

আমি এখনও অবধি কেবলমাত্র খারাপ দিকটিই দেখেছি যে টার্মিনাল আউটপুটটি কেবলমাত্র rather n এর পরিবর্তে <br /> সহ HTML HTML এটি সমস্ত নোটিশ এবং ত্রুটিগুলির জন্যও প্রযোজ্য, যেমন<b>Notice</b>: Undefined index: testing in <b> ... </b><br />
বাফ্রোমকা

+1 আশ্চর্যজনক, এটি সাধারণ স্ক্রিপ্টে কাজ করে Ex _ প্রাক্তনের জন্য মূল্য পান: php-cgi -f /var/www/vhosts/example.com/public_html/index.php action=DoSomething ভাল কাজ করে ..
আজমল প্রবীণ

16

উবুন্টুতে আমার পিএইচপি-সিজি বাইনারি নেই, তাই আমি এটি করেছি:

% ওরএল পিএইচপি-সিজি = "পিএইচপি-সিআর" "" পার্স_স্টার (ইমপ্লোড ("&", অ্যারে_স্লাইস ($ আরজিভি, 2)), $ _ জিইটি); ($ আরজিভি [1]); '"' -" অন্তর্ভুক্ত করুন
% php-cgi test1.php foo = 123
<HTML>
আপনি 123 এ foo সেট করেছেন।
</ HTML>

% বিড়াল test1.php
<html> আপনি <? পিএইচপি প্রিন্ট to _GET ['foo']?> এ foo সেট করেছেন </ </ html>

কর্মীদের ঠিক করার জন্য পিএইচপি-র মতো দেখাচ্ছে।
ফেলিকজেড

14

কখনও কখনও আপনার কাছে পাস করা প্যারামিটারগুলিতে $ _GET সেট করতে পিএইচপি ফাইল সম্পাদনা করার বিকল্প নেই এবং কখনও কখনও আপনি পিএইচপি-সিজি ইনস্টল করতে বা করতে চান না।

আমি এটি এই ক্ষেত্রে সেরা সমাধান হিসাবে খুঁজে পেয়েছি:

php -r '$_GET["key"]="value"; require_once("script.php");' 

এটি আপনার পিএইচপি ফাইল পরিবর্তন করতে এড়াতে পারে এবং আপনাকে প্লেইন পিএইচপি কমান্ড ব্যবহার করতে দেয়। আপনি যদি পিএইচপি-সিজি ইনস্টল করে থাকেন তবে তা যেকোন উপায়েই ব্যবহার করুন তবে এটি পরবর্তী সেরা জিনিস। ভেবেছি এই বিকল্পগুলি উল্লেখ করার যোগ্য

-r মানে নিম্নলিখিত স্ট্রিংয়ে পিএইচপি কোড চালান। আপনি ম্যানুয়ালি $ _GET মান সেট করুন এবং তারপরে আপনি যে ফাইলটি চালাতে চান তা উল্লেখ করুন।

এটি আপনার ডান ফোল্ডারে চালিত হওয়া উচিত, এটি প্রায়শই কিন্তু পিএইচপি ফাইলের ফোল্ডারে সর্বদা থাকে না statements


1
আমি এই সমাধানের জন্য আপনাকে ধন্যবাদ জানাতে চাই। আমার মতে এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি ব্যবহারের জন্য আপনাকে কোনও অতিরিক্ত লাইব্রেরি ইনস্টল করতে হবে না।
তরোয়াল সুরক্ষা

এটি গৃহীত উত্তরের চেয়ে ভাল। আপনার জন্য উত্সাহ!
faraday703

দারুণ ও সহজ সমাধান!
derRobert

দুর্দান্ত উত্তর। আপনি কেবল আপনার কোডে একটি শেষ উদ্ধৃতি মিস করছেন :)
পেড্রো আরাউজো জর্জে

10
php file_name.php var1 var2 varN

তারপরে $_GETপিএইচপিতে আপনার ভেরিয়েবলগুলি আপনার প্রথম লাইনে সেট করুন , যদিও এটি কোনও $_GETভেরিয়েবল সেট করার কাঙ্ক্ষিত উপায় নয় এবং আপনি সেই ভেরিয়েবলটি পরে কী করবেন তার উপর নির্ভর করে আপনার সমস্যা হতে পারে।

if (isset($argv[1])) {
   $_GET['variable_name'] = $argv[1];
}

আপনি স্ক্রিপ্টটি প্রবর্তন করে এমন ভেরিয়েবলগুলি $argvআপনার পিএইচপি অ্যাপ্লিকেশানের অ্যারে থেকে অ্যাক্সেসযোগ্য হবে । প্রথম এন্ট্রিটি যে স্ক্রিপ্টের থেকে এসেছে সেটির নাম থাকবে, তাই আপনি array_shift($argv)যদি ভেরিয়েবলগুলির গুচ্ছ প্রক্রিয়া করতে চান তবে আপনি সেই প্রথম এন্ট্রিটি ড্রপ করতে একটি করতে চাইতে পারেন। অথবা কেবল একটি স্থানীয় ভেরিয়েবলে লোড করুন।


সবচেয়ে সহজ এবং সহজ সমাধান
জোও পিমেন্টেল

9

ব্যবহার করার চেষ্টা করুন WGET:

WGET 'http://localhost/index.php?a=1&b=2&c=3'

1
আপনি কি ইউআরএল একক উদ্ধৃতিতে আবদ্ধ করতে চান? এবং কোয়েরির অংশে শেল মেটাচার্যাক্টর রয়েছে (একক চর ওয়াইল্ডকার্ড + "ব্যাকগ্রাউন্ডে এই কমান্ডটি চালান")।
মার্ক বি

7
এটি কাজ করবে, তবে চলমান ওয়েব সার্ভারের প্রয়োজন এবং পুরো প্রক্রিয়াটি প্রয়োজনের তুলনায় আরও কিছুটা অদক্ষ করে তোলে।
ব্র্যাড

এটি করে তবে সাধারণত $_GETচলমান ওয়েবসার্ভার বোঝায়।
কুইকশিফ্টিন

6

- বিকল্প 1: পিএইচপি-সিজি -

আপনার স্ক্রিপ্টটি চালাতে 'পিএইচপি' এর জায়গায় 'পিএইচপি-সিজি' ব্যবহার করুন। এটি সবচেয়ে সহজ উপায় কারণ এটি দিয়ে কাজ করার জন্য আপনার পিএইচপি কোডটি বিশেষভাবে সংশোধন করার প্রয়োজন হবে না:

php-cgi -f /my/script/file.php a=1 b=2 c=3

- বিকল্প 2: আপনার যদি একটি ওয়েব সার্ভার থাকে -

যদি পিএইচপি ফাইলটি কোনও ওয়েব সার্ভারে থাকে আপনি কমান্ড লাইনে 'উইজেট' ব্যবহার করতে পারেন:

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"

- পিএইচপি তে ভেরিয়েবল অ্যাক্সেস করা -

1 এবং 2 উভয় বিকল্পে আপনি এই জাতীয় প্যারামিটারগুলি অ্যাক্সেস করতে পারেন:

$a = $_GET["a"];
$b = $_GET["b"];
$c = $_GET["c"];

2

আপনি পাস করার প্রয়োজন হলে $_GET, $_REQUEST, $_POST, বা অন্য কিছু আপনার কাছে পিএইচপি ইন্টারেক্টিভ মোডে ব্যবহার করতে পারেন:

php -a

তারপরে টাইপ করুন:

<?php
$_GET['a']=1;
$_POST['b']=2;
include("/somefolder/some_file_path.php");

এটি ম্যানুয়ালি আপনার পছন্দসই যে কোনও ভেরিয়েবল সেট করবে এবং তারপরে সেইগুলি ভেরিয়েবল সেট সহ আপনার পিএইচপি ফাইল চালাবে।


1

আপনার যদি পিএইচপি স্ক্রিপ্ট সম্পাদনা করার সম্ভাবনা থাকে তবে আপনি স্ক্রিপ্টের শুরুতে নিম্নলিখিত কোডটি ব্যবহার করে কৃত্রিমভাবে $ _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'
    }
}

1

কমান্ড লাইনে নিম্নলিখিতটি পেস্ট করুন

export QUERY_STRING="param1=abc&param2=xyz" ;  
POST_STRING="name=John&lastname=Doe" ; php -e -r 
'parse_str($_SERVER["QUERY_STRING"], $_GET); parse_str($_SERVER["POST_STRING"], 
$_POST);  include "index.php";'

0

আমি কেবল তাদের এভাবে পাস করি:

php5 script.php param1=blabla param2=yadayada

ঠিক কাজ করে, $ _GET অ্যারেটি হ'ল:

array(3) {
  ["script_php"]=>
  string(0) ""
  ["param1"]=>
  string(6) "blabla"
  ["param2"]=>
  string(8) "yadayada"
}

সবেমাত্র এটি আমার হোস্টিং সার্ভারে কাজ করে, তবে আমার স্থানীয় সার্ভারে নয়, নির্ঘাত।
আসফ

ইনস্টল সংস্করণে কোনও পার্থক্য হতে পারে? এটি আপনার জন্য কোন সংস্করণে কাজ করেছে এবং কোনটি ব্যর্থ হয়েছিল?
Kzqai

পিএইচপি 5.2 হোস্টিংয়ের উপর, কাজ করে, 5.3 স্থানীয়ভাবে হয় না ... কিছু যায় আসে না I _গেট ফাঁকা থাকলেই আমি it আরজিভি উপায়টি করেছি
আসফ

-1

php -r 'parse_str($argv[2],$_GET);include $argv[1];' index.php 'a=1&b=2'

আপনি প্রথম অংশটি একটি উপাধি হিসাবে তৈরি করতে পারেন:

alias php-get='php -r '\''parse_str($argv[2],$_GET);include $argv[1];'\'

তারপরে সহজভাবে ব্যবহার করুন:

php-get some_script.php 'a=1&b=2&c=3'


-2

অথবা কেবল (আপনার কাছে এলওয়াইএনএক্স থাকলে):

lynx 'http://localhost/index.php?a=1&b=2&c=3'

3
এটি কমান্ড লাইন থেকে পিএইচপি চালায় না। এটি একটি ব্রাউজার চালায় যা কমান্ড লাইনের মাধ্যমে ওয়েব সার্ভারটি ডাকে।
আন্দ্রে লাজারোটো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.