CachedObjectStorageFactory.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. class PHPExcel_CachedObjectStorageFactory {
  3. const cache_in_memory = 'Memory';
  4. const cache_in_memory_gzip = 'MemoryGZip';
  5. const cache_in_memory_serialized = 'MemorySerialized';
  6. const cache_to_discISAM = 'DiscISAM';
  7. const cache_to_apc = 'APC';
  8. const cache_to_memcache = 'Memcache';
  9. const cache_to_phpTemp = 'PHPTemp';
  10. const cache_to_wincache = 'Wincache';
  11. private static $_cacheStorageMethod = null;
  12. private static $_cacheStorageClass = null;
  13. private static $_storageMethods = array(
  14. self::cache_in_memory,
  15. self::cache_in_memory_gzip,
  16. self::cache_in_memory_serialized,
  17. self::cache_to_phpTemp,
  18. self::cache_to_discISAM,
  19. self::cache_to_apc,
  20. self::cache_to_memcache,
  21. self::cache_to_wincache,
  22. );
  23. private static $_storageMethodDefaultParameters = array(
  24. self::cache_in_memory => array(
  25. ),
  26. self::cache_in_memory_gzip => array(
  27. ),
  28. self::cache_in_memory_serialized => array(
  29. ),
  30. self::cache_to_phpTemp => array( 'memoryCacheSize' => '1MB'
  31. ),
  32. self::cache_to_discISAM => array(
  33. ),
  34. self::cache_to_apc => array( 'cacheTime' => 600
  35. ),
  36. self::cache_to_memcache => array( 'memcacheServer' => 'localhost',
  37. 'memcachePort' => 11211,
  38. 'cacheTime' => 600
  39. ),
  40. self::cache_to_wincache => array( 'cacheTime' => 600
  41. )
  42. );
  43. private static $_storageMethodParameters = array();
  44. public static function getCacheStorageMethod() {
  45. if (!is_null(self::$_cacheStorageMethod)) {
  46. return self::$_cacheStorageMethod;
  47. }
  48. return null;
  49. } // function getCacheStorageMethod()
  50. public static function getCacheStorageClass() {
  51. if (!is_null(self::$_cacheStorageClass)) {
  52. return self::$_cacheStorageClass;
  53. }
  54. return null;
  55. } // function getCacheStorageClass()
  56. public static function getCacheStorageMethods() {
  57. return self::$_storageMethods;
  58. } // function getCacheStorageMethods()
  59. public static function initialize($method = self::cache_in_memory, $arguments = array()) {
  60. if (!in_array($method,self::$_storageMethods)) {
  61. return false;
  62. }
  63. switch($method) {
  64. case self::cache_to_apc :
  65. if (!function_exists('apc_store')) {
  66. return false;
  67. }
  68. if (apc_sma_info() === false) {
  69. return false;
  70. }
  71. break;
  72. case self::cache_to_memcache :
  73. if (!function_exists('memcache_add')) {
  74. return false;
  75. }
  76. break;
  77. case self::cache_to_wincache :
  78. if (!function_exists('wincache_ucache_add')) {
  79. return false;
  80. }
  81. break;
  82. }
  83. self::$_storageMethodParameters[$method] = self::$_storageMethodDefaultParameters[$method];
  84. foreach($arguments as $k => $v) {
  85. if (isset(self::$_storageMethodParameters[$method][$k])) {
  86. self::$_storageMethodParameters[$method][$k] = $v;
  87. }
  88. }
  89. if (is_null(self::$_cacheStorageMethod)) {
  90. self::$_cacheStorageClass = 'PHPExcel_CachedObjectStorage_'.$method;
  91. self::$_cacheStorageMethod = $method;
  92. }
  93. return true;
  94. } // function initialize()
  95. public static function getInstance(PHPExcel_Worksheet $parent) {
  96. if (is_null(self::$_cacheStorageMethod)) {
  97. self::initialize();
  98. }
  99. $instance = new self::$_cacheStorageClass($parent,self::$_storageMethodParameters[self::$_cacheStorageMethod]);
  100. if (!is_null($instance)) {
  101. return $instance;
  102. }
  103. return false;
  104. } // function getInstance()
  105. }