在学用php做一个主要功能是下载资料的网站,有一些概念性的疑惑
- web服务器上用php也可以实现下载文件,与ftp下载有何区别呢?
- web服务器上用php实现下载时的消耗由web服务器承担么?消耗大么?ftp呢?
- 另外,下载的内容有用户权限的控制?一般的思路是怎样的?
感觉概念模糊,这样问不知是否正确。
- 问题1:
- ftp下载和http下载文件使用的协议不同,http是为分发内容而设计的协议,ftp是为传输文件而定制的协议。
- 对于用户来说,ftp上传大文件更稳定,下载方面,现在有了断点续传工具,可能都差不多。
- 另外,ftp需要占用两个端口,一个下载端口一个控制端口,而http只要占用一个;
- http传输很好实现加密,ftp则不容易。
- 问题2:
- 下载时的消耗有CPU、内存、带宽
- php实现http下载时,较ftp耗资源,这点还取决于服务器软件和具体的硬件,你得放个大文件试试。
- 问题3:
- http实现权限控制思路,根据用户session决定用户权限级别,有权限在读取物理文件,通过http流发给用户,物理文件可以放在web目录之外。
- ftp内建了权限控制,只要在服务端设置用户和密码就行了。可以设置到目录级别,对文件的访问可以设置列表/读/写权限。
提问者『下载』这个词没理解。
『使用PHP输出内容给浏览器』就是『HTTP下载』。HTTP和FTP是两个不同的应用层协议,他们的区别不应该在这种网站问,而应该自己去看文档。
我猜测你说的用PHP实现的下载是指用php read一个文件然后返回给用户。这样的情况下,性能消耗比web server直接host静态内容要大。你可以在PHP里返回302
跳转,然后由web server直接输出内容。或者如果确实想隐藏静态文件路径又想提高性能,google一下xsendfile
,Apache和nginx都有这样的模块。
用户权限控制如果用302
跳转是实现不了的。要么PHP直接吐内容,要么用xsendfile
,自己斟酌吧。
正文完