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 21namespace 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 */ 29class 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} 109