From 03b72c9198e2c4f124d9c82d807615060d986702 Mon Sep 17 00:00:00 2001 From: Chip Wasson Date: Mon, 29 Aug 2016 21:52:28 -0600 Subject: [PATCH] Catch When cURL can't connect to webserver If a domain is invalid or a web server is down, cURL will return false and not have a status code. We need to catch it and distinguish the difference between page not found and cannot connect for the user. --- http2pic.class.php | 48 +++++++++++++++++++++++++++++++------------ img/domainfailed.jpg | Bin 0 -> 26938 bytes img/pagefailed.jpg | Bin 0 -> 27843 bytes index.php | 9 ++++++-- 4 files changed, 42 insertions(+), 15 deletions(-) create mode 100644 img/domainfailed.jpg create mode 100644 img/pagefailed.jpg diff --git a/http2pic.class.php b/http2pic.class.php index 1c51a51..d3cc3ef 100644 --- a/http2pic.class.php +++ b/http2pic.class.php @@ -20,7 +20,8 @@ define(DEBUG,false); define(MAXTIMEOUT,30); -define(ONFAILIMAGE,'https://http2pic.haschek.at/img/failed.jpg'); +define(ONFAILIMAGE, __DIR__.'/img/pagefailed.jpg'); +define(ONDOMAINFAILIMAGE, __DIR__.'/img/domainfailed.jpg'); //rendering engine: wkhtmltoimage or phantomjs define(RENDERINGENGINE,'wkhtmltoimage'); @@ -94,6 +95,11 @@ class http2pic $this->params['onfail'] = ONFAILIMAGE; else $this->params['onfail'] = rawurldecode($this->params['onfail']); + + if(!$this->params['ondomainfail']) + $this->params['ondomainfail'] = ONDOMAINFAILIMAGE; + else + $this->params['ondomainfail'] = rawurldecode($this->params['ondomainfail']); //validate URL and check if exists @@ -103,10 +109,20 @@ class http2pic $this->params['url'] = rawurldecode($_GET['url']); //if the url is not valid or not responding, show onfail image and leave - if(!$this->isURLValid($this->params['url']) || !$this->isURLReachable($this->params['url'])) + if(!$this->isURLValid($this->params['url']) || !(($reachableResult = $this->isURLReachable($this->params['url'])) == 0)) { header('Content-Type: image/jpeg'); - $result = imagecreatefromjpeg($this->params['onfail']); + header('Content-Disposition: inline; filename="http2png.jpg"'); + switch ($reachableResult) { + case 1: + header('HTTP/1.0 404 File Not Found'); + $result = imagecreatefromjpeg($this->params['onfail']); + break; + case 2: + header('HTTP/1.0 404 Server Not Found'); + $result = imagecreatefromjpeg($this->params['ondomainfail']); + break; + } imagejpeg($result, NULL, 100); return false; } @@ -283,16 +299,22 @@ class http2pic { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_exec($ch); - $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); - - if($code < 400) //status code updated so redirects will also work - $status = true; - else - $status = false; - - curl_close($ch); - return $status; + if(curl_exec($ch) != false){ + //We were able to connect to a webserver, what did it return? + $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + + if($code < 400) //status code updated so redirects will also work + $status = 0; + else + $status = 1; + curl_close($ch); + return $status; + } else { + //We were not able to connect to any webserver so we didn't get a status code + //to compare against. There must be a problem with the domain that was supplied. + curl_close($ch); + return 2; + } } function trimToAlphaNumeric($string) diff --git a/img/domainfailed.jpg b/img/domainfailed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f276046e9837278dfe63178363d5411420e16c96 GIT binary patch literal 26938 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%0A8rns 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 literal 0 HcmV?d00001 diff --git a/img/pagefailed.jpg b/img/pagefailed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a9f160da5057653efb353f0f4570128afb2f5fe3 GIT binary patch literal 27843 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 [url of .jpg] If the page can't be reached, this image will be displayed instead - :///img/failed.jpg + :///img/pagefailed.jpg + + + ondomainfail + [url of .jpg] + If the web server can't be reached, this image will be displayed instead + :///img/domainfailed.jpg - cache [any alphanumeric string]