X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Flibs%2Fobjectcache%2FAPCUBagOStuff.php;h=eba0af50f8bed35f9fc400dec0fc7bc96f5c58d2;hb=a1389b602411984de0a5258513e97f4702c941cf;hp=0483ee7ef20f4c9673cb45ba9d72233b9946fe72;hpb=54a8b9a14f42b063a143a981067ba564860ec556;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/libs/objectcache/APCUBagOStuff.php b/includes/libs/objectcache/APCUBagOStuff.php index 0483ee7ef2..eba0af50f8 100644 --- a/includes/libs/objectcache/APCUBagOStuff.php +++ b/includes/libs/objectcache/APCUBagOStuff.php @@ -34,12 +34,21 @@ * @ingroup Cache */ class APCUBagOStuff extends BagOStuff { + /** @var bool Whether to trust the APC implementation to serialization */ + private $nativeSerialize; + /** * @var string String to append to each APC key. This may be changed * whenever the handling of values is changed, to prevent existing code * from encountering older values which it cannot handle. */ - const KEY_SUFFIX = ':3'; + const KEY_SUFFIX = ':4'; + + public function __construct( array $params = [] ) { + parent::__construct( $params ); + // The extension serialize is still buggy, unlike "php" and "igbinary" + $this->nativeSerialize = ( ini_get( 'apc.serializer' ) !== 'default' ); + } protected function doGet( $key, $flags = 0, &$casToken = null ) { $casToken = null; @@ -54,13 +63,11 @@ class APCUBagOStuff extends BagOStuff { } public function set( $key, $value, $exptime = 0, $flags = 0 ) { - apcu_store( + return apcu_store( $key . self::KEY_SUFFIX, $this->serialize( $value ), $exptime ); - - return true; } public function add( $key, $value, $exptime = 0, $flags = 0 ) { @@ -78,11 +85,7 @@ class APCUBagOStuff extends BagOStuff { } public function incr( $key, $value = 1 ) { - /** - * @todo When we only support php 7 or higher remove this hack - * - * https://github.com/krakjoe/apcu/issues/166 - */ + // https://github.com/krakjoe/apcu/issues/166 if ( apcu_exists( $key . self::KEY_SUFFIX ) ) { return apcu_inc( $key . self::KEY_SUFFIX, $value ); } else { @@ -91,11 +94,7 @@ class APCUBagOStuff extends BagOStuff { } public function decr( $key, $value = 1 ) { - /** - * @todo When we only support php 7 or higher remove this hack - * - * https://github.com/krakjoe/apcu/issues/166 - */ + // https://github.com/krakjoe/apcu/issues/166 if ( apcu_exists( $key . self::KEY_SUFFIX ) ) { return apcu_dec( $key . self::KEY_SUFFIX, $value ); } else { @@ -104,10 +103,18 @@ class APCUBagOStuff extends BagOStuff { } protected function serialize( $value ) { + if ( $this->nativeSerialize ) { + return $value; + } + return $this->isInteger( $value ) ? (int)$value : serialize( $value ); } protected function unserialize( $value ) { + if ( $this->nativeSerialize ) { + return $value; + } + return $this->isInteger( $value ) ? (int)$value : unserialize( $value ); } }