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-dev
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: */
50: class 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_writeable($this->name) || file_exists($this->location) && is_writeable($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: if (file_exists($this->name))
139: {
140: return filemtime($this->name);
141: }
142: return false;
143: }
144:
145: /**
146: * Set the last modified time to the current time
147: *
148: * @return bool Success status
149: */
150: public function touch()
151: {
152: if (file_exists($this->name))
153: {
154: return touch($this->name);
155: }
156: return false;
157: }
158:
159: /**
160: * Remove the cache
161: *
162: * @return bool Success status
163: */
164: public function unlink()
165: {
166: if (file_exists($this->name))
167: {
168: return unlink($this->name);
169: }
170: return false;
171: }
172: }
173: