2010-05-28 12 views
16

मैं एक php स्क्रिप्ट लिखना चाहता हूं जिसे मैं कमांड लाइन से उपयोग कर सकता हूं। मैं इसे कुछ वस्तुओं के लिए इनपुट को संकेत और स्वीकार करना चाहता हूं, और उसके बाद कुछ परिणाम थूकना चाहता हूं। मैं इसे php में करना चाहता हूं, क्योंकि मेरे सभी वर्ग और पुस्तकालय php में हैं, और मैं बस कुछ चीजों के लिए एक सरल कमांड लाइन इंटरफ़ेस बनाना चाहता हूं।मैं कमांड लाइन इंटरैक्टिव PHP स्क्रिप्ट कैसे लिखूं?

संकेत और स्वीकार्य बार-बार कमांड लाइन इनपुट वह हिस्सा है जो मुझे ट्राइप कर रहा है। मैं यह कैसे करु?

उत्तर

12

से PHP: Read from Keyboard – Get User Input from Keyboard Console by Typing:

आप एक विशेष फ़ाइल की आवश्यकता: php://stdin जो मानक इनपुट के लिए खड़ा है।

print "Type your message. Type '.' on a line by itself when you're done.\n"; 

$fp = fopen('php://stdin', 'r'); 
$last_line = false; 
$message = ''; 
while (!$last_line) { 
    $next_line = fgets($fp, 1024); // read the special file to get the user input from keyboard 
    if (".\n" == $next_line) { 
     $last_line = true; 
    } else { 
     $message .= $next_line; 
    } 
} 
17

पीएचपी पुस्तिका से I/O Streams पेज बताता है कि कैसे आप कमांड लाइन से एक लाइन को पढ़ने के लिए STDIN का उपयोग कर सकते हैं:

<?php 
$line = trim(fgets(STDIN)); // reads one line from STDIN 
fscanf(STDIN, "%d\n", $number); // reads number from STDIN 
?> 
1

एल्गोरिथ्म सरल है:

until done: 
    display prompt 
    line := read a command line of input 
    handle line 

यह एक सरणी() है कि आदेशों नक्शे कार्यों कि उन्हें संभाल कालबैक में उपयोग करने के लिए बहुत तुच्छ है। पूरी चुनौती लगभग थोड़ी देर लूप है, और दो फ़ंक्शन कॉल, PHP के पास उन्नत उन्नत ऐप्स के लिए readline interface भी है।

+0

"इनपुट की एक कमांड लाइन पढ़ें" भाग मुझे यात्रा करता है। उपयोगकर्ता इनपुट को निरंतर मतदान करने के लिए आप इसे कैसे प्राप्त करते हैं? – user151841

+0

आम तौर पर यह कुछ ऐसा किया जाता है ($ line = readline ($ promptstring)); बढ़िया विवरण मूल रूप से आपके द्वारा की जाने वाली त्रुटि जांच की मात्रा, और उपयोगकर्ता कैसे बाहर निकलने के लिए कहता है। मैन्युअल में fgets() और readline() फ़ंक्शंस पर नज़र डालें। – TerryP

9

मुझे यकीन है कि कैसे जटिल अपने इनपुट हो सकता है नहीं कर रहा हूँ, लेकिन readline एक शानदार तरीका इंटरैक्टिव CLI कार्यक्रमों के लिए इसे संभाल करने के लिए है।

आपको उसी प्राणी को आराम मिलता है जिससे आप अपने खोल से अपेक्षा करेंगे, जैसे कमांड इतिहास।

$command = readline("Enter Command: "); 
/* Then add the input to the command history */ 
readline_add_history($command); 

If available, यह वास्तव में यह आसान पड़ता है:

इसका इस्तेमाल करते हुए के रूप में सरल रूप में है। कोड की

+0

एक सरल [सीएलआई - कमांड लाइन इंटरफेस] को लागू करने का सबसे अच्छा तरीका (https://en.wikipedia.org/wiki/Command-line_interface)! –

1

सरल:

#!/usr/bin/php 
<?php 
define('CONFIRMED_NO', 1); 

while (1) { 
    fputs(STDOUT, "\n"."***WARNING***: This action causes permanent data deletion.\nAre you sure you're not going to wine about it later? [y,n]: "); 

    $response = strtolower(trim(fgets(STDIN))); 
    if($response == 'y') { 
     break; 
    } elseif($response == 'n') { 
     echo "\n",'So I guess you changed your mind eh?', "\n"; 
     exit (CONFIRMED_NO); 
    } else { 
     echo "\n", "Dude, that's not an option you idiot. Let's try this again.", "\n"; 
     continue; 
    } 
} 

echo "\n","You're very brave. Let's continue with what we wanted to do.", "\n\n"; 
1

मेरे पांच सेंट: STDOUT और STDIN का उपयोग करना:

fwrite(STDOUT, "Please enter your Message (enter 'quit' to leave):\n"); 

do{ 
    do{ 
     $message = trim(fgets(STDIN)); 
    } while($message == ''); 

    if(strcasecmp($message, 'quit') != 0){ 
     fwrite(STDOUT, "Your message: ".$message."\n"); 
    } 

}while(strcasecmp($message,'quit') != 0); 
// Exit correctly 
exit(0); 
संबंधित मुद्दे