Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F95815414
PhabricatorKeyValueSerializingCacheProxy.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Thu, Dec 19, 13:30
Size
1 KB
Mime Type
text/x-php
Expires
Sat, Dec 21, 13:30 (1 d, 21 h)
Engine
blob
Format
Raw Data
Handle
23059352
Attached To
rPH Phabricator
PhabricatorKeyValueSerializingCacheProxy.php
View Options
<?php
/**
* Proxies another cache and serializes values.
*
* This allows more complex data to be stored in a cache which can only store
* strings.
*/
final
class
PhabricatorKeyValueSerializingCacheProxy
extends
PhutilKeyValueCacheProxy
{
public
function
getKeys
(
array
$keys
)
{
$results
=
parent
::
getKeys
(
$keys
);
$reads
=
array
();
foreach
(
$results
as
$key
=>
$result
)
{
$structure
=
@
unserialize
(
$result
);
// The unserialize() function returns false when unserializing a
// literal `false`, and also when it fails. If we get a literal
// `false`, test if the serialized form is the same as the
// serialization of `false` and miss the cache otherwise.
if
(
$structure
===
false
)
{
static
$serialized_false
;
if
(
$serialized_false
===
null
)
{
$serialized_false
=
serialize
(
false
);
}
if
(
$result
!==
$serialized_false
)
{
continue
;
}
}
$reads
[
$key
]
=
$structure
;
}
return
$reads
;
}
public
function
setKeys
(
array
$keys
,
$ttl
=
null
)
{
$writes
=
array
();
foreach
(
$keys
as
$key
=>
$value
)
{
if
(
is_object
(
$value
))
{
throw
new
Exception
(
pht
(
'Serializing cache can not write objects (for key "%s")!'
,
$key
));
}
$writes
[
$key
]
=
serialize
(
$value
);
}
return
parent
::
setKeys
(
$writes
,
$ttl
);
}
}
Event Timeline
Log In to Comment