X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fsymfony%2Fconfig%2FResourceCheckerConfigCache.php;fp=vendor%2Fsymfony%2Fconfig%2FResourceCheckerConfigCache.php;h=0a79b84c1c7b38768abf986cae1aa083015b38fb;hp=0e3a411b07552e45fe33306abe6e37d504627bc3;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hpb=680c79a86e3ed402f263faeac92e89fb6d9edcc0 diff --git a/vendor/symfony/config/ResourceCheckerConfigCache.php b/vendor/symfony/config/ResourceCheckerConfigCache.php index 0e3a411b0..0a79b84c1 100644 --- a/vendor/symfony/config/ResourceCheckerConfigCache.php +++ b/vendor/symfony/config/ResourceCheckerConfigCache.php @@ -29,15 +29,15 @@ class ResourceCheckerConfigCache implements ConfigCacheInterface private $file; /** - * @var ResourceCheckerInterface[] + * @var iterable|ResourceCheckerInterface[] */ private $resourceCheckers; /** - * @param string $file The absolute cache path - * @param ResourceCheckerInterface[] $resourceCheckers The ResourceCheckers to use for the freshness check + * @param string $file The absolute cache path + * @param iterable|ResourceCheckerInterface[] $resourceCheckers The ResourceCheckers to use for the freshness check */ - public function __construct($file, array $resourceCheckers = array()) + public function __construct($file, $resourceCheckers = array()) { $this->file = $file; $this->resourceCheckers = $resourceCheckers; @@ -68,42 +68,28 @@ class ResourceCheckerConfigCache implements ConfigCacheInterface return false; } - if (!$this->resourceCheckers) { + if ($this->resourceCheckers instanceof \Traversable && !$this->resourceCheckers instanceof \Countable) { + $this->resourceCheckers = iterator_to_array($this->resourceCheckers); + } + + if (!count($this->resourceCheckers)) { return true; // shortcut - if we don't have any checkers we don't need to bother with the meta file at all } $metadata = $this->getMetaFile(); + if (!is_file($metadata)) { return false; } - $e = null; - $meta = false; - $time = filemtime($this->file); - $signalingException = new \UnexpectedValueException(); - $prevUnserializeHandler = ini_set('unserialize_callback_func', ''); - $prevErrorHandler = set_error_handler(function ($type, $msg, $file, $line, $context) use (&$prevErrorHandler, $signalingException) { - if (E_WARNING === $type && 'Class __PHP_Incomplete_Class has no unserializer' === $msg) { - throw $signalingException; - } - - return $prevErrorHandler ? $prevErrorHandler($type, $msg, $file, $line, $context) : false; - }); + $meta = $this->safelyUnserialize($metadata); - try { - $meta = unserialize(file_get_contents($metadata)); - } catch (\Error $e) { - } catch (\Exception $e) { - } - restore_error_handler(); - ini_set('unserialize_callback_func', $prevUnserializeHandler); - if (null !== $e && $e !== $signalingException) { - throw $e; - } if (false === $meta) { return false; } + $time = filemtime($this->file); + foreach ($meta as $resource) { /* @var ResourceInterface $resource */ foreach ($this->resourceCheckers as $checker) { @@ -135,7 +121,7 @@ class ResourceCheckerConfigCache implements ConfigCacheInterface $mode = 0666; $umask = umask(); $filesystem = new Filesystem(); - $filesystem->dumpFile($this->file, $content, null); + $filesystem->dumpFile($this->file, $content); try { $filesystem->chmod($this->file, $mode, $umask); } catch (IOException $e) { @@ -143,13 +129,17 @@ class ResourceCheckerConfigCache implements ConfigCacheInterface } if (null !== $metadata) { - $filesystem->dumpFile($this->getMetaFile(), serialize($metadata), null); + $filesystem->dumpFile($this->getMetaFile(), serialize($metadata)); try { $filesystem->chmod($this->getMetaFile(), $mode, $umask); } catch (IOException $e) { // discard chmod failure (some filesystem may not support it) } } + + if (\function_exists('opcache_invalidate') && ini_get('opcache.enable')) { + @opcache_invalidate($this->file, true); + } } /** @@ -161,4 +151,32 @@ class ResourceCheckerConfigCache implements ConfigCacheInterface { return $this->file.'.meta'; } + + private function safelyUnserialize($file) + { + $e = null; + $meta = false; + $signalingException = new \UnexpectedValueException(); + $prevUnserializeHandler = ini_set('unserialize_callback_func', ''); + $prevErrorHandler = set_error_handler(function ($type, $msg, $file, $line, $context = array()) use (&$prevErrorHandler, $signalingException) { + if (E_WARNING === $type && 'Class __PHP_Incomplete_Class has no unserializer' === $msg) { + throw $signalingException; + } + + return $prevErrorHandler ? $prevErrorHandler($type, $msg, $file, $line, $context) : false; + }); + + try { + $meta = unserialize(file_get_contents($file)); + } catch (\Error $e) { + } catch (\Exception $e) { + } + restore_error_handler(); + ini_set('unserialize_callback_func', $prevUnserializeHandler); + if (null !== $e && $e !== $signalingException) { + throw $e; + } + + return $meta; + } }