限制对特定文件夹中的文件的访问

时间:2011-01-12 作者:NetConstructor.com

Possible Duplicate:
How to Protect Uploads, if User is not Logged In?

是否有任何方法可以限制只有具有特定功能集的特定wordpress用户才能直接访问特定文件夹中的文件?

1 个回复
最合适的回答,由SO网友:Patriek 整理而成

最简单的php解决方案是制作下载脚本。它检查用户是否具有正确的权限,并将文件提供给webclient。或者我的首选项在web根目录外设置一个文件夹,并将文件放在那里。

设置无匿名访问的文件权限,让Web服务器读取并将其输出到如下php文件中。下面的代码读取文件并将其发送到浏览器。

header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header(\'Content-disposition: attachment; filename=\'. $file;
header("Content-Transfer-Encoding:  binary"); 
header("Content-Length: ". filesize(ABSPATH.$dir.$file); 
readfile($dir.$file);
exit();
编辑14-1:

创建一个普通的上载框,当文件上载时,将其移动到webroot目录之外的文件夹(用户无法通过http访问此文件夹,只能通过Web服务器访问)。

if (move_uploaded_file( $_FILES[\'Filedata\'][\'tmp_name\'] , $upload_dir.$filename ) ) {
// code to do after the file has been copied succesfully. Update your database or something.
}
$upload\\U目录$filename是指向www文件夹外目录的完整路径。该文件现在只能由Web服务器访问。使用上载者信息将位置存储在数据库中。或者为每个用户创建子目录。您需要一些东西来区分每个用户的文件。

现在,当您要下载文件时,请创建一个名为download的脚本。phpIn,检查用户是否拥有该文件的权限。

global $user;
if ($user->id == $uploaded_user_id) {
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Cache-Control: private",false); 
    header(\'Content-disposition: attachment; filename=\'. $file;
    header("Content-Transfer-Encoding:  binary"); 
    header("Content-Length: ". filesize(ABSPATH.$upload_dir.$file); 
    readfile($upload_dir.$file);
    exit();

}
现在,您需要向下载脚本传递file\\u id或名称。因此,制作类似url/下载的链接。php?文件=$文件。你必须直接调用它,或者在插件的早期阶段调用它,否则你会得到已经发送的消息头。脚本将检查用户是否有权限并开始输出二进制数据。

应该是这样的,希望有帮助。这还不完整,但应该让你开始。

结束

相关推荐

Updates for a private plugin?

如果我写一个私有插件,有没有办法使用WordPress自动更新机制来更新它 我想封装这个功能,但它是我自己的5个博客特有的,所以它不是公共插件资源的好候选。但我喜欢这种简单的更新机制 有没有办法做到这一点