/** * Make a control key with the string containing datas * * @param string $data Data * @param string $controlType Type of control 'md5', 'crc32' or 'strlen' * @throws \Micro\Cache\Exception * @return string Control key */ protected function _hash($data, $controlType) { switch ($controlType) { case 'md5': return md5($data); case 'crc32': return crc32($data); case 'strlen': return strlen($data); case 'adler32': return hash('adler32', $data); default: Cache::throwException("Incorrect hash function : {$controlType}"); } }
/** * Determine system TMP directory and detect if we have read access * @return string * @throws \Micro\Cache\Exception if unable to determine directory */ public function getTmpDir() { $tmpdir = array(); foreach (array($_ENV, $_SERVER) as $tab) { foreach (array('TMPDIR', 'TEMP', 'TMP', 'windir', 'SystemRoot') as $key) { if (isset($tab[$key]) && is_string($tab[$key])) { if ($key == 'windir' or $key == 'SystemRoot') { $dir = realpath($tab[$key] . '\\temp'); } else { $dir = realpath($tab[$key]); } if ($this->_isGoodTmpDir($dir)) { return $dir; } } } } $upload = ini_get('upload_tmp_dir'); if ($upload) { $dir = realpath($upload); if ($this->_isGoodTmpDir($dir)) { return $dir; } } if (function_exists('sys_get_temp_dir')) { $dir = sys_get_temp_dir(); if ($this->_isGoodTmpDir($dir)) { return $dir; } } // Attemp to detect by creating a temporary file $tempFile = tempnam(md5(uniqid(rand(), TRUE)), ''); if ($tempFile) { $dir = realpath(dirname($tempFile)); unlink($tempFile); if ($this->_isGoodTmpDir($dir)) { return $dir; } } if ($this->_isGoodTmpDir('/tmp')) { return '/tmp'; } if ($this->_isGoodTmpDir('\\temp')) { return '\\temp'; } Cache::throwException('Could not determine temp directory, please specify a cache_dir manually'); }
/** * Validate a tags array (security, reliable filenames, reserved prefixes...) * * Throw an exception if a problem is found * * @param array $tags Array of tags * @throws \Micro\Cache\Exception * @return void */ protected static function _validateTagsArray($tags) { if (!is_array($tags)) { Cache::throwException('Invalid tags array : must be an array'); } foreach ($tags as $tag) { self::_validateIdOrTag($tag); } reset($tags); }