Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Yii2 Download File function

I need to download file from folder /uploads, but I just get timeOut error when the action is called, Anyone can help me :(

   public function actionDownload() {
   $path = Yii::getAlias('@webroot') . '/uploads';

   $file = $path . '/1.pdf';

   if (file_exists($file)) {

   Yii::$app->response->sendFile($file);

  } 
}
like image 688
ronydavid Avatar asked Jun 09 '15 06:06

ronydavid


1 Answers

If a download takes too much time, I see 2 possibilities

  • You can increase the max execution time of your script. That's not the best solution as the script will still time out for too big files but that's the simplest solution (there may be performance considerations unrelated to your question). To do so :

ini_set('max_execution_time', 5*60); // 5 minutes

  • You can use the X-SendFile header of Apache (if this module in enabled in Apache only) to let Apache handle the sending of the file. More about this on Yii2 documentation http://www.yiiframework.com/doc-2.0/guide-runtime-responses.html#sending-files. Beware of bugs in IE<=8.

if (file_exists($file)) { Yii::$app->response->xSendFile($file); }

like image 120
Mat Avatar answered Oct 17 '22 02:10

Mat