| <?php |
| /** |
| * File containing the ezcCacheStorageEvalarray class. |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| * @package Cache |
| * @version //autogentag// |
| * @copyright Copyright (C) 2005-2010 eZ Systems AS. All rights reserved. |
| * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 |
| * @filesource |
| */ |
| |
| /** |
| * This cache storage implementation stores arrays and scalar values (int, |
| * float, string, bool) in files on your hard disk as PHP code. In contrast to |
| * its sibling class {@link ezcCacheStorageFileArray}, the stored PHP code is |
| * not simply required to restore the cache data, but is evaluated using PHP's |
| * eval() function. It takes its base methods from the extended storage base |
| * class {@link ezcCacheStorageFile}. |
| * |
| * Main purpose behind these 2 similar implementations is the following: |
| * Most byte code caches are capable of caching code for included files, |
| * but not for eval()'ed strings. Therefore the |
| * {@link ezcCacheStorageFileEvalarray} class will permit you to get your cached |
| * data not cached a second time by an accellerator like APC, whereas the |
| * {@link ezcCacheStorageFileArray} class will permit you to explicitly allow |
| * this. ATTENTION: If you do not use a byte code cache with your PHP |
| * installation, the use of {@link ezcCacheStorageFileArray} is recommended over |
| * the usage of {@link ezcCacheStorageEvalarray}, since eval() is much slower |
| * than directly requiring the stored PHP code. |
| * |
| * For example code of using a cache storage, see {@link ezcCacheManager}. |
| * |
| * The Cache package contains several other implementations of |
| * {@link ezcCacheStorageFile}. As there are: |
| * |
| * - ezcCacheStorageFileArray |
| * - ezcCacheStorageFilePlain |
| * |
| * @package Cache |
| * @version //autogentag// |
| */ |
| class ezcCacheStorageFileEvalArray extends ezcCacheStorageFile |
| { |
| /** |
| * Fetch data from a given file name. |
| * |
| * @see ezcCacheStorageFile::restore() |
| * |
| * @param string $filename The file to fetch data from. |
| * @return mixed The data read from the file. |
| */ |
| protected function fetchData( $filename ) |
| { |
| return eval( file_get_contents( $filename ) ); |
| } |
| |
| /** |
| * Serialize the data for storing. |
| * Serializes a PHP variable (except type resource and object) to a |
| * executable PHP code representation string. |
| * |
| * @param mixed $data Simple type or array to serialize. |
| * @return string The serialized data |
| * |
| * @throws ezcCacheInvalidDataException |
| * If the data submitted is an object or a resource, since this |
| * implementation of {@link ezcCacheStorageFile} can only deal with |
| * scalar and array values. |
| */ |
| protected function prepareData( $data ) |
| { |
| if ( is_object( $data ) || is_resource( $data ) ) |
| { |
| throw new ezcCacheInvalidDataException( gettype( $data ), array( 'simple', 'array' ) ); |
| } |
| return "return " . var_export( $data, true ) . ";\n?>\n"; |
| } |
| } |
| ?> |