2
0
Просмотр исходного кода

ZF-10421: fixed usage of directory umask and added tests

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@22950 44c647ce-9c0f-0410-b52a-842ac1e357ba
mabe 15 лет назад
Родитель
Сommit
e6d97ee4f9
2 измененных файлов с 32 добавлено и 4 удалено
  1. 8 4
      library/Zend/Cache/Backend/Static.php
  2. 24 0
      tests/Zend/Cache/StaticBackendTest.php

+ 8 - 4
library/Zend/Cache/Backend/Static.php

@@ -261,10 +261,14 @@ class Zend_Cache_Backend_Static
      */
     protected function _createDirectoriesFor($path)
     {
-        if ( !is_dir($path)
-          && !@mkdir($path, $this->_octdec($this->_options['cache_directory_umask']), true)) {
-            $lastErr = error_get_last();
-            Zend_Cache::throwException("Can't create directory: {$lastErr['message']}");
+        if (!is_dir($path)) {
+            $oldUmask = umask(0);
+            if ( !@mkdir($path, $this->_octdec($this->_options['cache_directory_umask']), true)) {
+                $lastErr = error_get_last();
+                umask($oldUmask);
+                Zend_Cache::throwException("Can't create directory: {$lastErr['message']}");
+            }
+            umask($oldUmask);
         }
     }
 

+ 24 - 0
tests/Zend/Cache/StaticBackendTest.php

@@ -125,6 +125,30 @@ class Zend_Cache_StaticBackendTest extends Zend_Cache_CommonBackendTest {
         unlink($this->_instance->getOption('public_dir') . '/foo2.xml');
     }
 
+    public function testSaveWithSubFolder()
+    {
+        $res = $this->_instance->save('data to cache', bin2hex('/foo/bar'));
+        $this->assertTrue($res);
+        $this->assertTrue($this->_instance->test(bin2hex('/foo/bar')));
+
+        unlink($this->_instance->getOption('public_dir') . '/foo/bar.html');
+        rmdir($this->_instance->getOption('public_dir') . '/foo');
+    }
+
+    public function testDirectoryUmaskAsString()
+    {
+        $this->_instance->setOption('cache_directory_umask', '777');
+
+        $res = $this->_instance->save('data to cache', bin2hex('/foo/bar'));
+        $this->assertTrue($res);
+
+        $perms = fileperms($this->_instance->getOption('public_dir') . '/foo');
+        $this->assertEquals('777', substr(decoct($perms), -3));
+
+        unlink($this->_instance->getOption('public_dir') . '/foo/bar.html');
+        rmdir($this->_instance->getOption('public_dir') . '/foo');
+    }
+
     public function testSaveWithSpecificExtensionWithTag()
     {
         $res = $this->_instance->save(serialize(array('data to cache', 'xml')), bin2hex('/foo'), array('tag1'));