/** * 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); } }