function __construct(Request $request, $filename, $force_download = false) { if (!is_file($filename) || !is_readable($filename)) { throw new \Hydra\Exception\NotFoundHttpException("File not found: {$filename}"); } $this->isPhp = preg_match('/\\.php$/', $filename); $this->filename = $filename; if ($force_download) { $this->headers['Content-Type'] = 'application/octet-stream'; } else { // Try to guess Content-Type if (!$this->isPhp) { $this->headers['Content-Type'] = MimeTypeGuesser::getInstance()->guess($filename); } elseif ($request->app->config->response['guessPhpContentType']) { $ext = Utils::fileExt(substr($filename, 0, -4)); if (isset($request->app->mimetypes[$ext])) { $this->headers['Content-Type'] = $request->app->mimetypes[$ext]; } } } if (!$this->isPhp) { $this->headers['Content-Length'] = filesize($filename); } $response = $this; parent::__construct($request, function () use($response) { // We don't want any left-over output when sending a file. ob_end_clean(); if ($response->isPhp) { $request = $response->request; $app = $response->app; require $response->filename; } else { if ($response->app->config->response['XSendfile']) { $filename = realpath($response->filename); header("X-Sendfile: {$filename}"); } else { set_time_limit(0); //Set the execution time to infinite. readfile($response->filename); } } }); }
$p += 2; return $p < 100 ? "{$p}%" : true; } else { // Error handling test. throw new \RuntimeException('Some error thrown.'); } }; } // Better exception output for JSON, JS and other non-HTML requests $hooks['app.exception'][1000][] = function (ExceptionHandler $handler, \Exception $ex, App $app) { $request = $app->mainRequest; $format = null; $debug = $app->core->debug; // Get format from path info if ($request) { $format = Utils::fileExt($request->path); } // Get format from active route if ($request && isset($request->params)) { $format = $request->params['format']; } // Get format from response if ($request && $request->response) { $response = $request->response; if ($response->format) { $format = $request->response->format; } } // Return a valid JSON response in case of error if ($format == 'json') { if (!headers_sent()) {