public function output() { if ($this->maxAge && isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $_SERVER['HTTP_IF_MODIFIED_SINCE'] == infraRequestUtils::formatHttpTime($this->lastModified)) { infraRequestUtils::sendCachingHeaders($this->maxAge, false, $this->lastModified); header("HTTP/1.1 304 Not Modified"); return; } $useXsendFile = false; $rangeLength = null; if (!$this->fileData && $this->xSendFileAllowed && in_array('mod_xsendfile', apache_get_modules())) { $useXsendFile = true; } else { list($rangeFrom, $rangeTo, $rangeLength) = infraRequestUtils::handleRangeRequest($this->fileSize); } if (class_exists('KalturaMonitorClient')) { KalturaMonitorClient::monitorDumpFile($this->fileSize, $this->filePath); } infraRequestUtils::sendCdnHeaders($this->fileExt, $rangeLength, $this->maxAge, $this->mimeType, false, $this->lastModified); // return "Accept-Ranges: bytes" header. Firefox looks for it when playing ogg video files // upon detecting this header it cancels its original request and starts sending byte range requests header("Accept-Ranges: bytes"); header("Access-Control-Allow-Origin:*"); if ($this->fileData) { echo substr($this->fileData, $rangeFrom, $rangeLength); } else { if ($useXsendFile) { header('X-Kaltura-Sendfile:'); header("X-Sendfile: {$this->filePath}"); } else { infraRequestUtils::dumpFilePart($this->filePath, $rangeFrom, $rangeLength); } } }
public function output() { header('Content-Length: ' . strlen($this->content)); if ($this->contentType) { header('Content-Type: ' . $this->contentType); } header("Access-Control-Allow-Origin:*"); infraRequestUtils::sendCachingHeaders($this->maxAge); echo $this->content; }
public static function dieError($errorCode, $message = null) { $description = self::$errorDescriptionMap[$errorCode]; $args = func_get_args(); if (count($args) > 1) { array_shift($args); $description = @call_user_func_array('sprintf', array_merge(array($description), $args)); } if ($message) { $description .= ", {$message}"; } if (class_exists('KalturaLog')) { KalturaLog::err("exiting on error {$errorCode} - {$description}"); } $headers = array(); if (self::$responseCode) { $headers[] = self::$errorCodeMap[self::$responseCode]; } $headers[] = "X-Kaltura-App: exiting on error {$errorCode} - {$description}"; foreach ($headers as $header) { header($header); } header("X-Kaltura:error-{$errorCode}"); $headers[] = "X-Kaltura:cached-error-{$errorCode}"; self::terminateDispatch(); if ($errorCode != self::ACCESS_CONTROL_RESTRICTED && $errorCode != self::IP_COUNTRY_BLOCKED && $_SERVER["REQUEST_METHOD"] == "GET") { infraRequestUtils::sendCachingHeaders(self::CACHE_EXPIRY, true, time()); if (function_exists('apc_store')) { $protocol = infraRequestUtils::getProtocol(); $host = ""; if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { $host = $_SERVER['HTTP_X_FORWARDED_HOST']; } else { if (isset($_SERVER['HTTP_HOST'])) { $host = $_SERVER['HTTP_HOST']; } } $uri = $_SERVER["REQUEST_URI"]; apc_store("exterror-{$protocol}://{$host}{$uri}", $headers, self::CACHE_EXPIRY); } } die; }
public final function output() { $this->prepareFlavors(); if ($this->deliveryCode) { $this->replaceDeliveryCode(); } $this->tokenizeUrls(); $headers = $this->getHeaders(); $headers[] = "Access-Control-Allow-Origin:*"; $headers[] = "Access-Control-Expose-Headers: Server,range,Content-Length,Content-Range"; foreach ($headers as $header) { header($header); } if (kApiCache::hasExtraFields() && !$this->forceCachingHeaders) { $this->cachingHeadersAge = 0; } infraRequestUtils::sendCachingHeaders($this->cachingHeadersAge, true, $this->lastModified); $header = $this->getManifestHeader(); $footer = $this->getManifestFooter(); $flavors = $this->getManifestFlavors(); foreach ($this->contributors as $contributorInstance) { /* @var $contributorInstance BaseManifestEditor */ $header = $contributorInstance->editManifestHeader($header); $footer = $contributorInstance->editManifestFooter($footer); $flavors = $contributorInstance->editManifestFlavors($flavors); } $separator = $this->getSeparator(); $content = $header; if ($content) { $content .= $separator; } $content .= implode($separator, $flavors); $content .= $separator . $footer; header('Content-Length: ' . strlen($content)); // avoid chunked encoding echo $content; die; }
/** * @param string $playbackContext */ public final function output($deliveryCode, $playbackContext) { $this->deliveryCode = $this->defaultDeliveryCode; if ($deliveryCode) { $this->deliveryCode = $deliveryCode; } if ($this->deliveryCode) { $this->replaceDeliveryCode(); } if ($this->tokenizer) { $this->tokenizer->setPlaybackContext($playbackContext); } $this->tokenizeUrls(); $headers = $this->getHeaders(); $headers[] = "Access-Control-Allow-Origin:*"; $headers[] = "Access-Control-Expose-Headers: Server,range,Content-Length,Content-Range"; foreach ($headers as $header) { header($header); } if (kApiCache::hasExtraFields() && !$this->forceCachingHeaders) { $this->cachingHeadersAge = 0; } infraRequestUtils::sendCachingHeaders($this->cachingHeadersAge, true, $this->lastModified); $header = $this->getManifestHeader(); $footer = $this->getManifestFooter(); $flavors = $this->getManifestFlavors(); foreach ($this->contributors as $contributorInstance) { /* @var $contributorInstance BaseManifestEditor */ $header = $contributorInstance->editManifestHeader($header); $footer = $contributorInstance->editManifestFooter($footer); $flavors = $contributorInstance->editManifestFlavors($flavors); } $content = $header; $separator = $this->getSeparator(); $flavorsString = implode($separator, $flavors); $content .= $separator . $flavorsString; $content .= $separator . $footer; echo $content; die; }