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.1
 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