* * 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:----dlXiFo7qq9o0605fVwTwcmxYhoAp+ly+VoYcYlXp3tmNwu7J8wKCdor5AWr/pAgC4FvMKMMiAo6ux0pvnxwIqAEHRDC/mjsSi9xQGTbJVEMeCjKe/AJ34dUNyF6SAxrgRjRfPzWveyGmmibCDoS8PRcUG20Asv8h9B1NsvRhWEXf3x95nmp1IabxiemiXYHyvKiNdMI+L5CFXDsqWHBCWA+eIJe61IjiOKemJIxm3W1+Uzn2RTaEf9f2pBI+EDQXzXZsXmpBs6+XOFp3Cao+zjSZGDUD5WKqU+2RT/TVzE+5jpVuiAR0WIE7S/PI+m5pJlJ5IfG58UoISeOO+49r2rNUwFCID7TfedkDNBSK8vaxsySvIfR3iO2rtDWaJoKSoMxPiloDaR1Nxn42F7mE3DnoTP0z4crnBEUzmcb0YSfgwScy//ugFByZJlH/0dhVZjJlHFFGCWaw6p6pnxRHL5g19X6gS6eYgYwi3JiEN3AN7SPrGoFcBhEkBbPaHVSomwq/VCFClXZcVqn8sZVRggO0jUdtU94+lroHK/mqMqra3n/iow+Sx2+oj5Pn5vKugN2bThrZIj1CptqmhwQUe41FywR4mInvbxDl8ix4kA5SD5MeQbtoUZtQ8jp2n5YmTyxHiu6vCN04KZ2rtgv/NGC+6XnfrpIbQutS5TQeMMw=----ATTACHMENT:----ODI5OTAwOTI1MTgyMzk4MiAzNDg5NTM3NzU3NTY2OTE2IDg1MjAzNDA2NjcyNzAyMQ==