用fopen重写类并在Laravel中使用curl

时间:2016-05-28 12:10:07

标签: php curl

Laravel真的很新,我还在努力学习它,所以请在这里帮助我一点。有一个类从另一个站点提取数据。问题是它正在使用fopen但是在服务器安全性问题上这个功能是关闭的所以它必须使用curl。

const CACHE_KEY = 'rate';
public static function getRate() {
    if (Cache::has(self::CACHE_KEY)) {
        return Cache::get(self::CACHE_KEY);
    }

    $oneHourTimestamp = \Carbon\Carbon::now()->addHours(1);
    $tenMinutesTimestamp = \Carbon\Carbon::now()->addMinutes(10);

    $page = trim(file_get_contents('https://example.com/'));
    $rates = json_decode($page, TRUE);
    if (!$rates) {
        Cache::put(self::CACHE_KEY, '-', $tenMinutesTimestamp);
        return '-';
    }

    $Rate = @$rates['1']['2'];
    if (!$Rate) {
        Cache::put(self::CACHE_KEY, '-', $tenMinutesTimestamp);
        return '-';
    }

    Cache::put(self::CACHE_KEY, $Rate, $oneHourTimestamp);
    return $usdRate;
}

更新:

喜欢这个吗?

function get_curl_content($url) {
   $curl = curl_init();
   curl_setopt($curl, CURLOPT_URL, $url);
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($curl, CURLOPT_HEADER, false);
   $result = curl_exec($curl);
   curl_close($curl);
  return $result;
}

const CACHE_KEY = 'rate';
public static function getRate() {
if (Cache::has(self::CACHE_KEY)) {
    return Cache::get(self::CACHE_KEY);
}

$oneHourTimestamp = \Carbon\Carbon::now()->addHours(1);
$tenMinutesTimestamp = \Carbon\Carbon::now()->addMinutes(10);   

$result = $this->get_curl_content('https://example.com/');
$rates = json_decode($result, TRUE);
if (!$rates) {
    Cache::put(self::CACHE_KEY, '-', $tenMinutesTimestamp);
    return '-';
}

$Rate = @$rates['1']['2'];
if (!$Rate) {
    Cache::put(self::CACHE_KEY, '-', $tenMinutesTimestamp);
    return '-';
}

Cache::put(self::CACHE_KEY, $Rate, $oneHourTimestamp);
return $usdRate;
}

1 个答案:

答案 0 :(得分:1)

要使用curl获取网页的contentos,您可以创建此功能并将其添加到您的班级:

function get_curl_content($url) {
   $curl = curl_init();
   curl_setopt($curl, CURLOPT_URL, $url);
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($curl, CURLOPT_HEADER, false);
   $result = curl_exec($curl);
   curl_close($curl);
   return $result;
}

你可以改变

$page = trim(file_get_contents('https://example.com/'));

有:

$page = $this->get_curl_content('https://example.com/');