X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FDiskCachePlugin.php;h=b709ea3b31417ce5367d35724162aae0bf18c983;hb=894b221e8aec57768d6804ee3bf53c85196e09bf;hp=86aedd19cc734374ab5eded818b94c4903f62c97;hpb=cde1f998386a59f2eba65bff37a177d9e7a428f9;p=quix0rs-gnu-social.git diff --git a/plugins/DiskCachePlugin.php b/plugins/DiskCachePlugin.php index 86aedd19cc..b709ea3b31 100644 --- a/plugins/DiskCachePlugin.php +++ b/plugins/DiskCachePlugin.php @@ -68,12 +68,12 @@ class DiskCachePlugin extends Plugin 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)); @@ -94,8 +94,6 @@ class DiskCachePlugin extends Plugin function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success) { - $this->log(LOG_INFO, "Setting value for key '$key'"); - $filename = $this->keyToFilename($key); $parent = dirname($filename); @@ -121,7 +119,24 @@ class DiskCachePlugin extends Plugin 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)); @@ -140,8 +155,6 @@ class DiskCachePlugin extends Plugin function onStartCacheDelete(&$key, &$success) { - $this->log(LOG_INFO, "Deleting value for key '$key'"); - $filename = $this->keyToFilename($key); if (file_exists($filename) && !is_dir($filename)) {