Вход Регистрация
Файл: library/Zend/Http/Response/Stream.php
Строк: 265
<?php

/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category   Zend
 * @package    Zend_Http
 * @subpackage Response
 * @version    $Id: Stream.php 20785 2010-01-31 09:43:03Z mikaelkael $
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */

/**
 * Zend_Http_Response represents an HTTP 1.0 / 1.1 response message. It
 * includes easy access to all the response's different elemts, as well as some
 * convenience methods for parsing and validating HTTP responses.
 *
 * @package    Zend_Http
 * @subpackage Response
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
class Zend_Http_Response_Stream extends Zend_Http_Response
{
    
/**
     * Response as stream
     *
     * @var resource
     */
    
protected $stream;

    
/**
     * The name of the file containing the stream
     *
     * Will be empty if stream is not file-based.
     *
     * @var string
     */
    
protected $stream_name;

    
/**
     * Should we clean up the stream file when this response is closed?
     *
     * @var boolean
     */
    
protected $_cleanup;

    
/**
     * Get the response as stream
     *
     * @return resourse
     */
    
public function getStream()
    {
        return 
$this->stream;
    }

    
/**
     * Set the response stream
     *
     * @param resourse $stream
     * @return Zend_Http_Response_Stream
     */
    
public function setStream($stream)
    {
        
$this->stream $stream;
        return 
$this;
    }

    
/**
     * Get the cleanup trigger
     *
     * @return boolean
     */
    
public function getCleanup() {
        return 
$this->_cleanup;
    }

    
/**
     * Set the cleanup trigger
     *
     * @param $cleanup Set cleanup trigger
     */
    
public function setCleanup($cleanup true) {
        
$this->_cleanup $cleanup;
    }

    
/**
     * Get file name associated with the stream
     *
     * @return string
     */
    
public function getStreamName() {
        return 
$this->stream_name;
    }

    
/**
     * Set file name associated with the stream
     *
     * @param string $stream_name Name to set
     * @return Zend_Http_Response_Stream
     */
    
public function setStreamName($stream_name) {
        
$this->stream_name $stream_name;
        return 
$this;
    }


    
/**
     * HTTP response constructor
     *
     * In most cases, you would use Zend_Http_Response::fromString to parse an HTTP
     * response string and create a new Zend_Http_Response object.
     *
     * NOTE: The constructor no longer accepts nulls or empty values for the code and
     * headers and will throw an exception if the passed values do not form a valid HTTP
     * responses.
     *
     * If no message is passed, the message will be guessed according to the response code.
     *
     * @param int $code Response code (200, 404, ...)
     * @param array $headers Headers array
     * @param string $body Response body
     * @param string $version HTTP version
     * @param string $message Response code as text
     * @throws Zend_Http_Exception
     */
    
public function __construct($code$headers$body null$version '1.1'$message null)
    {

        if(
is_resource($body)) {
            
$this->setStream($body);
            
$body '';
        }
        
parent::__construct($code$headers$body$version$message);
    }

    
/**
     * Create a new Zend_Http_Response_Stream object from a string
     *
     * @param string $response_str
     * @param resource $stream
     * @return Zend_Http_Response_Stream
     */
    
public static function fromStream($response_str$stream)
    {
        
$code    self::extractCode($response_str);
        
$headers self::extractHeaders($response_str);
        
$version self::extractVersion($response_str);
        
$message self::extractMessage($response_str);

        return new 
self($code$headers$stream$version$message);
    }

    
/**
     * Get the response body as string
     *
     * This method returns the body of the HTTP response (the content), as it
     * should be in it's readable version - that is, after decoding it (if it
     * was decoded), deflating it (if it was gzip compressed), etc.
     *
     * If you want to get the raw body (as transfered on wire) use
     * $this->getRawBody() instead.
     *
     * @return string
     */
    
public function getBody()
    {
        if(
$this->stream != null) {
            
$this->readStream();
        }
        return 
parent::getBody();
    }

    
/**
     * Get the raw response body (as transfered "on wire") as string
     *
     * If the body is encoded (with Transfer-Encoding, not content-encoding -
     * IE "chunked" body), gzip compressed, etc. it will not be decoded.
     *
     * @return string
     */
    
public function getRawBody()
    {
        if(
$this->stream) {
            
$this->readStream();
        }
        return 
$this->body;
    }

    
/**
     * Read stream content and return it as string
     *
     * Function reads the remainder of the body from the stream and closes the stream.
     *
     * @return string
     */
    
protected function readStream()
    {
        if(!
is_resource($this->stream)) {
            return 
'';
        }

        if(isset(
$headers['content-length'])) {
            
$this->body stream_get_contents($this->stream$headers['content-length']);
        } else {
            
$this->body stream_get_contents($this->stream);
        }
        
fclose($this->stream);
        
$this->stream null;
    }

    public function 
__destruct()
    {
        if(
is_resource($this->stream)) {
            
fclose($this->stream);
            
$this->stream null;
        }
        if(
$this->_cleanup) {
            @
unlink($this->stream_name);
        }
    }

}
Онлайн: 4
Реклама