1: <?php
2: /**
3: * Copyright 2007-2012 Horde LLC (http://www.horde.org/)
4: *
5: * @author Chuck Hagenbuch <chuck@horde.org>
6: * @license http://www.horde.org/licenses/bsd BSD
7: * @category Horde
8: * @package Http
9: */
10:
11: /**
12: * @author Chuck Hagenbuch <chuck@horde.org>
13: * @license http://www.horde.org/licenses/bsd BSD
14: * @category Horde
15: * @package Http
16: */
17: class Horde_Http_Response_Fopen extends Horde_Http_Response_Base
18: {
19: /**
20: * Response body.
21: *
22: * @var stream
23: */
24: protected $_stream;
25:
26: /**
27: * Response content
28: */
29: protected $_content;
30:
31: /**
32: * Constructor.
33: */
34: public function __construct($uri, $stream, $headers = array())
35: {
36: $this->uri = $uri;
37: $this->_stream = $stream;
38: $this->_parseHeaders($headers);
39: }
40:
41: /**
42: * Returns the body of the HTTP response.
43: *
44: * @throws Horde_Http_Exception
45: * @return string HTTP response body.
46: */
47: public function getBody()
48: {
49: if (is_null($this->_content)) {
50: $oldTrackErrors = ini_set('track_errors', 1);
51: $content = @stream_get_contents($this->_stream);
52: ini_set('track_errors', $oldTrackErrors);
53: if ($content === false) {
54: $msg = 'Problem reading data from ' . $this->uri;
55: if (isset($php_errormsg)) {
56: $msg .= ': ' . $php_errormsg;
57: }
58: throw new Horde_Http_Exception($msg);
59: }
60: $this->_content = $content;
61: }
62:
63: return $this->_content;
64: }
65:
66: /**
67: * Returns a stream pointing to the response body that can be used with
68: * all standard PHP stream functions.
69: */
70: public function getStream()
71: {
72: return $this->_stream;
73: }
74: }
75: