/var/www/hkosl.com/demo_google/application/vendor/guzzlehttp/psr7/src/StreamWrapper.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<?php
namespace GuzzleHttp\Psr7;

use 
Psr\Http\Message\StreamInterface;

/**
 * Converts Guzzle streams into PHP stream resources.
 */
class StreamWrapper
{
    
/** @var resource */
    
public $context;

    
/** @var StreamInterface */
    
private $stream;

    
/** @var string r, r+, or w */
    
private $mode;

    
/**
     * Returns a resource representing the stream.
     *
     * @param StreamInterface $stream The stream to get a resource for
     *
     * @return resource
     * @throws \InvalidArgumentException if stream is not readable or writable
     */
    
public static function getResource(StreamInterface $stream)
    {
        
self::register();

        if (
$stream->isReadable()) {
            
$mode $stream->isWritable() ? 'r+' 'r';
        } elseif (
$stream->isWritable()) {
            
$mode 'w';
        } else {
            throw new \
InvalidArgumentException('The stream must be readable, '
                
'writable, or both.');
        }

        return 
fopen('guzzle://stream'$modenullself::createStreamContext($stream));
    }

    
/**
     * Creates a stream context that can be used to open a stream as a php stream resource.
     *
     * @param StreamInterface $stream
     *
     * @return resource
     */
    
public static function createStreamContext(StreamInterface $stream)
    {
        return 
stream_context_create([
            
'guzzle' => ['stream' => $stream]
        ]);
    }

    
/**
     * Registers the stream wrapper if needed
     */
    
public static function register()
    {
        if (!
in_array('guzzle'stream_get_wrappers())) {
            
stream_wrapper_register('guzzle'__CLASS__);
        }
    }

    public function 
stream_open($path$mode$options, &$opened_path)
    {
        
$options stream_context_get_options($this->context);

        if (!isset(
$options['guzzle']['stream'])) {
            return 
false;
        }

        
$this->mode $mode;
        
$this->stream $options['guzzle']['stream'];

        return 
true;
    }

    public function 
stream_read($count)
    {
        return 
$this->stream->read($count);
    }

    public function 
stream_write($data)
    {
        return (int) 
$this->stream->write($data);
    }

    public function 
stream_tell()
    {
        return 
$this->stream->tell();
    }

    public function 
stream_eof()
    {
        return 
$this->stream->eof();
    }

    public function 
stream_seek($offset$whence)
    {
        
$this->stream->seek($offset$whence);

        return 
true;
    }

    public function 
stream_cast($cast_as)
    {
        
$stream = clone($this->stream);

        return 
$stream->detach();
    }

    public function 
stream_stat()
    {
        static 
$modeMap = [
            
'r'  => 33060,
            
'rb' => 33060,
            
'r+' => 33206,
            
'w'  => 33188,
            
'wb' => 33188
        
];

        return [
            
'dev'     => 0,
            
'ino'     => 0,
            
'mode'    => $modeMap[$this->mode],
            
'nlink'   => 0,
            
'uid'     => 0,
            
'gid'     => 0,
            
'rdev'    => 0,
            
'size'    => $this->stream->getSize() ?: 0,
            
'atime'   => 0,
            
'mtime'   => 0,
            
'ctime'   => 0,
            
'blksize' => 0,
            
'blocks'  => 0
        
];
    }

    public function 
url_stat($path$flags)
    {
        return [
            
'dev'     => 0,
            
'ino'     => 0,
            
'mode'    => 0,
            
'nlink'   => 0,
            
'uid'     => 0,
            
'gid'     => 0,
            
'rdev'    => 0,
            
'size'    => 0,
            
'atime'   => 0,
            
'mtime'   => 0,
            
'ctime'   => 0,
            
'blksize' => 0,
            
'blocks'  => 0
        
];
    }
}