This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
lnkohana/modules/khemail/vendor/swift/classes/Swift/ByteStream/FileByteStream.php
2014-09-06 23:44:01 +10:00

178 lines
3.9 KiB
PHP

<?php
/*
* This file is part of SwiftMailer.
* (c) 2004-2009 Chris Corbyn
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
//@require 'Swift/ByteStream/AbstractFilterableInputStream.php';
//@require 'Swift/InputByteStream.php';
//@require 'Swift/FileStream.php';
//@require 'Swift/IoException.php';
/**
* Allows reading and writing of bytes to and from a file.
* @package Swift
* @subpackage ByteStream
* @author Chris Corbyn
*/
class Swift_ByteStream_FileByteStream
extends Swift_ByteStream_AbstractFilterableInputStream
implements Swift_FileStream
{
/** The internal pointer offset */
private $_offset = 0;
/** The path to the file */
private $_path;
/** The mode this file is opened in for writing */
private $_mode;
/** A lazy-loaded resource handle for reading the file */
private $_reader;
/** A lazy-loaded resource handle for writing the file */
private $_writer;
/** If magic_quotes_runtime is on, this will be true */
private $_quotes = false;
/**
* Create a new FileByteStream for $path.
* @param string $path
* @param string $writable if true
*/
public function __construct($path, $writable = false)
{
$this->_path = $path;
$this->_mode = $writable ? 'w+b' : 'rb';
$this->_quotes = get_magic_quotes_runtime();
}
/**
* Get the complete path to the file.
* @return string
*/
public function getPath()
{
return $this->_path;
}
/**
* Reads $length bytes from the stream into a string and moves the pointer
* through the stream by $length. If less bytes exist than are requested the
* remaining bytes are given instead. If no bytes are remaining at all, boolean
* false is returned.
* @param int $length
* @return string
* @throws Swift_IoException
*/
public function read($length)
{
$fp = $this->_getReadHandle();
if (!feof($fp))
{
if ($this->_quotes)
{
set_magic_quotes_runtime(0);
}
$bytes = fread($fp, $length);
if ($this->_quotes)
{
set_magic_quotes_runtime(1);
}
$this->_offset = ftell($fp);
return $bytes;
}
else
{
return false;
}
}
/**
* Move the internal read pointer to $byteOffset in the stream.
* @param int $byteOffset
* @return boolean
*/
public function setReadPointer($byteOffset)
{
if (isset($this->_reader))
{
fseek($this->_reader, $byteOffset, SEEK_SET);
}
$this->_offset = $byteOffset;
}
// -- Private methods
/** Just write the bytes to the file */
protected function _commit($bytes)
{
fwrite($this->_getWriteHandle(), $bytes);
$this->_resetReadHandle();
}
/** Not used */
protected function _flush()
{
}
/** Get the resource for reading */
private function _getReadHandle()
{
if (!isset($this->_reader))
{
if (!$this->_reader = fopen($this->_path, 'rb'))
{
throw new Swift_IoException(
'Unable to open file for reading [' . $this->_path . ']'
);
}
fseek($this->_reader, $this->_offset, SEEK_SET);
}
return $this->_reader;
}
/** Get the resource for writing */
private function _getWriteHandle()
{
if (!isset($this->_writer))
{
if (!$this->_writer = fopen($this->_path, $this->_mode))
{
throw new Swift_IoException(
'Unable to open file for writing [' . $this->_path . ']'
);
}
}
return $this->_writer;
}
/** Force a reload of the resource for writing */
private function _resetWriteHandle()
{
if (isset($this->_writer))
{
fclose($this->_writer);
$this->_writer = null;
}
}
/** Force a reload of the resource for reading */
private function _resetReadHandle()
{
if (isset($this->_reader))
{
fclose($this->_reader);
$this->_reader = null;
}
}
}