PHP

2010-03-05 7 views
7

में STDOUT की तलाश में मेरे पास एक PHP स्क्रिप्ट है जो सीएलआई में चल रही है और मैं वर्तमान प्रतिशत प्रगति प्रदर्शित करना चाहता हूं इसलिए मैं सोच रहा था कि नया प्रतिशत प्रदर्शित करने के लिए STDOUT को अपडेट करना संभव है या नहीं।PHP

जब मैं रिवाइंड() या fseek() का उपयोग करता हूं तो यह सिर्फ एक त्रुटि संदेश फेंकता है।

+0

नीचे जवाब उत्कृष्ट हैं, लेकिन मैं चाहता हूँ वहां एक वैकल्पिक दृष्टिकोण फेंकने के लिए: इसे आसान रखें। समय-समय पर प्रगति डेटा की एक नई पंक्ति का उत्पादन करें। या एक प्रिंट करें "।" चार। यह एक ही पंक्ति को बार-बार अपडेट करने के रूप में उतना ही अच्छा नहीं है, लेकिन यह सरल, कार्यात्मक, संगत और काम करता है, साथ ही साथ आपके ऐप का आउटपुट कंसोल करने जा रहा है, या फ़ाइल में पाइप किया जा रहा है। –

उत्तर

7

इस कोड को देखें:

<?php 
echo "1"; 
echo chr(8); 
echo "2"; 

उत्पादन केवल 2 के बाद से "chr (8)" "बैकस्पेस" के लिए चार है।

तो बस वापस जाने और नए प्रतिशत को मुद्रित करने के लिए आवश्यक वर्णों की संख्या मुद्रित करें।

मुद्रण "\ r" लिनक्स और विंडोज पर भी काम करता है, लेकिन पर एक मैक

कार्य उदाहरण यह कटौती करने के लिए नहीं जा रहा है:

echo "Done: "; 
$string = ""; 
for($i = 0; $i < 100; ++$i) { 
    echo str_repeat(chr(8), strlen($string)); 
    $string = $i."%"; 
    echo $string; 
    sleep(1); 
} 
+0

चीयर्स, यह उत्तर सही था :) – instigator

+0

यह कुछ 7/8 बिट टर्मिनल इम्यूलेशन के साथ काम कर सकता है लेकिन यह एक गन्दा समाधान है – symcbean

+1

एक "गन्दा" समाधान जो प्रत्येक लिनक्स (बैश, खोल, ..) विंडोज और मैक प्लेटफॉर्म पर काम करता है और आपको ncurses (एक अतिरिक्त PHP मॉड्यूल जो आपके होस्ट पर उपलब्ध नहीं हो सकता है) या कुछ और बनाने की आवश्यकता नहीं है। इससे अधिक कुछ भी उपयोगिता के कम से कम 95% में ओपी का समय बर्बाद होगा। – edorian

4

आउटपुट \r और फिर वर्तमान लाइन के पहले कॉलम पर वापस जाने के लिए फ्लश करें।

+1

वैकल्पिक रूप से आप अपने कमांडलाइन आउटपुट के लिए ncurses का उपयोग करने का प्रयास कर सकते हैं जिसमें ncurses_move (,) फ़ंक्शन है जो आपको जहां चाहें आउटपुट डाल देगा, मनमाने ढंग से। – cazlab

-1

कंसोल/टर्मिनल को लिखना आश्चर्यजनक रूप से जटिल है यदि आप आउटपुट रास्टर में पीछे की ओर बढ़ना चाहते हैं या रंग जोड़ने जैसी चीजें करते हैं - और व्यवहार आपके द्वारा उपयोग किए जा रहे कंसोल/टर्मिनल के प्रकार के आधार पर अलग-अलग होगा। बहुत समय पहले कुछ लोग टर्मिनल के एक अमूर्त प्रतिनिधित्व के निर्माण और उस पर लिखने के विचार के साथ आए थे।

PHP में ऐसा करने के तरीके के विवरण के लिए this article देखें।

+0

उसने पहले ही कहा था कि वह सीएलआई का उपयोग कर रहा था। – cazlab

+1

@cazlab: "सीएलआई" टर्मिनल प्रकार नहीं है। –

संबंधित मुद्दे