From 534f66da1998229cdd7631663e76f5f623298ddd Mon Sep 17 00:00:00 2001 From: Dmitry Varennikov Date: Wed, 25 May 2016 10:53:12 -0700 Subject: [PATCH] Throw `ResourceNotFoundException` outside of re-defined error-handler --- .../Uri/Retrievers/FileGetContents.php | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/JsonSchema/Uri/Retrievers/FileGetContents.php b/src/JsonSchema/Uri/Retrievers/FileGetContents.php index bc43de6d..0c4d54ae 100644 --- a/src/JsonSchema/Uri/Retrievers/FileGetContents.php +++ b/src/JsonSchema/Uri/Retrievers/FileGetContents.php @@ -14,51 +14,51 @@ /** * Tries to retrieve JSON schemas from a URI using file_get_contents() - * - * @author Sander Coolen + * + * @author Sander Coolen */ class FileGetContents extends AbstractRetriever { protected $messageBody; - + /** * {@inheritDoc} * @see \JsonSchema\Uri\Retrievers\UriRetrieverInterface::retrieve() */ public function retrieve($uri) { - $context = stream_context_create(array( - 'http' => array( - 'method' => 'GET', - 'header' => "Accept: " . Validator::SCHEMA_MEDIA_TYPE - ))); - - set_error_handler(function() use ($uri) { - throw new ResourceNotFoundException('JSON schema not found at ' . $uri); + $errorMessage = null; + set_error_handler(function ($errno, $errstr) use (&$errorMessage) { + $errorMessage = $errstr; }); $response = file_get_contents($uri); restore_error_handler(); + if ($errorMessage) { + throw new ResourceNotFoundException($errorMessage); + } + if (false === $response) { - throw new ResourceNotFoundException('JSON schema not found at ' . $uri); + throw new ResourceNotFoundException('JSON schema not found at '.$uri); } + if ($response == '' && substr($uri, 0, 7) == 'file://' && substr($uri, -1) == '/' ) { - throw new ResourceNotFoundException('JSON schema not found at ' . $uri); + throw new ResourceNotFoundException('JSON schema not found at '.$uri); } $this->messageBody = $response; - if (! empty($http_response_header)) { + if (!empty($http_response_header)) { $this->fetchContentType($http_response_header); } else { // Could be a "file://" url or something else - fake up the response $this->contentType = null; } - + return $this->messageBody; } - + /** * @param array $headers HTTP Response Headers * @return boolean Whether the Content-Type header was found or not @@ -70,10 +70,10 @@ private function fetchContentType(array $headers) return true; } } - + return false; } - + /** * @param string $header * @return string|null