Php Yii2:上传文件存放在哪里?

Php Yii2:上传文件存放在哪里?,php,yii2,Php,Yii2,故事: 用户应该上传一些私人文件到服务器。他应该可以访问这些文件,以便阅读(比如查看图像或pdf文件)。我没有将它们放在Webroot中,所以没有直接链接到它们。但是在第一个请求之后,当服务器为经过身份验证的用户发布它们时,它就可以通过web/assets/*链接为所有其他用户提供。 问题: 是否有办法在每次请求时清除资产?或者,有没有更好的方法只为所有者发布私有文件?您可以通过PHP脚本请求该文件(对不起,我只知道Yii1语法): 您可以将文件保存在只能通过脚本访问的位置,并且可以使用脚本提供

故事:
用户应该上传一些私人文件到服务器。他应该可以访问这些文件,以便阅读(比如查看图像或pdf文件)。我没有将它们放在Webroot中,所以没有直接链接到它们。但是在第一个请求之后,当服务器为经过身份验证的用户发布它们时,它就可以通过web/assets/*链接为所有其他用户提供。

问题:

是否有办法在每次请求时清除资产?或者,有没有更好的方法只为所有者发布私有文件?

您可以通过PHP脚本请求该文件(对不起,我只知道Yii1语法):


您可以将文件保存在只能通过脚本访问的位置,并且可以使用脚本提供文件。您可以将一个php文件放在上载文件夹中。您可以在其中编写脚本进行身份验证并为用户提供服务。@khaleel感谢您的回答。我知道如何为下载文件提供服务。因此,其他人无法通过身份验证访问它们。但是如何在视图中像在img标记中一样处理图像文件呢?使用适当的头来指示脚本输出是图像。并在img src属性中使用指向该脚本的链接<代码>检查Justinasanswer@Khaleel这是有道理的。非常感谢。您需要在函数名中添加action前缀,才能将其用作action。别忘了确保您确实在仔细验证文件名和路径。否则,这可能会引发安全问题
?r=resources/get&fileName=filename.png

public function actionGet() {
    $fileName = Yii::app()->request->getParam('fileName');
    $filePath = __DIR__.'/../../../files/'.$fileName;
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_file($finfo, $fileName);

    if (file_exists($filePath) && Yii::app()->user->canAccess($fileName)) {
        header('content-type: '.$mime);
        header('content-disposition: inline; filename="'.$fileName.'";');
        readfile($file);
    } else {
        $this->redirect('site/index');
    }
}