diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2021-03-19 08:03:43 +0100 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2021-03-19 08:03:43 +0100 |
commit | 8c5a65bab34da63270e6a4bc8a97df5cc5df7b3f (patch) | |
tree | 5aeec0e5f6ebe67dd0c07bc8911a4b4bb1daf96d | |
parent | 87bf9ce8cc959104241dbf591a29cb96ced19198 (diff) | |
download | archweb32-8c5a65bab34da63270e6a4bc8a97df5cc5df7b3f.tar.xz |
index.php: add get_news functions to avoid code duplication
-rw-r--r-- | index.php | 65 | ||||
-rw-r--r-- | lib/helper.php | 47 |
2 files changed, 50 insertions, 62 deletions
@@ -73,71 +73,14 @@ print_header("", "home"); <a href="https://bbs.archlinux32.org/extern.php?action=feed&fid=12&type=atom" title="Arch 32 News RSS Feed" class="rss-icon"><img width="16" height="16" src="/static/rss.c5ebdc5318d6.png" alt="RSS Feed" /></a> <?php -//apcu_clear_cache(); -$news32 = apcu_fetch('news32', $apcu_success); -if( $apcu_success == false ) { - $news32_reachable = apcu_fetch('news32_reachable', $apcu_success); - if ($apcu_success == false) { - if (site_is_reachable('https://bbs.archlinux32.org/extern.php?action=feed&fid=12&type=atom')) - $news32_reachable = 'YES'; - else - $news32_reachable = 'NO'; - apcu_store('news32_reachable', $news32_reachable, 300); - } - if ($news32_reachable == 'YES') { - $ch = curl_init('https://bbs.archlinux32.org/extern.php?action=feed&fid=12&type=atom'); - if( $ch != null && $ch != false ) { - curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); - $news32 = curl_exec($ch); - $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); - curl_close($ch); - if( $httpcode >= 200 && $httpcode < 300 ) { - apcu_store('news32', $news32, 300); - } else { - $news32 = false; - } - } else { - $news32 = false; - $news32status = "HTTP return code was $httpcode"; - } - } else { - $news = false; - } -} -if( $news32 != false ) { - $news32 = simplexml_load_string($news32); -} - -$news64 = apcu_fetch('news64', $apcu_success); -if( $apcu_success == false ) { - $ch = curl_init("https://archlinux.org/feeds/news/"); - if( $ch != null && $ch != false ) { - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); - $news64 = curl_exec($ch); - $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); - curl_close($ch); - if( $httpcode >= 200 && $httpcode < 300 ) { - apcu_store('news64', $news64, 300); - } else { - $news64 = false; - } - } else { - $news64 = false; - $news64status = "HTTP return code was $httpcode"; - } -} -if( $news64 != false ) { - $news64 = simplexml_load_string($news64); -} +$news32 = get_news('news32', 'https://bbs.archlinux32.org/extern.php?action=feed&fid=12&type=atom', 300); +$news64 = get_news('news64', 'https://archlinux.org/feeds/news/', 300); $news = array(); if ($news32 === false) { print " <h4>\n"; - print " sorry, arch 32 news are currently unavailable ($news32status)\n"; + print " sorry, arch 32 news are currently unavailable\n"; print " </h4>\n"; } else { foreach($news32 -> {'entry'} as $entry) { @@ -158,7 +101,7 @@ if ($news32 === false) { } if ($news64 === false) { print " <h4>\n"; - print " sorry, upstream arch news are currently unavailable ($news64status)\n"; + print " sorry, upstream arch news are currently unavailable\n"; print " </h4>\n"; } else { foreach($news64 -> {'channel'} -> {'item'} as $entry) { diff --git a/lib/helper.php b/lib/helper.php index a81eedf..ad089bf 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -143,7 +143,7 @@ function if_unset($array, $index, $default) { }; function site_is_reachable($url) { - $stream_context = stream_context_create(array('timeout' => 10)); + $stream_context = stream_context_create(array('http' => array('timeout' => 10))); $headers = get_headers($url, 0, $stream_context); if (is_array($headers)) foreach ($headers as $header) { @@ -156,6 +156,51 @@ function site_is_reachable($url) { return false; } +function get_news($name, $url, $ttl) { + // clear cache if you have to push out new news fast, otherwise wait for $ttl seconds + //apcu_clear_cache(); + + $news = apcu_fetch($name, $apcu_success); + if( $apcu_success == false ) { + $news_reachable = apcu_fetch($name."_reachable", $apcu_success); + if ($apcu_success == false) { + if (site_is_reachable($url)) { + $news_reachable = 'YES'; + } else { + $news_reachable = 'NO'; + } + apcu_store($name."_reachable", $news_reachable, $ttl); + } + if ($news_reachable == 'YES') { + $ch = curl_init($url); + if( $ch != null && $ch != false ) { + curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); + curl_setopt($ch, CURLOPT_VERBOSE,1); + $news = curl_exec($ch); + $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + if( $httpcode >= 200 && $httpcode < 300 ) { + apcu_store($name, $news, $ttl); + } else { + $news = false; + } + } else { + $news = false; + } + } else { + $news = false; + } + } + if ($news != false) { + $news = simplexml_load_string($news); + } + return $news; +} + function add_fancy_unit($value, $unit) { $suffixes = array("z", "y", "a", "f", "p", "n", "ยต", "m", "", "k", "M", "G", "T", "P", "Y", "Z"); if ($value==0) |