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');
 | 
