[Cache] Workaround zend.detect_unicode + zend.multibyte

This commit is contained in:
Nicolas Grekas 2017-08-25 17:28:27 +02:00
parent 9db03c16c0
commit 1cab07ebee
6 changed files with 23 additions and 2 deletions

View File

@ -38,6 +38,7 @@ class PhpArrayAdapter implements AdapterInterface
{
$this->file = $file;
$this->fallbackPool = $fallbackPool;
$this->zendMultiByte = ini_get('zend.multibyte');
$this->createCacheItem = \Closure::bind(
function ($key, $value, $isHit) {
$item = new CacheItem();

View File

@ -35,5 +35,6 @@ class PhpFilesAdapter extends AbstractAdapter
$e = new \Exception();
$this->includeHandler = function () use ($e) { throw $e; };
$this->zendMultiByte = ini_get('zend.multibyte');
}
}

View File

@ -34,6 +34,7 @@ class PhpArrayCache implements CacheInterface
{
$this->file = $file;
$this->fallbackPool = $fallbackPool;
$this->zendMultiByte = ini_get('zend.multibyte');
}
/**

View File

@ -35,5 +35,6 @@ class PhpFilesCache extends AbstractCache
$e = new \Exception();
$this->includeHandler = function () use ($e) { throw $e; };
$this->zendMultiByte = ini_get('zend.multibyte');
}
}

View File

@ -25,6 +25,7 @@ trait PhpArrayTrait
private $file;
private $values;
private $fallbackPool;
private $zendMultiByte;
/**
* Store an array of cached values.
@ -106,7 +107,7 @@ EOF;
@rename($tmpFile, $this->file);
$this->values = (include $this->file) ?: array();
$this->initialize();
}
/**
@ -126,6 +127,15 @@ EOF;
*/
private function initialize()
{
$this->values = file_exists($this->file) ? (include $this->file ?: array()) : array();
if ($this->zendMultiByte) {
$zmb = ini_set('zend.multibyte', 0);
}
try {
$this->values = file_exists($this->file) ? (include $this->file ?: array()) : array();
} finally {
if ($this->zendMultiByte) {
ini_set('zend.multibyte', $zmb);
}
}
}
}

View File

@ -25,6 +25,7 @@ trait PhpFilesTrait
use FilesystemCommonTrait;
private $includeHandler;
private $zendMultiByte;
public static function isSupported()
{
@ -39,6 +40,9 @@ trait PhpFilesTrait
$values = array();
$now = time();
if ($this->zendMultiByte) {
$zmb = ini_set('zend.multibyte', 0);
}
set_error_handler($this->includeHandler);
try {
foreach ($ids as $id) {
@ -54,6 +58,9 @@ trait PhpFilesTrait
}
} finally {
restore_error_handler();
if ($this->zendMultiByte) {
ini_set('zend.multibyte', $zmb);
}
}
foreach ($values as $id => $value) {