| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- <?php
- /**
- * ConsoleInput file.
- *
- * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
- * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
- *
- * Licensed under The MIT License
- * For full copyright and license information, please see the LICENSE.txt
- * Redistributions of files must retain the above copyright notice.
- *
- * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
- * @link http://cakephp.org CakePHP(tm) Project
- * @package Cake.Console
- * @since CakePHP(tm) v 2.0
- * @license http://www.opensource.org/licenses/mit-license.php MIT License
- */
-
- /**
- * Object wrapper for interacting with stdin
- *
- * @package Cake.Console
- */
- class ConsoleInput {
-
- /**
- * Input value.
- *
- * @var resource
- */
- protected $_input;
-
- /**
- * Can this instance use readline?
- * Two conditions must be met:
- * 1. Readline support must be enabled.
- * 2. Handle we are attached to must be stdin.
- * Allows rich editing with arrow keys and history when inputting a string.
- *
- * @var bool
- */
- protected $_canReadline;
-
- /**
- * Constructor
- *
- * @param string $handle The location of the stream to use as input.
- */
- public function __construct($handle = 'php://stdin') {
- $this->_canReadline = extension_loaded('readline') && $handle === 'php://stdin' ? true : false;
- $this->_input = fopen($handle, 'r');
- }
-
- /**
- * Read a value from the stream
- *
- * @return mixed The value of the stream
- */
- public function read() {
- if ($this->_canReadline) {
- $line = readline('');
- if (!empty($line)) {
- readline_add_history($line);
- }
- return $line;
- }
- return fgets($this->_input);
- }
-
- /**
- * Checks if data is available on the stream
- *
- * @param int $timeout An optional time to wait for data
- * @return bool True for data available, false otherwise
- */
- public function dataAvailable($timeout = 0) {
- $readFds = array($this->_input);
- $readyFds = stream_select($readFds, $writeFds, $errorFds, $timeout);
- return ($readyFds > 0);
- }
-
- }
|