最简单的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?文件=$文件。你必须直接调用它,或者在插件的早期阶段调用它,否则你会得到已经发送的消息头。脚本将检查用户是否有权限并开始输出二进制数据。
应该是这样的,希望有帮助。这还不完整,但应该让你开始。