You've already forked joomla_test
							
							
		
			
	
	
		
			197 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			197 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | /** | ||
|  |  * @package     Joomla.Platform | ||
|  |  * @subpackage  Utilities | ||
|  |  * | ||
|  |  * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved. | ||
|  |  * @license     GNU General Public License version 2 or later; see LICENSE | ||
|  |  */ | ||
|  | 
 | ||
|  | defined('JPATH_PLATFORM') or die; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Generic Buffer stream handler | ||
|  |  * | ||
|  |  * This class provides a generic buffer stream.  It can be used to store/retrieve/manipulate | ||
|  |  * string buffers with the standard PHP filesystem I/O methods. | ||
|  |  * | ||
|  |  * @package     Joomla.Platform | ||
|  |  * @subpackage  Utilities | ||
|  |  * @since       11.1 | ||
|  |  */ | ||
|  | class JBuffer | ||
|  | { | ||
|  | 	/** | ||
|  | 	 * Stream position | ||
|  | 	 * | ||
|  | 	 * @var    integer | ||
|  | 	 * @since  11.1 | ||
|  | 	 */ | ||
|  | 	public $position = 0; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Buffer name | ||
|  | 	 * | ||
|  | 	 * @var    string | ||
|  | 	 * @since  11.1 | ||
|  | 	 */ | ||
|  | 	public $name = null; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Buffer hash | ||
|  | 	 * | ||
|  | 	 * @var    array | ||
|  | 	 * @since  12.1 | ||
|  | 	 */ | ||
|  | 	public $buffers = array(); | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Function to open file or url | ||
|  | 	 * | ||
|  | 	 * @param   string   $path          The URL that was passed | ||
|  | 	 * @param   string   $mode          Mode used to open the file @see fopen | ||
|  | 	 * @param   integer  $options       Flags used by the API, may be STREAM_USE_PATH and | ||
|  | 	 *                                  STREAM_REPORT_ERRORS | ||
|  | 	 * @param   string   &$opened_path  Full path of the resource. Used with STREAN_USE_PATH option | ||
|  | 	 * | ||
|  | 	 * @return  boolean | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 * @see     streamWrapper::stream_open | ||
|  | 	 */ | ||
|  | 	public function stream_open($path, $mode, $options, &$opened_path) | ||
|  | 	{ | ||
|  | 		$url = parse_url($path); | ||
|  | 		$this->name = $url['host']; | ||
|  | 		$this->buffers[$this->name] = null; | ||
|  | 		$this->position = 0; | ||
|  | 
 | ||
|  | 		return true; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Read stream | ||
|  | 	 * | ||
|  | 	 * @param   integer  $count  How many bytes of data from the current position should be returned. | ||
|  | 	 * | ||
|  | 	 * @return  mixed    The data from the stream up to the specified number of bytes (all data if | ||
|  | 	 *                   the total number of bytes in the stream is less than $count. Null if | ||
|  | 	 *                   the stream is empty. | ||
|  | 	 * | ||
|  | 	 * @see     streamWrapper::stream_read | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function stream_read($count) | ||
|  | 	{ | ||
|  | 		$ret = substr($this->buffers[$this->name], $this->position, $count); | ||
|  | 		$this->position += strlen($ret); | ||
|  | 
 | ||
|  | 		return $ret; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Write stream | ||
|  | 	 * | ||
|  | 	 * @param   string  $data  The data to write to the stream. | ||
|  | 	 * | ||
|  | 	 * @return  integer | ||
|  | 	 * | ||
|  | 	 * @see     streamWrapper::stream_write | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function stream_write($data) | ||
|  | 	{ | ||
|  | 		$left = substr($this->buffers[$this->name], 0, $this->position); | ||
|  | 		$right = substr($this->buffers[$this->name], $this->position + strlen($data)); | ||
|  | 		$this->buffers[$this->name] = $left . $data . $right; | ||
|  | 		$this->position += strlen($data); | ||
|  | 
 | ||
|  | 		return strlen($data); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Function to get the current position of the stream | ||
|  | 	 * | ||
|  | 	 * @return  integer | ||
|  | 	 * | ||
|  | 	 * @see     streamWrapper::stream_tell | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function stream_tell() | ||
|  | 	{ | ||
|  | 		return $this->position; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Function to test for end of file pointer | ||
|  | 	 * | ||
|  | 	 * @return  boolean  True if the pointer is at the end of the stream | ||
|  | 	 * | ||
|  | 	 * @see     streamWrapper::stream_eof | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function stream_eof() | ||
|  | 	{ | ||
|  | 		return $this->position >= strlen($this->buffers[$this->name]); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * The read write position updates in response to $offset and $whence | ||
|  | 	 * | ||
|  | 	 * @param   integer  $offset  The offset in bytes | ||
|  | 	 * @param   integer  $whence  Position the offset is added to | ||
|  | 	 *                            Options are SEEK_SET, SEEK_CUR, and SEEK_END | ||
|  | 	 * | ||
|  | 	 * @return  boolean  True if updated | ||
|  | 	 * | ||
|  | 	 * @see     streamWrapper::stream_seek | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function stream_seek($offset, $whence) | ||
|  | 	{ | ||
|  | 		switch ($whence) | ||
|  | 		{ | ||
|  | 			case SEEK_SET: | ||
|  | 				if ($offset < strlen($this->buffers[$this->name]) && $offset >= 0) | ||
|  | 				{ | ||
|  | 					$this->position = $offset; | ||
|  | 					return true; | ||
|  | 				} | ||
|  | 				else | ||
|  | 				{ | ||
|  | 					return false; | ||
|  | 				} | ||
|  | 				break; | ||
|  | 
 | ||
|  | 			case SEEK_CUR: | ||
|  | 				if ($offset >= 0) | ||
|  | 				{ | ||
|  | 					$this->position += $offset; | ||
|  | 					return true; | ||
|  | 				} | ||
|  | 				else | ||
|  | 				{ | ||
|  | 					return false; | ||
|  | 				} | ||
|  | 				break; | ||
|  | 
 | ||
|  | 			case SEEK_END: | ||
|  | 				if (strlen($this->buffers[$this->name]) + $offset >= 0) | ||
|  | 				{ | ||
|  | 					$this->position = strlen($this->buffers[$this->name]) + $offset; | ||
|  | 					return true; | ||
|  | 				} | ||
|  | 				else | ||
|  | 				{ | ||
|  | 					return false; | ||
|  | 				} | ||
|  | 				break; | ||
|  | 
 | ||
|  | 			default: | ||
|  | 				return false; | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | // Register the stream
 | ||
|  | stream_wrapper_register('buffer', 'JBuffer'); |