pictcode / lib / Cake / Console / ConsoleInput.php @ master
履歴 | 表示 | アノテート | ダウンロード (1.995 KB)
1 | 635eef61 | spyder1211 | <?php
|
---|---|---|---|
2 | /**
|
||
3 | * ConsoleInput file.
|
||
4 | *
|
||
5 | * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||
6 | * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||
7 | *
|
||
8 | * Licensed under The MIT License
|
||
9 | * For full copyright and license information, please see the LICENSE.txt
|
||
10 | * Redistributions of files must retain the above copyright notice.
|
||
11 | *
|
||
12 | * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||
13 | * @link http://cakephp.org CakePHP(tm) Project
|
||
14 | * @package Cake.Console
|
||
15 | * @since CakePHP(tm) v 2.0
|
||
16 | * @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||
17 | */
|
||
18 | |||
19 | /**
|
||
20 | * Object wrapper for interacting with stdin
|
||
21 | *
|
||
22 | * @package Cake.Console
|
||
23 | */
|
||
24 | class ConsoleInput { |
||
25 | |||
26 | /**
|
||
27 | * Input value.
|
||
28 | *
|
||
29 | * @var resource
|
||
30 | */
|
||
31 | protected $_input; |
||
32 | |||
33 | /**
|
||
34 | * Can this instance use readline?
|
||
35 | * Two conditions must be met:
|
||
36 | * 1. Readline support must be enabled.
|
||
37 | * 2. Handle we are attached to must be stdin.
|
||
38 | * Allows rich editing with arrow keys and history when inputting a string.
|
||
39 | *
|
||
40 | * @var bool
|
||
41 | */
|
||
42 | protected $_canReadline; |
||
43 | |||
44 | /**
|
||
45 | * Constructor
|
||
46 | *
|
||
47 | * @param string $handle The location of the stream to use as input.
|
||
48 | */
|
||
49 | public function __construct($handle = 'php://stdin') { |
||
50 | $this->_canReadline = extension_loaded('readline') && $handle === 'php://stdin' ? true : false; |
||
51 | $this->_input = fopen($handle, 'r'); |
||
52 | } |
||
53 | |||
54 | /**
|
||
55 | * Read a value from the stream
|
||
56 | *
|
||
57 | * @return mixed The value of the stream
|
||
58 | */
|
||
59 | public function read() { |
||
60 | if ($this->_canReadline) { |
||
61 | $line = readline(''); |
||
62 | if (!empty($line)) { |
||
63 | readline_add_history($line);
|
||
64 | } |
||
65 | return $line; |
||
66 | } |
||
67 | return fgets($this->_input); |
||
68 | } |
||
69 | |||
70 | /**
|
||
71 | * Checks if data is available on the stream
|
||
72 | *
|
||
73 | * @param int $timeout An optional time to wait for data
|
||
74 | * @return bool True for data available, false otherwise
|
||
75 | */
|
||
76 | public function dataAvailable($timeout = 0) { |
||
77 | $readFds = array($this->_input); |
||
78 | $readyFds = stream_select($readFds, $writeFds, $errorFds, $timeout); |
||
79 | return ($readyFds > 0); |
||
80 | } |
||
81 | |||
82 | } |