Итак, я настроил функцию, которая вызывает API-интерфейс cloudflare и получает просмотры страниц с каждого из моих веб-сайтов на cloudflare.У меня возникла проблема, когда половину времени загрузки API он загружает правильные числа, а другая половина просто возвращает Null или пустую строку.Я не могу понять, если это проблема API или имеет какое-то отношение к моему коду.Мне также интересно, есть ли способ, которым я могу просто проверить, является ли значение пустым, и повторить вызов API, пока он не вернет значение, но это последний сценарий, и я не уверен, как это сделать.Я использую платформу codeigniter.
Моя функция библиотеки API:
public function get_page_views($zoneID)
{
$header = array(
'X-Auth-Email: my@email.com',
'X-Auth-Key: myAuthKey',
'Content-Type: application/json'
);
// Gathering all data within past year because thats what cloudflare limits me too.
$subtract = strtotime('-1 year');
$since = date('Y-m-d', $subtract);
$until = date('Y-m-d');
$data = json_decode($this->get_url_contents("https://api.cloudflare.com/client/v4/zones/". $zoneID ."/analytics/dashboard?since=". $since ."T00:00:00Z&until=". $until ."T00:00:00Z&continuous=true", $header), true);
return $data['result']['totals']['requests']['all'];
}
private function get_url_contents($url, $header)
{
ini_set('max_execution_time', 300);
$crl = curl_init();
$timeout = 5;
curl_setopt ($crl, CURLOPT_URL,$url);
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt ($crl, CURLOPT_HTTPHEADER, $header);
curl_setopt($crl, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($crl, CURLOPT_TIMEOUT, 50000);
$ret = curl_exec($crl);
curl_close($crl);
return $ret;
}
А вот функция, которая вызывает каждый API, а затем кеширует их:
public function fetch_pageViews()
{
$cache = array(
'site1' => $this->api->get_page_views('myZoneID'),
'site2' => $this->api->get_page_views('myZoneID'),
);
$this->cache->file->save('pageViews', $cache, 0);
var_dump($this->cache->file->get('pageViews'));
}
Он либо возвращает это:
array(2) {
["site1"]=>
int(2088)
["site2"]=>
int(4117)
}
, либо значения будут нулевыми.