You've already forked joomla_test
							
							
		
			
	
	
		
			299 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			299 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | /** | ||
|  |  * @package     Joomla.Platform | ||
|  |  * @subpackage  FileSystem | ||
|  |  * | ||
|  |  * @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; | ||
|  | 
 | ||
|  | jimport('joomla.filesystem.support.stringcontroller'); | ||
|  | 
 | ||
|  | /** | ||
|  |  * String Stream Wrapper | ||
|  |  * | ||
|  |  * This class allows you to use a PHP string in the same way that | ||
|  |  * you would normally use a regular stream wrapper | ||
|  |  * | ||
|  |  * @package     Joomla.Platform | ||
|  |  * @subpackage  FileSystem | ||
|  |  * @since       11.1 | ||
|  |  */ | ||
|  | class JStreamString | ||
|  | { | ||
|  | 	/** | ||
|  | 	 * The current string | ||
|  | 	 * | ||
|  | 	 * @var   string | ||
|  | 	 * @since  12.1 | ||
|  | 	 */ | ||
|  | 	protected $currentString; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * | ||
|  | 	 * The path | ||
|  | 	 * | ||
|  | 	 * @var   string | ||
|  | 	 * @since  12.1 | ||
|  | 	 */ | ||
|  | 	protected $path; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * | ||
|  | 	 * The mode | ||
|  | 	 * | ||
|  | 	 * @var   string | ||
|  | 	 * @since  12.1 | ||
|  | 	 */ | ||
|  | 	protected $mode; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * | ||
|  | 	 * Enter description here ... | ||
|  | 	 * @var   string | ||
|  | 	 * | ||
|  | 	 * @since  12.1 | ||
|  | 	 */ | ||
|  | 	protected $options; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * | ||
|  | 	 * Enter description here ... | ||
|  | 	 * @var   string | ||
|  | 	 * | ||
|  | 	 * @since  12.1 | ||
|  | 	 */ | ||
|  | 	protected $openedPath; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Current position | ||
|  | 	 * | ||
|  | 	 * @var   integer | ||
|  | 	 * @since  12.1 | ||
|  | 	 */ | ||
|  | 	protected $pos; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Length of the string | ||
|  | 	 * | ||
|  | 	 * @var   string | ||
|  | 	 * | ||
|  | 	 * @since  12.1 | ||
|  | 	 */ | ||
|  | 	protected $len; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Statistics for a file | ||
|  | 	 * | ||
|  | 	 * @var    array | ||
|  | 	 * @since  12.1 | ||
|  | 	 * | ||
|  | 	 * @see    http://us.php.net/manual/en/function.stat.php | ||
|  | 	 */ | ||
|  | 	protected $stat; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Method to open a file or URL. | ||
|  | 	 * | ||
|  | 	 * @param   string   $path          The stream path. | ||
|  | 	 * @param   string   $mode          Not used. | ||
|  | 	 * @param   integer  $options       Not used. | ||
|  | 	 * @param   string   &$opened_path  Not used. | ||
|  | 	 * | ||
|  | 	 * @return  boolean | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function stream_open($path, $mode, $options, &$opened_path) | ||
|  | 	{ | ||
|  | 		$this->currentString = &JStringController::getRef(str_replace('string://', '', $path)); | ||
|  | 
 | ||
|  | 		if ($this->currentString) | ||
|  | 		{ | ||
|  | 			$this->len = strlen($this->currentString); | ||
|  | 			$this->pos = 0; | ||
|  | 			$this->stat = $this->url_stat($path, 0); | ||
|  | 
 | ||
|  | 			return true; | ||
|  | 		} | ||
|  | 		else | ||
|  | 		{ | ||
|  | 			return false; | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Method to retrieve information from a file resource | ||
|  | 	 * | ||
|  | 	 * @return  array | ||
|  | 	 * | ||
|  | 	 * @see     http://www.php.net/manual/en/streamwrapper.stream-stat.php | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function stream_stat() | ||
|  | 	{ | ||
|  | 		return $this->stat; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Method to retrieve information about a file. | ||
|  | 	 * | ||
|  | 	 * @param   string   $path   File path or URL to stat | ||
|  | 	 * @param   integer  $flags  Additional flags set by the streams API | ||
|  | 	 * | ||
|  | 	 * @return  array | ||
|  | 	 * | ||
|  | 	 * @see     http://php.net/manual/en/streamwrapper.url-stat.php | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function url_stat($path, $flags = 0) | ||
|  | 	{ | ||
|  | 		$now = time(); | ||
|  | 		$string = &JStringController::getRef(str_replace('string://', '', $path)); | ||
|  | 		$stat = array( | ||
|  | 			'dev' => 0, | ||
|  | 			'ino' => 0, | ||
|  | 			'mode' => 0, | ||
|  | 			'nlink' => 1, | ||
|  | 			'uid' => 0, | ||
|  | 			'gid' => 0, | ||
|  | 			'rdev' => 0, | ||
|  | 			'size' => strlen($string), | ||
|  | 			'atime' => $now, | ||
|  | 			'mtime' => $now, | ||
|  | 			'ctime' => $now, | ||
|  | 			'blksize' => '512', | ||
|  | 			'blocks' => ceil(strlen($string) / 512)); | ||
|  | 
 | ||
|  | 		return $stat; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Method to read a given number of bytes starting at the current position | ||
|  | 	 * and moving to the end of the string defined by the current position plus the | ||
|  | 	 * given number. | ||
|  | 	 * | ||
|  | 	 * @param   integer  $count  Bytes of data from the current position should be returned. | ||
|  | 	 * | ||
|  | 	 * @return  void | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 * | ||
|  | 	 * @see     http://www.php.net/manual/en/streamwrapper.stream-read.php | ||
|  | 	 */ | ||
|  | 	public function stream_read($count) | ||
|  | 	{ | ||
|  | 		$result = substr($this->currentString, $this->pos, $count); | ||
|  | 		$this->pos += $count; | ||
|  | 
 | ||
|  | 		return $result; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Stream write, always returning false. | ||
|  | 	 * | ||
|  | 	 * @param   string  $data  The data to write. | ||
|  | 	 * | ||
|  | 	 * @return  boolean | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 * @note    Updating the string is not supported. | ||
|  | 	 */ | ||
|  | 	public function stream_write($data) | ||
|  | 	{ | ||
|  | 		// We don't support updating the string.
 | ||
|  | 		return false; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Method to get the current position | ||
|  | 	 * | ||
|  | 	 * @return  integer  The position | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function stream_tell() | ||
|  | 	{ | ||
|  | 		return $this->pos; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * End of field check | ||
|  | 	 * | ||
|  | 	 * @return  boolean  True if at end of field. | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function stream_eof() | ||
|  | 	{ | ||
|  | 		if ($this->pos > $this->len) | ||
|  | 		{ | ||
|  | 			return true; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return false; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Stream offset | ||
|  | 	 * | ||
|  | 	 * @param   integer  $offset  The starting offset. | ||
|  | 	 * @param   integer  $whence  SEEK_SET, SEEK_CUR, SEEK_END | ||
|  | 	 * | ||
|  | 	 * @return  boolean  True on success. | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public function stream_seek($offset, $whence) | ||
|  | 	{ | ||
|  | 		// $whence: SEEK_SET, SEEK_CUR, SEEK_END
 | ||
|  | 		if ($offset > $this->len) | ||
|  | 		{ | ||
|  | 			// We can't seek beyond our len.
 | ||
|  | 			return false; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		switch ($whence) | ||
|  | 		{ | ||
|  | 			case SEEK_SET: | ||
|  | 				$this->pos = $offset; | ||
|  | 				break; | ||
|  | 
 | ||
|  | 			case SEEK_CUR: | ||
|  | 				if (($this->pos + $offset) < $this->len) | ||
|  | 				{ | ||
|  | 					$this->pos += $offset; | ||
|  | 				} | ||
|  | 				else | ||
|  | 				{ | ||
|  | 					return false; | ||
|  | 				} | ||
|  | 				break; | ||
|  | 
 | ||
|  | 			case SEEK_END: | ||
|  | 				$this->pos = $this->len - $offset; | ||
|  | 				break; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return true; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Stream flush, always returns true. | ||
|  | 	 * | ||
|  | 	 * @return  boolean | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 * @note    Data storage is not supported | ||
|  | 	 */ | ||
|  | 	public function stream_flush() | ||
|  | 	{ | ||
|  | 		// We don't store data.
 | ||
|  | 		return true; | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | stream_wrapper_register('string', 'JStreamString') or die('JStreamString Wrapper Registration Failed'); |