view->layout()->disableLayout(); $this->_helper->viewRenderer->setNoRender(true); if ((Application_Model_Preference::getStationPodcastPrivacy() && $this->getRequest()->getParam("sharing_token") != Application_Model_Preference::getStationPodcastDownloadKey()) && !RestAuth::verifyAuth(true, false, $this)) { $this->getResponse() ->setHttpResponseCode(401); return; } $rssData = Application_Service_PodcastService::createStationRssFeed(); $mimeType = "text/xml"; header("Content-Type: $mimeType; charset=UTF-8"); if (isset($_SERVER['HTTP_RANGE'])) { header('HTTP/1.1 206 Partial Content'); } else { header('HTTP/1.1 200 OK'); } header("Content-Type: $mimeType"); header("Content-Transfer-Encoding: binary"); header('Cache-Control: public, must-revalidate, max-age=0'); header('Pragma: no-cache'); header('Accept-Ranges: bytes'); $size = strlen($rssData); $begin = 0; $end = $size - 1; //ob_start(); //Must start a buffer here for these header() functions if (isset($_SERVER['HTTP_RANGE'])) { if (preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches)) { $begin = intval($matches[1]); if (!empty($matches[2])) { $end = intval($matches[2]); } } } if ($size > 0) { header('Content-Length:' . (($end - $begin) + 1)); if (isset($_SERVER['HTTP_RANGE'])) { header("Content-Range: bytes $begin-$end/$size"); } } echo $rssData; } }