function log_write($data, FileDownload $file, IDownloader $downloader) { $cache = Environment::getCache("FileDownloader/log"); $log = array(); $tid = (string) $file->getTransferId(); if (!isset($cache["registry"])) { $cache["registry"] = array(); } $reg = $cache["registry"]; $reg[$tid] = true; $cache["registry"] = $reg; if (isset($cache[$tid])) { $log = $cache[$tid]; } Debugger::fireLog("Data: " . $data . "; " . $downloader->end); $data = $data . ": " . Helpers::bytes($file->transferredBytes) . " <->; "; if ($downloader instanceof AdvancedDownloader and $downloader->isInitialized()) { $data .= "position: " . Helpers::bytes($downloader->position) . "; "; //$data .= "length: ".Helpers::bytes($downloader->length)."; "; $data .= "http-range: " . Helpers::bytes($downloader->start) . "-" . Helpers::bytes($downloader->end) . "; "; $data .= "progress (con: " . round($file->transferredBytes / $downloader->end * 100) . "% X "; $data .= "file: " . round($downloader->position / $file->sourceFileSize * 100) . "%)"; } $log[] = $data; $cache[$tid] = $log; }
/** * Download the file! * @param IDownloader $downloader */ function download(IDownloader $downloader = null) { $req = Environment::getHttpRequest(); $res = Environment::getHttpResponse(); if (self::$closeSession) { $ses = Environment::getSession(); if ($ses->isStarted()) { $ses->close(); } } if ($this->getContentDisposition() == "inline" and is_null($this->enableBrowserCache)) { $this->enableBrowserCache = true; } else { $this->enableBrowserCache = false; } if ($downloader === null) { $downloaders = self::getFileDownloaders(); } else { $downloaders = array($downloader); } if (count($downloaders) <= 0) { throw new InvalidStateException("There is no registred downloader!"); } krsort($downloaders); $lastException = null; foreach ($downloaders as $downloader) { if ($downloader instanceof IDownloader and $downloader->isCompatible($this)) { try { FDTools::clearHeaders($res); // Delete all headers $this->transferredBytes = 0; $this->onBeforeDownloaderStarts($this, $downloader); $downloader->download($this); // Start download $this->onComplete($this, $downloader); die; // If all gone ok -> die } catch (FDSkypeMeException $e) { if ($res->isSent()) { throw new InvalidStateException("Headers are already sent! Can't skip downloader."); } else { continue; } } catch (Exception $e) { if (!$res->isSent()) { FDTools::clearHeaders($res); } throw $e; } } } // Pokud se soubor nějakým způsobem odešle - toto už se nespustí if ($lastException instanceof Exception) { FDTools::clearHeaders(Environment::getHttpResponse(), TRUE); throw $lastException; } if ($req->getHeader("Range")) { FDTools::_HTTPError(416); } else { $res->setCode(500); } throw new InvalidStateException("There is no compatible downloader (all downloader returns downloader->isComplatible()=false or was skipped)!"); }