वैसे भी PHP में STDIN पर गैर-ब्लॉक कर रहा है वहाँ पीएचपी साथ STDIN
से पढ़ने के लिए है कि गैर अवरुद्ध:CLI
stream_set_blocking(STDIN, false);
echo fread(STDIN, 1);
और इस:
$stdin = fopen('php://stdin', 'r');
stream_set_blocking($stdin, false);
echo 'Press enter to force run command...' . PHP_EOL;
echo fread($stdin, 1);
मैं इस कोशिश की लेकिन यह अभी भी fread
तक कुछ डेटा प्राप्त करता है तब तक ब्लॉक करता है।
मैंने इस (7 वर्ष की उम्र) के बारे में कुछ खुली बग रिपोर्ट देखी, इसलिए यदि यह नहीं किया जा सकता है, तो क्या कोई भी ऐसे क्रूड हैक्स को जानता है जो इसे पूरा कर सकता है (विंडोज और लिनक्स पर)?
- https://bugs.php.net/bug.php?id=34972
- https://bugs.php.net/bug.php?id=47893
- https://bugs.php.net/bug.php?id=48684
सुनिश्चित नहीं है कि मैं समझता हूं कि गैर-अवरोधक व्यवहार क्या होना चाहिए। अगर स्टडीन को खिलाया जाने का इंतजार करने के लिए कुछ भी नहीं है, तो 'गलत() 'एक झूठी वापसी करनी चाहिए? ईओएफ से यह कैसे अंतर करेगा? मुझे लगता है कि यह निर्धारित करने के लिए कि क्या कोई वर्णनात्मक विफलता नहीं है, यह निर्धारित करने के लिए कि आपको stdin पर डेटा देखने का निर्धारण करने के लिए 'fread()' से कुछ प्रकार की टेस्ट * अन्य * की आवश्यकता है। – Graham
@ ग्राहम 'फ्रेड' वापस नहीं आएगा, यानी स्क्रिप्ट के निष्पादन को रोकें, जब तक कि इनपुट 'STDIN' को नहीं दिया जाता है। मूल रूप से जो मैं चाहता हूं, यह जांचना है कि 'STDIN' में कोई उपयोगकर्ता इनपुट है या नहीं, और यदि नहीं, जारी रखें, या फिर कुछ अन्य सामान चलाएं। – Petah
@ ग्राहम "गैर अवरोधन" का अर्थ है कि 'फ्रेड()' तुरंत वापस आना चाहिए, भले ही वह डेटा की मात्रा को पढ़ न सके, इसे पढ़ना चाहिए (दूसरा तर्क), लेकिन इससे कम। इस मामले में इसे एक खाली स्ट्रिंग वापस करनी चाहिए। @Petah क्या आपने 'fopen ('php: // stdin)' कोशिश की? मुझे अस्पष्टता से याद है, कि मुझे पहले 'एसटीडीआईएन' के साथ समस्याएं थीं। – KingCrunch