Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / common / lib / Doctrine / Common / Cache / PhpFileCache.php
1 <?php
2
3 /*
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.
15  *
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>.
19  */
20
21 namespace Doctrine\Common\Cache;
22
23 /**
24  * Php file cache driver.
25  *
26  * @since   2.3
27  * @author  Fabio B. Silva <fabio.bat.silva@gmail.com>
28  */
29 class PhpFileCache extends FileCache
30 {
31     const EXTENSION = '.doctrinecache.php';
32
33      /**
34      * {@inheritdoc}
35      */
36     protected $extension = self::EXTENSION;
37
38     /**
39      * {@inheritdoc}
40      */
41     protected function doFetch($id)
42     {
43         $filename = $this->getFilename($id);
44
45         if ( ! file_exists($filename)) {
46             return false;
47         }
48
49         $value = include $filename;
50
51         if ($value['lifetime'] !== 0 && $value['lifetime'] < time()) {
52             return false;
53         }
54
55         return $value['data'];
56     }
57
58     /**
59      * {@inheritdoc}
60      */
61     protected function doContains($id)
62     {
63         $filename = $this->getFilename($id);
64
65         if ( ! file_exists($filename)) {
66             return false;
67         }
68
69         $value = include $filename;
70
71         return $value['lifetime'] === 0 || $value['lifetime'] > time();
72     }
73
74     /**
75      * {@inheritdoc}
76      */
77     protected function doSave($id, $data, $lifeTime = 0)
78     {
79         if ($lifeTime > 0) {
80             $lifeTime = time() + $lifeTime;
81         }
82
83         if (is_object($data) && ! method_exists($data, '__set_state')) {
84             throw new \InvalidArgumentException(
85                 "Invalid argument given, PhpFileCache only allows objects that implement __set_state() " .
86                 "and fully support var_export(). You can use the FilesystemCache to save arbitrary object " .
87                 "graphs using serialize()/deserialize()."
88             );
89         }
90
91         $filename   = $this->getFilename($id);
92         $filepath   = pathinfo($filename, PATHINFO_DIRNAME);
93
94         if ( ! is_dir($filepath)) {
95             mkdir($filepath, 0777, true);
96         }
97
98         $value = array(
99             'lifetime'  => $lifeTime,
100             'data'      => $data
101         );
102
103         $value  = var_export($value, true);
104         $code   = sprintf('<?php return %s;', $value);
105
106         return file_put_contents($filename, $code);
107     }
108 }