/**
  * Load data from DB. Not the ideal way to do this but we can't break BC.
  *
  * @param int $version_id
  * @param int $download_id
  */
 private function setup($version_id, $download_id)
 {
     $this->id = absint($version_id);
     $this->download_id = absint($download_id);
     // Get Version Data
     $this->version = strtolower(get_post_meta($this->id, '_version', true));
     $this->download_count = get_post_meta($this->id, '_download_count', true);
     $this->filesize = get_post_meta($this->id, '_filesize', true);
     $this->md5 = get_post_meta($this->id, '_md5', true);
     $this->sha1 = get_post_meta($this->id, '_sha1', true);
     $this->crc32 = get_post_meta($this->id, '_crc32', true);
     $this->mirrors = get_post_meta($this->id, '_files', true);
     // Get URLS
     if (is_string($this->mirrors)) {
         $this->mirrors = array_filter((array) json_decode($this->mirrors));
     } elseif (is_array($this->mirrors)) {
         $this->mirrors = array_filter($this->mirrors);
     } else {
         $this->mirrors = array();
     }
     $this->url = current($this->mirrors);
     $this->filename = current(explode('?', DLM_Utils::basename($this->url)));
     $this->filetype = strtolower(substr(strrchr($this->filename, "."), 1));
     // If we don't have a filesize, lets get it now
     if ($this->filesize === "") {
         $this->filesize = $this->get_filesize($this->url);
     }
 }
 /**
  * Output download headers
  */
 private function download_headers($file_path, $download, $version)
 {
     global $is_IE;
     // Get Mime Type
     $mime_type = "application/octet-stream";
     foreach (get_allowed_mime_types() as $mime => $type) {
         $mimes = explode('|', $mime);
         if (in_array($version->filetype, $mimes)) {
             $mime_type = $type;
             break;
         }
     }
     // Get file name
     $file_name = urldecode(DLM_Utils::basename($file_path));
     if (strstr($file_name, '?')) {
         $file_name = current(explode('?', $file_name));
     }
     // Environment + headers
     if (!ini_get('safe_mode')) {
         @set_time_limit(0);
     }
     if (function_exists('get_magic_quotes_runtime') && get_magic_quotes_runtime()) {
         @set_magic_quotes_runtime(0);
     }
     if (function_exists('apache_setenv')) {
         @apache_setenv('no-gzip', 1);
     }
     @session_write_close();
     @ini_set('zlib.output_compression', 'Off');
     @error_reporting(0);
     /**
      * Prevents errors, for example: transfer closed with 3 bytes remaining to read
      */
     @ob_end_clean();
     // Clear the output buffer
     // Zip corruption fix
     while (ob_get_level() > 0) {
         @ob_end_clean();
     }
     $headers = array();
     if ($is_IE && is_ssl()) {
         // IE bug prevents download via SSL when Cache Control and Pragma no-cache headers set.
         $headers['Expires'] = 'Wed, 11 Jan 1984 05:00:00 GMT';
         $headers['Cache-Control'] = 'private';
     } else {
         nocache_headers();
     }
     $headers['X-Robots-Tag'] = 'noindex, nofollow';
     $headers['Content-Type'] = $mime_type;
     $headers['Content-Description'] = 'File Transfer';
     $headers['Content-Disposition'] = "attachment; filename=\"{$file_name}\";";
     $headers['Content-Transfer-Encoding'] = 'binary';
     if ($version->filesize) {
         $headers['Content-Length'] = $version->filesize;
         $headers['Accept-Ranges'] = 'bytes';
     }
     $headers = apply_filters('dlm_download_headers', $headers, $file_path, $download, $version);
     foreach ($headers as $key => $value) {
         header($key . ': ' . $value);
     }
 }