diff options
author | polo <ordipolo@gmx.fr> | 2024-08-13 23:45:21 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2024-08-13 23:45:21 +0200 |
commit | bf6655a534a6775d30cafa67bd801276bda1d98d (patch) | |
tree | c6381e3f6c81c33eab72508f410b165ba05f7e9c /vendor/symfony/cache/Marshaller/DefaultMarshaller.php | |
parent | 94d67a4b51f8e62e7d518cce26a526ae1ec48278 (diff) | |
download | AppliGestionPHP-bf6655a534a6775d30cafa67bd801276bda1d98d.zip |
VERSION 0.2 doctrine ORM et entités
Diffstat (limited to 'vendor/symfony/cache/Marshaller/DefaultMarshaller.php')
-rw-r--r-- | vendor/symfony/cache/Marshaller/DefaultMarshaller.php | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/vendor/symfony/cache/Marshaller/DefaultMarshaller.php b/vendor/symfony/cache/Marshaller/DefaultMarshaller.php new file mode 100644 index 0000000..34bbeb8 --- /dev/null +++ b/vendor/symfony/cache/Marshaller/DefaultMarshaller.php | |||
@@ -0,0 +1,98 @@ | |||
1 | <?php | ||
2 | |||
3 | /* | ||
4 | * This file is part of the Symfony package. | ||
5 | * | ||
6 | * (c) Fabien Potencier <fabien@symfony.com> | ||
7 | * | ||
8 | * For the full copyright and license information, please view the LICENSE | ||
9 | * file that was distributed with this source code. | ||
10 | */ | ||
11 | |||
12 | namespace Symfony\Component\Cache\Marshaller; | ||
13 | |||
14 | use Symfony\Component\Cache\Exception\CacheException; | ||
15 | |||
16 | /** | ||
17 | * Serializes/unserializes values using igbinary_serialize() if available, serialize() otherwise. | ||
18 | * | ||
19 | * @author Nicolas Grekas <p@tchwork.com> | ||
20 | */ | ||
21 | class DefaultMarshaller implements MarshallerInterface | ||
22 | { | ||
23 | private bool $useIgbinarySerialize = true; | ||
24 | private bool $throwOnSerializationFailure = false; | ||
25 | |||
26 | public function __construct(?bool $useIgbinarySerialize = null, bool $throwOnSerializationFailure = false) | ||
27 | { | ||
28 | if (null === $useIgbinarySerialize) { | ||
29 | $useIgbinarySerialize = \extension_loaded('igbinary') && version_compare('3.1.6', phpversion('igbinary'), '<='); | ||
30 | } elseif ($useIgbinarySerialize && (!\extension_loaded('igbinary') || version_compare('3.1.6', phpversion('igbinary'), '>'))) { | ||
31 | throw new CacheException(\extension_loaded('igbinary') ? 'Please upgrade the "igbinary" PHP extension to v3.1.6 or higher.' : 'The "igbinary" PHP extension is not loaded.'); | ||
32 | } | ||
33 | $this->useIgbinarySerialize = $useIgbinarySerialize; | ||
34 | $this->throwOnSerializationFailure = $throwOnSerializationFailure; | ||
35 | } | ||
36 | |||
37 | public function marshall(array $values, ?array &$failed): array | ||
38 | { | ||
39 | $serialized = $failed = []; | ||
40 | |||
41 | foreach ($values as $id => $value) { | ||
42 | try { | ||
43 | if ($this->useIgbinarySerialize) { | ||
44 | $serialized[$id] = igbinary_serialize($value); | ||
45 | } else { | ||
46 | $serialized[$id] = serialize($value); | ||
47 | } | ||
48 | } catch (\Exception $e) { | ||
49 | if ($this->throwOnSerializationFailure) { | ||
50 | throw new \ValueError($e->getMessage(), 0, $e); | ||
51 | } | ||
52 | $failed[] = $id; | ||
53 | } | ||
54 | } | ||
55 | |||
56 | return $serialized; | ||
57 | } | ||
58 | |||
59 | public function unmarshall(string $value): mixed | ||
60 | { | ||
61 | if ('b:0;' === $value) { | ||
62 | return false; | ||
63 | } | ||
64 | if ('N;' === $value) { | ||
65 | return null; | ||
66 | } | ||
67 | static $igbinaryNull; | ||
68 | if ($value === $igbinaryNull ??= \extension_loaded('igbinary') ? igbinary_serialize(null) : false) { | ||
69 | return null; | ||
70 | } | ||
71 | $unserializeCallbackHandler = ini_set('unserialize_callback_func', __CLASS__.'::handleUnserializeCallback'); | ||
72 | try { | ||
73 | if (':' === ($value[1] ?? ':')) { | ||
74 | if (false !== $value = unserialize($value)) { | ||
75 | return $value; | ||
76 | } | ||
77 | } elseif (false === $igbinaryNull) { | ||
78 | throw new \RuntimeException('Failed to unserialize values, did you forget to install the "igbinary" extension?'); | ||
79 | } elseif (null !== $value = igbinary_unserialize($value)) { | ||
80 | return $value; | ||
81 | } | ||
82 | |||
83 | throw new \DomainException(error_get_last() ? error_get_last()['message'] : 'Failed to unserialize values.'); | ||
84 | } catch (\Error $e) { | ||
85 | throw new \ErrorException($e->getMessage(), $e->getCode(), \E_ERROR, $e->getFile(), $e->getLine()); | ||
86 | } finally { | ||
87 | ini_set('unserialize_callback_func', $unserializeCallbackHandler); | ||
88 | } | ||
89 | } | ||
90 | |||
91 | /** | ||
92 | * @internal | ||
93 | */ | ||
94 | public static function handleUnserializeCallback(string $class): never | ||
95 | { | ||
96 | throw new \DomainException('Class not found: '.$class); | ||
97 | } | ||
98 | } | ||