CURL cache remote file class
<?php /** * 用于获取远程文件并缓存 * CurlCache v1.0 * Created by cr. * Date: 2015/12/03 */ //namespace vendor\core; class CurlCache { /** * 请求地址 * @var string */ protected $url; /** * 缓存生存期 * @var int */ protected $expires; /** * 请求超时 * @var int */ protected $timeOut; /** * 是否开启缓存 * @var int */ protected $cacheEna; /** * 是否显示debug信息 * @var bool */ protected $debug; /** * 其他不用配置的内部属性 */ protected $path; protected $filename; protected $curlData; protected $curlHeader; protected $curlError; protected $cacheData; public $data; /** * CurlCache constructor. * @param int $expires * @param int $timeOut * @param bool|true $cacheEna * @param bool|false $debug */ public function __construct($expires=3600, $timeOut=30, $cacheEna=true, $debug=false) { $this->expires=$expires; $this->timeOut=$timeOut; $this->cacheEna=$cacheEna; $this->debug=$debug; } /** * 检测并创建目录 * @return bool */ public function mkdirs(){ if(is_dir($this->path)){ return true; }else{ return mkdir($this->path, 777, true); } } /** * 设置缓存文件相关信息 * @param $url */ public function setCacheFileInfo($url){ $this->url=$url; $this->path=dirname(__FILE__).'/cache/'; $this->filename=$this->url?md5($this->url):'null'; } /** * 主方法,取得数据 * @param $url * @return bool|string */ public function get($url){ $this->setCacheFileInfo($url); if($this->cacheEna) $this->data=unserialize($this->getCache($url)); if(!$this->data) $this->data=$this->curlGet($url); if($this->data && $this->cacheEna) $this->setCache($url,serialize($this->data)); return $this->data->contents; } /** * curl GET 请求数据 * @param $url * @return string */ public function curlGet($url){ if($this->debug && $url=='') echo('请求URL为空,请检查'); $return=new stdClass(); $ch = curl_init (); curl_setopt($ch, CURLOPT_URL,$url ); curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeOut); curl_setopt($ch, CURLOPT_HEADER, 0 ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); $this->curlData=curl_exec($ch); $this->curlHeader=curl_getinfo($ch); $this->curlError=curl_error($ch); $return->header=$this->curlHeader; $return->contents=$this->curlData; curl_close($ch); if((!$this->curlData || $this->curlHeader['http_code'] != '200') && $this->debug ) echo '请求失败,错误信息:'.$this->curlError; else return $return; } /** * 取得缓存数据 * @param $url * @return bool|string */ public function getCache($url){ $this->setCacheFileInfo($url); if(file_exists($this->path.$this->filename)){ if(time() - filemtime($this->path.$this->filename) < $this->expires) $this->cacheData=file_get_contents($this->path.$this->filename); else if($this->debug) echo '缓存文件已过期'; if($this->cacheData) return $this->cacheData;else if($this->debug) echo '缓存文件内容为空'; }else{ //if($this->debug) echo '缓存文件不存在'; return false; } } /** * 写入缓存数据 * @param $url * @param $data */ public function setCache($url,$data){ $this->setCacheFileInfo($url); if(!$this->mkdirs() && $this->debug) echo('创建缓存目录失败:'.$this->path); if($data){ if(!file_put_contents($this->path.$this->filename,$data) && $this->debug){ echo '写入缓存失败 File:'.$this->path.$this->filename; } }else{ if($this->debug) echo '数据为空,不写入缓存'; } } }
Copy after login
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article
R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks ago
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks ago
By 尊渡假赌尊渡假赌尊渡假赌
Assassin's Creed Shadows: Seashell Riddle Solution
2 weeks ago
By DDD
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks ago
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat Commands and How to Use Them
4 weeks ago
By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics
CakePHP Tutorial
1378
52

