]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/DiskCachePlugin.php
Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing
[quix0rs-gnu-social.git] / plugins / DiskCachePlugin.php
index 86aedd19cc734374ab5eded818b94c4903f62c97..b709ea3b31417ce5367d35724162aae0bf18c983 100644 (file)
@@ -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)) {