FileGetContents.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace Buzz\Client;
  3. use Buzz\Converter\RequestConverter;
  4. use Buzz\Converter\ResponseConverter;
  5. use Buzz\Exception\RequestException;
  6. use Buzz\Message\MessageInterface;
  7. use Buzz\Message\RequestInterface;
  8. use Psr\Http\Message\RequestInterface as PSR7RequestInterface;
  9. use Buzz\Exception\ClientException;
  10. class FileGetContents extends AbstractStream
  11. {
  12. /**
  13. * @see ClientInterface
  14. *
  15. * @throws ClientException If file_get_contents() fires an error
  16. *
  17. * @deprecated Will be removed in 1.0. Use sendRequest instead.
  18. */
  19. public function send(RequestInterface $request, MessageInterface $response)
  20. {
  21. @trigger_error('FileGetContents::send() is deprecated. FileGetContents Curl::sendRequest instead.', E_USER_DEPRECATED);
  22. $request = RequestConverter::psr7($request);
  23. ResponseConverter::copy(ResponseConverter::buzz($this->sendRequest($request)), $response);
  24. }
  25. /**
  26. * @param PSR7RequestInterface $request
  27. * @return \Psr\Http\Message\ResponseInterface
  28. */
  29. public function sendRequest(PSR7RequestInterface $request)
  30. {
  31. $context = stream_context_create($this->getStreamContextArray($request));
  32. $level = error_reporting(0);
  33. $content = file_get_contents($request->getUri()->__toString(), 0, $context);
  34. error_reporting($level);
  35. if (false === $content) {
  36. $error = error_get_last();
  37. $e = new RequestException($error['message']);
  38. $e->setRequest($request);
  39. throw $e;
  40. }
  41. // TODO rewrite to not use Buzz reponse
  42. $response = new \Buzz\Message\Response();
  43. $response->setHeaders($this->filterHeaders((array) $http_response_header));
  44. $response->setContent($content);
  45. return ResponseConverter::psr7($response);
  46. }
  47. private function filterHeaders(array $headers)
  48. {
  49. $filtered = array();
  50. foreach ($headers as $header) {
  51. if (0 === stripos($header, 'http/')) {
  52. $filtered = array();
  53. }
  54. $filtered[] = $header;
  55. }
  56. return $filtered;
  57. }
  58. }