webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg

Как правильно создать виртуальную ссылку в php?

Сейчас у меня сделано так:
public function actionFile($file){
        $path = '';
        if(Yii::$app->user->can('adminka')){
            if($doc = Docs::find()->where(['file_name'=>$file])->one()){
                $path = Yii::getAlias('@common').'/docs/'.$doc->user_id.'/'.$doc->file_name;
            }
        }else{
            if($doc = Docs::find()->andWhere(['file_name'=>$file])->andWhere(['user_id'=>Yii::$app->user->id])->one()){
                $path = Yii::getAlias('@common').'/docs/'.$doc->user_id.'/'.$doc->file_name;
            }else{
                throw new yii\web\ForbiddenHttpException;
            }
        }
        if(!empty($path)){
            $response = Yii::$app->response;
            $response->format = \yii\web\Response::FORMAT_RAW;
            $mime = yii\helpers\FileHelper::getMimeType($path);
            header('Content-type: '.$mime);
            echo file_get_contents($path);
        }else{
            throw new NotFoundHttpException;
        }
    }

Ссылка выглядит как domen/file/file_name.file_extention
Все работает, но не уверен, что это вменяемый способ. А самый главный вопрос "не помрет ли сервер при размере файла 100мб или 1Гб"?
  • Вопрос задан
  • 363 просмотра
Решения вопроса 2
alsopub
@alsopub
file_get_contents??? Если nginx отсутствует и нет возможности поставить (x-accel-redirect) то хотя бы сделайте чтение/отдачу блоками по 1-10 кб. На больших файлах будет не хватать докачки.
Ответ написан
nazarpc
@nazarpc
Open Source enthusiast
Есть же нормальная функция https://secure.php.net/manual/ru/function.readfile.php
С file_get_contents() конечно же помрет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы