PHP 的 virtual() 函数是否节省服务器内存?
我们的服务器上有敏感文件。我们希望这些文件只能由登录用户访问,因此我们通过 PHP 脚本来提供它们,该脚本检查用户是否有权查看这些文件。然后我们使用readfile()
来提供该文件。
这工作正常,但据我了解,readfile() 会将整个文件加载到内存中,然后提供它,而 virtual() 将直接从 PHP 提供它,从而减轻服务器内存的压力。 readfile() 目前工作正常,但新客户希望使用更大的文件获得相同的功能,我想知道迁移到 virtual() 是否会更好。
- 我对 readfile() 和 virtual() 的理解正确吗?
- 例如,缓存方面是否存在任何问题?还是还有什么我没想到的?
We have sensitive files on a server. We want these to be accessible only to logged in users, so we serve them through a PHP script which checks whether the user has permission to view these files. Then we serve the file with readfile()
.
This works fine, but it's my understanding that readfile()
will load the entire file into memory, and then serve it, while virtual()
will serve it directly from PHP, and thus reduce the stress on the server's memory. readfile()
is working fine for now, but a new client wants the same functionality with much larger files, and I was wondering whether moving to virtual()
would be better.
- Is my understanding of
readfile()
andvirtual()
correct? - Are there any gotchas with, for example, caching? Or anything else I haven't thought of?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,你是对的。
virtual()
将使 PHP 使用更少的内存,但 Apache 会发出一个额外的请求。更好的方法是 Apache X-Sendfile 模块。您只需从 PHP 执行一次额外的
header()
调用,Apache 就会为您提供该文件,而不是 PHP。这使用的资源甚至更少。这是一个教程
Yes, you are correct.
virtual()
will make PHP use less memory, but Apache will issue one extra request.A better way would be the Apache X-Sendfile module. All you'd need to do from PHP is an extra
header()
call and Apache will serve the file for you, instead of PHP. That uses even less resources.Here's a tutorial