4 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
5 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
6 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
8 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
9 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
10 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
11 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
12 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
13 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
14 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
16 * This software consists of voluntary contributions made by many individuals
17 * and is licensed under the MIT license. For more information, see
18 * <http://www.doctrine-project.org>.
21 namespace Doctrine\Common\Cache;
24 * Filesystem cache driver.
27 * @author Fabio B. Silva <fabio.bat.silva@gmail.com>
29 class FilesystemCache extends FileCache
31 const EXTENSION = '.doctrinecache.data';
36 protected $extension = self::EXTENSION;
41 protected function doFetch($id)
45 $filename = $this->getFilename($id);
47 if ( ! file_exists($filename)) {
51 $resource = fopen($filename, "r");
53 if (false !== ($line = fgets($resource))) {
54 $lifetime = (integer) $line;
57 if ($lifetime !== 0 && $lifetime < time()) {
63 while (false !== ($line = fgets($resource))) {
69 return unserialize($data);
75 protected function doContains($id)
78 $filename = $this->getFilename($id);
80 if ( ! file_exists($filename)) {
84 $resource = fopen($filename, "r");
86 if (false !== ($line = fgets($resource))) {
87 $lifetime = (integer) $line;
92 return $lifetime === 0 || $lifetime > time();
98 protected function doSave($id, $data, $lifeTime = 0)
101 $lifeTime = time() + $lifeTime;
104 $data = serialize($data);
105 $filename = $this->getFilename($id);
106 $filepath = pathinfo($filename, PATHINFO_DIRNAME);
108 if ( ! is_dir($filepath)) {
109 mkdir($filepath, 0777, true);
112 return file_put_contents($filename, $lifeTime . PHP_EOL . $data);