Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 允许登录用户查看和下载通常会被403拒绝访问的文件(大约250&35; x2B;MB)_Php_Download_Large Files_Readfile - Fatal编程技术网

Php 允许登录用户查看和下载通常会被403拒绝访问的文件(大约250&35; x2B;MB)

Php 允许登录用户查看和下载通常会被403拒绝访问的文件(大约250&35; x2B;MB),php,download,large-files,readfile,Php,Download,Large Files,Readfile,我正在用家里的一台备用计算机(使用Ubuntu server 11.04)构建一个web服务器,目标是将其用作文件共享驱动器,也可以通过internet访问。显然,我不希望任何人都能下载其中一些文件,特别是因为有些文件的大小在250-750MB之间(视频文件、档案等)。因此,我将用PHP和MySQL实现一个用户登录系统 我在这里和其他网站上做了一些研究,我知道一个好的方法是将这些文件存储在公共目录之外(例如/var/private vs/var/www)。然后,当登录用户请求文件时,会给出相应的

我正在用家里的一台备用计算机(使用Ubuntu server 11.04)构建一个web服务器,目标是将其用作文件共享驱动器,也可以通过internet访问。显然,我不希望任何人都能下载其中一些文件,特别是因为有些文件的大小在250-750MB之间(视频文件、档案等)。因此,我将用PHP和MySQL实现一个用户登录系统

我在这里和其他网站上做了一些研究,我知道一个好的方法是将这些文件存储在公共目录之外(例如/var/private vs/var/www)。然后,当登录用户请求文件时,会给出相应的头(可能是自动下载的应用程序/八位字节流),刷新缓冲区,并通过readfile加载文件

然而,尽管我认为这对于较小的文件(如文档、图像和音乐文件)来说是小菜一碟,但对于我提到的较大的文件,这是否可行

如果我错过了另一种方法,我洗耳恭听。我尝试将文件夹权限设置为750或类似,但我仍然可以在浏览器中通过正常的HTTP查看文件,就好像我被视为该组的一部分(当我设置权限时,我无法访问该文件,PHP也不能)


废话,当我这么做的时候,有什么建议可以让人们通过PHP上传大文件吗?或者这必须通过FTP吗?

这确实可能成为大文件的问题

难道不可能只使用FTP来实现这一点吗


HTTP实际上并不适用于大文件,但FTP适用。

您需要X-Sendfile头。它将指示web服务器从文件系统中提供特定文件


请在此处阅读:

您提到的解决方案是通过PHP和MySQL处理帐户系统时最好的解决方案。如果您想让它远离PHP,让服务器来完成这项工作,您可以通过.htaccess文件通过密码保护目录。这样文件就不会通过PHP,但老实说,没有什么值得担心的。我建议您使用您的方法。

这里有更多关于此方法的信息:这应该是完美的,它似乎比设置标题和读取文件更直接,对吗?更直接。Web服务器的设计和优化是为了尽可能高效地提供文件,所以您应该让它完成它的工作!编写自己的文件服务器只是复制已经存在的代码。此外,它也可能是您可能想不到的事情,例如为客户端使用适当的压缩、正确的内容类型等等。我个人会这样做,但我心目中的一些用户可能不是FTP的技术高手。等等,我可以通过FTP上传PHP中的文件,这与通常的HTTP相反,对吗?