Yii2:避免文件路径暴漏,代理访问文件
2018-06-22 05:01:45来源:未知 阅读 ()
制作背景:公司要做第三方文件管理系统,客户有时候需要直接访问文件,但是我们又不想暴露文件路径,才有这代理访问
基本功能介绍:读取txt文档、读取图片,如果有需要,可以通过插件读取doc、pdf文档,
http://www.yii2.com/uploads/temp/read.bmp是我的真实路径
控制器
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2016/11/24 0024
* Time: 14:38
*/
namespace app\controllers;
use yii\web\Controller;
use app\models\FetchFiles;
class FetchFilesController extends Controller
{
public $file_path = 'http://www.yii2.com/uploads/temp/read.bmp';
public function actionReadFile(){
$file_path = $this->file_path;
// echo $file_path;
//die;
$FetchFiles = new FetchFiles();
$FetchFiles->actionReadFile($file_path);
}
}
模型代码
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2016/11/24 0024
* Time: 16:53
*/
namespace app\models;
use yii\base\Model;
class FetchFiles extends Model
{
/**
*转换路径为虚拟路径,返回给客户
*/
public function actionVirtualFile(){
//virtualfile需要改为控制器名字,每次访问转换调用控制器去访问
$file_path = $this->file_path;
$file_path = str_replace('uploads/temp','virtualfile',$file_path);
echo($file_path);
}
//客户访问资源时候,转换真实路径
public function actionReadFile($file_path){
//获取真实资源路径
$file_path = str_replace('virtualfile','uploads/temp',$file_path);
// Header("Location: $file_path");
//die();
//判断文件;类型
$fileType = substr(strrchr($file_path, '.'), 1);
//统一转换为小写
$fileType = strtolower($fileType);
//选择文件类型,根据文件类型调用不同方法读取文件
switch($fileType){
case 'png':
$this->actionReadImg($file_path,$fileType);
break;
case 'jpg':
$this->actionReadImg($file_path,$fileType);
break;
case 'jpeg':
$this->actionReadImg($file_path,$fileType);
break;
break;
case 'bmp':
$this->actionReadImg($file_path,$fileType);
break;
case 'txt':
$this->actionReadTxt($file_path);
break;
default:
echo $fileType. "文件类型不支持查看,请直接下载!";
}
// echo $fileType;
// echo file_get_contents("$file_path");
}
//读取txt文档的方法
public function actionReadTxt($file_path){
//echo '使用访问文件的方法'.$file_path;
// $content = file_get_contents($file_path);
$handle = fopen("$file_path", 'r');
$content = '';
while(false != ($a = fread($handle, 8080))){//返回false表示已经读取到文件末尾
$content .= $a;
}
fclose($handle);
//转码,确保文档是utf-8;
$content = iconv('GB2312', 'UTF-8', $content);
echo $content;
}
//读取图片的方法
public function actionReadImg($file_path,$fileType){
$contents=file_get_contents($file_path);
//设置图片的头文件
$header = 'Content-Type: image/'.$fileType;
header( "$header" );//访问图片
base64_decode($contents);
echo $contents;
}
}
效果展示:
读取bmp后缀的图片
读取txt文档
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:PDO和消息队列的一点个人理解
- PHP实现打包下载文件的方法示例 2020-03-17
- PHPExcel如何读取Excel文件 2020-03-10
- PHP怎么读取超大文件 2020-03-10
- PHP文件管理之实现网盘及压缩包的功能操作 2020-02-20
- php判断文件上传图片格式的实例详解 2020-02-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash