我正在创建一个约会网站,用户可以上传他们的图片, 一些私人和一些公众。
我打算做的是保存所有上传的图片,当我想要显示它们时,我会有一个会调用它们的脚本。
ie:url-> mysite.com/members/mainimage/5
处理此调用的函数是: public function mainImage($ user){
$this->load->model('tables/user_images_table');
$image = $this->user_images_table->getMainUserImage($user);
if($image != null ) {
$imageExploded = explode('.',$image);
switch( $imageExploded[1] ) {
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
default:
}
$imagePath = 'uploads/'.$image;
} else {
//default image
$imagePath = 'inner/default.png';
$ctype = 'image/png';
}
header('Content-type: '.$ctype);
readfile(base_url()."images/".$imagePath);
}
但在我看到我的网站越来越大之后 我注意到每个用户图像请求我的所有appliaction文件都被加载了,这可能会减慢我的网站速度。
您是否知道如何保存私有图片(只有在对用户进行一些检查后才能通过网址公开)
答案 0 :(得分:2)
将您的私有图片存储在某个文件夹中,同时将.htaccess
放在这样的代码中:
deny from all
所以现在没有人可以通过http直接访问这些文件
然后在您网站的根目录中创建.htaccess
并将这些行复制到那里:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^private-photo/([0-9]+)\.(jpg|jpeg|gif|png)$ private_photo.php?id=$1 [QSA,L]
所以现在所有http请求(例如http://site.com/private-photo/113.jpg)都会被重定向到private_photo.php
所以最后一步是:你创建private_photo.php,你从$_GET["id"]
获取图像的id,进行安全检查 - 如果请求照片的用户有权访问它,然后{{1}图像或仅显示有关限制访问的错误