使用PHP访问/下载服务器文件,而不是在站点根目录中

使用PHP访问/下载服务器文件,而不是在站点根目录中,php,file-get-contents,Php,File Get Contents,通常,我会将朋友或家人的文档(图像、MPEG、excel、word文档等)保存在网站的根目录中,即名为/files/或类似的目录中。没什么不寻常的 但是,我一直在玩用户会话控制,允许用户将文件上传到专用的/files/目录。(文件名保存在数据库中,并带有该用户的ID) 但是,这意味着其他人可以尝试猜测和定位其他人的文件。 上传时,我会随机化文件名。我阻止apache显示/files/目录内容 但是,我想开始在网站的根目录之外保存文件。这样就无法通过浏览器访问它 我没有任何代码要显示,但如果无法完

通常,我会将朋友或家人的文档(图像、MPEG、excel、word文档等)保存在网站的根目录中,即名为/files/或类似的目录中。没什么不寻常的

但是,我一直在玩用户会话控制,允许用户将文件上传到专用的/files/目录。(文件名保存在数据库中,并带有该用户的ID)

但是,这意味着其他人可以尝试猜测和定位其他人的文件。
上传时,我会随机化文件名。我阻止apache显示/files/目录内容

但是,我想开始在网站的根目录之外保存文件。这样就无法通过浏览器访问它

我没有任何代码要显示,但如果无法完成,我甚至不想开始这项工作。我确实发现了这个片段,它展示了如何从网站根目录外部显示图像:


也许我可以将其用于任何文件类型,但是有没有人听说过一种更好的方法,允许用户(登录)在线访问他们的文件,但不允许其他用户具有类似的访问权限?

PHP手册提供了关于如何实现这一点的详细信息,并提供了以下示例:



这将通过设置内容配置和内容类型标题强制下载任何文件。这正是这类事情通常的处理方式,
file\u get\u contents
也可以让您做同样的事情。

PHP手册通过以下示例提供了如何实现这一点的详细信息:


这将通过设置内容配置和内容类型标题强制下载任何文件。这与通常做这类事情的方式差不多,
file\u get\u contents
也允许你做同样的事情

<?php
$file = 'monkey.gif';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>