curl缓存PHP,CURL缓存远程文件类

/**

* 用于获取远程文件并缓存

* 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 '数据为空,不写入缓存';

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值