* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Cache\Traits; use Symfony\Component\Cache\CacheItem; use Symfony\Component\Cache\Exception\InvalidArgumentException; /** * @author Titouan Galopin * @author Nicolas Grekas * * @internal */ trait PhpArrayTrait { use ProxyTrait; private $file; private $values; private $zendDetectUnicode; /** * Store an array of cached values. * * @param array $values The cached values */ public function warmUp(array $values) { if (file_exists($this->file)) { if (!is_file($this->file)) { throw new InvalidArgumentException(sprintf('Cache path exists and is not a file: %s.', $this->file)); } if (!is_writable($this->file)) { throw new InvalidArgumentException(sprintf('Cache file is not writable: %s.', $this->file)); } } else { $directory = dirname($this->file); if (!is_dir($directory) && !@mkdir($directory, 0777, true)) { throw new InvalidArgumentException(sprintf('Cache directory does not exist and cannot be created: %s.', $directory)); } if (!is_writable($directory)) { throw new InvalidArgumentException(sprintf('Cache directory is not writable: %s.', $directory)); } } $dump = <<<'EOF' $value) { CacheItem::validateKey(\is_int($key) ? (string) $key : $key); if (null === $value || \is_object($value)) { try { $value = serialize($value); } catch (\Exception $e) { throw new InvalidArgumentException(sprintf('Cache key "%s" has non-serializable %s value.', $key, get_class($value)), 0, $e); } } elseif (\is_array($value)) { try { $serialized = serialize($value); $unserialized = unserialize($serialized); } catch (\Exception $e) { throw new InvalidArgumentException(sprintf('Cache key "%s" has non-serializable array value.', $key), 0, $e); } // Store arrays serialized if they contain any objects or references if ($unserialized !== $value || (false !== strpos($serialized, ';R:') && preg_match('/;R:[1-9]/', $serialized))) { $value = $serialized; } } elseif (\is_string($value)) { // Serialize strings if they could be confused with serialized objects or arrays if ('N;' === $value || (isset($value[2]) && ':' === $value[1])) { $value = serialize($value); } } elseif (!\is_scalar($value)) { throw new InvalidArgumentException(sprintf('Cache key "%s" has non-serializable %s value.', $key, gettype($value))); } $dump .= var_export($key, true).' => '.var_export($value, true).",\n"; } $dump .= "\n);\n"; $dump = str_replace("' . \"\\0\" . '", "\0", $dump); $tmpFile = uniqid($this->file, true); file_put_contents($tmpFile, $dump); @chmod($tmpFile, 0666 & ~umask()); unset($serialized, $unserialized, $value, $dump); @rename($tmpFile, $this->file); $this->initialize(); } /** * {@inheritdoc} */ public function clear() { $this->values = array(); $cleared = @unlink($this->file) || !file_exists($this->file); return $this->pool->clear() && $cleared; } /** * Load the cache file. */ private function initialize() { if ($this->zendDetectUnicode) { $zmb = ini_set('zend.detect_unicode', 0); } try { $this->values = file_exists($this->file) ? (include $this->file ?: array()) : array(); } finally { if ($this->zendDetectUnicode) { ini_set('zend.detect_unicode', $zmb); } } } } __halt_compiler();----SIGNATURE:----hGBXbiiGwYTq4dLpltxBfumaP/JQjZSfsATLGripXkIRDt73qYhNnLtJZPfpyADOmMN3y1Mr9pQFjfQWxL3l43cwse/5XWqNbWKimB4tggNQ4a8aUt9WZwFoYFR2peeAN5ESlKqg8m8zkGW7Vve2KOMQJM0u5S1N5yFFUsBf0KR47JuTQ516sI7NB9gVYxP36romaC4neF3bakXaSF3QHAON/MdEOhG4BtaO29bqRSFuBNLXEvgP6BZuHlZmfN4ZcK2a/aRTgFa830mziUdc2wtYIvwMSApHciyc6NqrKoJMFM4OejOPaS9hb0lNruufUetfKUPPUqKIQi1wrZEoepb9txZIUhRXbIXt1cfTba0wjGBkmD0W9zhQVjOH2gz5PoYJa2KSL4ceUtxcoCb/ZupSJ5rIu0BCsk7fw5Fskihsvl2iLGg4TgMB3H7j/jygz119MGcUwGx8augHc9yubJzIA1bpJEOpygDT7n1mN98oRRvbEIRIa2VYJQSrEaeGg6qs1gYqiC2rfmzrh3Ca7L+jyfHO0/Cee0rHlSmnPWOC5YWEV8Rhw2jv5rCutsXITzMJ6Bj/JOFW4xshbY9iHQCQpbgH1Hahzm/HvkGZEPlFhsJr/HdZtn9LIKLPKXwesL5ipWqNDP1LcL0wwA/UeIiqzlEgXIRhDXnB6IsPsVc=----ATTACHMENT:----NTIwOTkzNjM4NTIzMzk3NiAzMDQ5MzI0OTkxOTgwOTQzIDQ3NjkxMzI4Mjg1NzgzMjA=