/** * Rad\Network\Http\Message\Stream constructor * * @param string|resource $stream * @param string $mode * @param bool $useIncludePath * @param null|resource $context * * @throws BaseException */ public function __construct($stream, $mode = 'r+', $useIncludePath = false, $context = null) { if (is_string($stream)) { set_error_handler([$this, 'connectionErrorHandler']); if ($context === null) { $this->handle = fopen($stream, $mode, $useIncludePath); } else { $this->handle = fopen($stream, $mode, $useIncludePath, $context); } restore_error_handler(); if (!empty($this->connectionErrors)) { $lastError = end($this->connectionErrors); $exc = new BaseException($lastError['message']); $exc->setFile($lastError['file'])->setLine($lastError['line']); throw $exc; } } elseif (is_resource($stream)) { $this->handle = $stream; } else { throw new InvalidArgumentException('Stream argument type must be resource or string.'); } }