function onStartCacheGet(&$key, &$value)
{
$filename = $this->keyToFilename($key);
+
if (file_exists($filename)) {
- $this->log(LOG_INFO, "Cache hit on key '$key'");
$data = file_get_contents($filename);
- $value = unserialize($data);
- } else {
- $this->log(LOG_INFO, "Cache miss on key '$key'");
+ if ($data !== false) {
+ $value = unserialize($data);
+ }
}
Event::handle('EndCacheGet', array($key, &$value));
function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
{
- $this->log(LOG_INFO, "Setting value for key '$key'");
-
$filename = $this->keyToFilename($key);
$parent = dirname($filename);
return false;
}
- file_put_contents($filename, serialize($value));
+ // Write to a temp file and move to destination
+
+ $tempname = tempnam(null, 'statusnetdiskcache');
+
+ $result = file_put_contents($tempname, serialize($value));
+
+ if ($result === false) {
+ $this->log(LOG_ERR, "Couldn't write '$key' to temp file '$tempname'");
+ return false;
+ }
+
+ $result = rename($tempname, $filename);
+
+ if (!$result) {
+ $this->log(LOG_ERR, "Couldn't move temp file '$tempname' to path '$filename' for key '$key'");
+ @unlink($tempname);
+ return false;
+ }
Event::handle('EndCacheSet', array($key, $value, $flag,
$expiry));
function onStartCacheDelete(&$key, &$success)
{
- $this->log(LOG_INFO, "Deleting value for key '$key'");
-
$filename = $this->keyToFilename($key);
if (file_exists($filename) && !is_dir($filename)) {