File.php 4.2 KB

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