fetch_file_contents: improve error handling
1. if request fails get error string from http response status line 2. do not override http error with possible CURL/php specific last error 3. fix silent php error generated while processing response headers to get last modified value
This commit is contained in:
parent
8716ec20d6
commit
9d930af9e1
2 changed files with 31 additions and 29 deletions
|
@ -419,7 +419,7 @@ class RSSUtils {
|
|||
$feed_data = trim($feed_data);
|
||||
|
||||
_debug("fetch done.", $debug_enabled);
|
||||
_debug("source last modified: " . $fetch_last_modified);
|
||||
_debug("source last modified: " . $fetch_last_modified, $debug_enabled);
|
||||
|
||||
if ($feed_data && $fetch_last_modified != $stored_last_modified) {
|
||||
$last_modified_escaped = db_escape_string(substr($fetch_last_modified, 0, 245));
|
||||
|
|
|
@ -432,11 +432,18 @@
|
|||
$contents = substr($ret, $headers_length);
|
||||
|
||||
foreach ($headers as $header) {
|
||||
list ($key, $value) = explode(": ", $header);
|
||||
if (strstr($header, ": ") !== FALSE) {
|
||||
list ($key, $value) = explode(": ", $header);
|
||||
|
||||
if (strtolower($key) == "last-modified") {
|
||||
$fetch_last_modified = $value;
|
||||
}
|
||||
if (strtolower($key) == "last-modified") {
|
||||
$fetch_last_modified = $value;
|
||||
}
|
||||
}
|
||||
|
||||
if (substr(strtolower($header), 0, 7) == 'http/1.') {
|
||||
$fetch_last_error_code = (int) substr($header, 9, 3);
|
||||
$fetch_last_error = $header;
|
||||
}
|
||||
}
|
||||
|
||||
if (curl_errno($ch) === 23 || curl_errno($ch) === 61) {
|
||||
|
@ -450,11 +457,11 @@
|
|||
$fetch_last_error_code = $http_code;
|
||||
|
||||
if ($http_code != 200 || $type && strpos($fetch_last_content_type, "$type") === false) {
|
||||
|
||||
if (curl_errno($ch) != 0) {
|
||||
$fetch_last_error = curl_errno($ch) . " " . curl_error($ch);
|
||||
} else {
|
||||
$fetch_last_error = "HTTP Code: $http_code";
|
||||
$fetch_last_error .= "; " . curl_errno($ch) . " " . curl_error($ch);
|
||||
}
|
||||
|
||||
$fetch_last_error_content = $contents;
|
||||
curl_close($ch);
|
||||
return false;
|
||||
|
@ -466,12 +473,6 @@
|
|||
return false;
|
||||
}
|
||||
|
||||
/*$fetch_last_modified = curl_getinfo($ch, CURLINFO_FILETIME);
|
||||
|
||||
if ($fetch_last_modified != -1) {
|
||||
echo date("Y-m-d H:i:s", $fetch_last_modified); die;
|
||||
}*/
|
||||
|
||||
curl_close($ch);
|
||||
|
||||
return $contents;
|
||||
|
@ -517,21 +518,24 @@
|
|||
$data = @file_get_contents($url, false, $context);
|
||||
|
||||
if (isset($http_response_header) && is_array($http_response_header)) {
|
||||
foreach ($http_response_header as $h) {
|
||||
list ($key, $value) = explode(": ", $h);
|
||||
foreach ($http_response_header as $header) {
|
||||
if (strstr($header, ": ") !== FALSE) {
|
||||
list ($key, $value) = explode(": ", $header);
|
||||
|
||||
$key = strtolower($key);
|
||||
$key = strtolower($key);
|
||||
|
||||
if ($key == 'content-type') {
|
||||
$fetch_last_content_type = $value;
|
||||
// don't abort here b/c there might be more than one
|
||||
// e.g. if we were being redirected -- last one is the right one
|
||||
} else if ($key == 'last-modified') {
|
||||
$fetch_last_modified = $value;
|
||||
}
|
||||
if ($key == 'content-type') {
|
||||
$fetch_last_content_type = $value;
|
||||
// don't abort here b/c there might be more than one
|
||||
// e.g. if we were being redirected -- last one is the right one
|
||||
} else if ($key == 'last-modified') {
|
||||
$fetch_last_modified = $value;
|
||||
}
|
||||
}
|
||||
|
||||
if (substr(strtolower($h), 0, 7) == 'http/1.') {
|
||||
$fetch_last_error_code = (int) substr($h, 9, 3);
|
||||
if (substr(strtolower($header), 0, 7) == 'http/1.') {
|
||||
$fetch_last_error_code = (int) substr($header, 9, 3);
|
||||
$fetch_last_error = $header;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -540,9 +544,7 @@
|
|||
$error = error_get_last();
|
||||
|
||||
if ($error['message'] != $old_error['message']) {
|
||||
$fetch_last_error = $error["message"];
|
||||
} else {
|
||||
$fetch_last_error = "HTTP Code: $fetch_last_error_code";
|
||||
$fetch_last_error .= "; " . $error["message"];
|
||||
}
|
||||
|
||||
$fetch_last_error_content = $data;
|
||||
|
|
Loading…
Reference in a new issue