pictcode / lib / Cake / Console / ConsoleInput.php @ 0b1b8047
履歴 | 表示 | アノテート | ダウンロード (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 | } |