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 | }  |