1<?php 2/** 3 * SimplePie 4 * 5 * A PHP-Based RSS and Atom Feed Framework. 6 * Takes the hard work out of managing a complete RSS/Atom solution. 7 * 8 * Copyright (c) 2004-2016, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without modification, are 12 * permitted provided that the following conditions are met: 13 * 14 * * Redistributions of source code must retain the above copyright notice, this list of 15 * conditions and the following disclaimer. 16 * 17 * * Redistributions in binary form must reproduce the above copyright notice, this list 18 * of conditions and the following disclaimer in the documentation and/or other materials 19 * provided with the distribution. 20 * 21 * * Neither the name of the SimplePie Team nor the names of its contributors may be used 22 * to endorse or promote products derived from this software without specific prior 23 * written permission. 24 * 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS 26 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 27 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS 28 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 32 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33 * POSSIBILITY OF SUCH DAMAGE. 34 * 35 * @package SimplePie 36 * @copyright 2004-2016 Ryan Parman, Geoffrey Sneddon, Ryan McCue 37 * @author Ryan Parman 38 * @author Geoffrey Sneddon 39 * @author Ryan McCue 40 * @link http://simplepie.org/ SimplePie 41 * @license http://www.opensource.org/licenses/bsd-license.php BSD License 42 */ 43 44/** 45 * Caches data to the filesystem 46 * 47 * @package SimplePie 48 * @subpackage Caching 49 */ 50class SimplePie_Cache_File implements SimplePie_Cache_Base 51{ 52 /** 53 * Location string 54 * 55 * @see SimplePie::$cache_location 56 * @var string 57 */ 58 protected $location; 59 60 /** 61 * Filename 62 * 63 * @var string 64 */ 65 protected $filename; 66 67 /** 68 * File extension 69 * 70 * @var string 71 */ 72 protected $extension; 73 74 /** 75 * File path 76 * 77 * @var string 78 */ 79 protected $name; 80 81 /** 82 * Create a new cache object 83 * 84 * @param string $location Location string (from SimplePie::$cache_location) 85 * @param string $name Unique ID for the cache 86 * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data 87 */ 88 public function __construct($location, $name, $type) 89 { 90 $this->location = $location; 91 $this->filename = $name; 92 $this->extension = $type; 93 $this->name = "$this->location/$this->filename.$this->extension"; 94 } 95 96 /** 97 * Save data to the cache 98 * 99 * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property 100 * @return bool Successfulness 101 */ 102 public function save($data) 103 { 104 if (file_exists($this->name) && is_writable($this->name) || file_exists($this->location) && is_writable($this->location)) 105 { 106 if ($data instanceof SimplePie) 107 { 108 $data = $data->data; 109 } 110 111 $data = serialize($data); 112 return (bool) file_put_contents($this->name, $data); 113 } 114 return false; 115 } 116 117 /** 118 * Retrieve the data saved to the cache 119 * 120 * @return array Data for SimplePie::$data 121 */ 122 public function load() 123 { 124 if (file_exists($this->name) && is_readable($this->name)) 125 { 126 return unserialize(file_get_contents($this->name)); 127 } 128 return false; 129 } 130 131 /** 132 * Retrieve the last modified time for the cache 133 * 134 * @return int Timestamp 135 */ 136 public function mtime() 137 { 138 return @filemtime($this->name); 139 } 140 141 /** 142 * Set the last modified time to the current time 143 * 144 * @return bool Success status 145 */ 146 public function touch() 147 { 148 return @touch($this->name); 149 } 150 151 /** 152 * Remove the cache 153 * 154 * @return bool Success status 155 */ 156 public function unlink() 157 { 158 if (file_exists($this->name)) 159 { 160 return unlink($this->name); 161 } 162 return false; 163 } 164} 165