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-2012, 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: * @version 1.3
37: * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue
38: * @author Ryan Parman
39: * @author Geoffrey Sneddon
40: * @author Ryan McCue
41: * @link http://simplepie.org/ SimplePie
42: * @license http://www.opensource.org/licenses/bsd-license.php BSD License
43: */
44:
45: /**
46: * Caches data to the filesystem
47: *
48: * @package SimplePie
49: * @subpackage Caching
50: */
51: class SimplePie_Cache_File implements SimplePie_Cache_Base
52: {
53: /**
54: * Location string
55: *
56: * @see SimplePie::$cache_location
57: * @var string
58: */
59: protected $location;
60:
61: /**
62: * Filename
63: *
64: * @var string
65: */
66: protected $filename;
67:
68: /**
69: * File extension
70: *
71: * @var string
72: */
73: protected $extension;
74:
75: /**
76: * File path
77: *
78: * @var string
79: */
80: protected $name;
81:
82: /**
83: * Create a new cache object
84: *
85: * @param string $location Location string (from SimplePie::$cache_location)
86: * @param string $name Unique ID for the cache
87: * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
88: */
89: public function __construct($location, $name, $type)
90: {
91: $this->location = $location;
92: $this->filename = $name;
93: $this->extension = $type;
94: $this->name = "$this->location/$this->filename.$this->extension";
95: }
96:
97: /**
98: * Save data to the cache
99: *
100: * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
101: * @return bool Successfulness
102: */
103: public function save($data)
104: {
105: if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location))
106: {
107: if ($data instanceof SimplePie)
108: {
109: $data = $data->data;
110: }
111:
112: $data = serialize($data);
113: return (bool) file_put_contents($this->name, $data);
114: }
115: return false;
116: }
117:
118: /**
119: * Retrieve the data saved to the cache
120: *
121: * @return array Data for SimplePie::$data
122: */
123: public function load()
124: {
125: if (file_exists($this->name) && is_readable($this->name))
126: {
127: return unserialize(file_get_contents($this->name));
128: }
129: return false;
130: }
131:
132: /**
133: * Retrieve the last modified time for the cache
134: *
135: * @return int Timestamp
136: */
137: public function mtime()
138: {
139: if (file_exists($this->name))
140: {
141: return filemtime($this->name);
142: }
143: return false;
144: }
145:
146: /**
147: * Set the last modified time to the current time
148: *
149: * @return bool Success status
150: */
151: public function touch()
152: {
153: if (file_exists($this->name))
154: {
155: return touch($this->name);
156: }
157: return false;
158: }
159:
160: /**
161: * Remove the cache
162: *
163: * @return bool Success status
164: */
165: public function unlink()
166: {
167: if (file_exists($this->name))
168: {
169: return unlink($this->name);
170: }
171: return false;
172: }
173: }
174: