有没有比fopen()更快的函数?

时间:2009-11-10 06:57:20

标签: php database

假设有一个我们上传图片的网站。现在,当我们必须显示该特定登录用户的相册时。我们能做的是:

  1. 我们在数据库中保存该图像的路径并检索图像
  2. 仅保存图像的名称(唯一)并使用fopen(),因为我们将所有上传的图像保存在一个文件夹中
  3. 现在我的问题是:

    检索该文件而不是fopen()的各种选项有哪些?意思是,还有什么比这更快的东西?

6 个答案:

答案 0 :(得分:6)

您不需要使用fopen来显示图库。为什么你不能只显示这样的图像:

<img src="/folder/with/your/images/<?php echo $unique_name; ?>" />

答案 1 :(得分:0)

我不知道它是否更快,但file_get_contents()更简洁。使用像图像这样的二进制文件,您可能希望使用FILE_BINARY标志。

答案 2 :(得分:0)

我认为readfile()最好?

答案 3 :(得分:0)

要获得最高速度,请将文件保存在RAM磁盘中。

查看tmpfs了解详情。

答案 4 :(得分:0)

如果您的网络服务器是lighttpdApache with mod_xsendfile,那么您可以通过指定特殊的X-Sendfile标头来发送文件。这允许Web服务器进行sendfile调用,这可以非常非常快。

原因是sendfile通常是一个优化的内核调用,它可以从文件系统中获取位并直接将它们放在TCP套接字上。

答案 5 :(得分:0)

您上传的文件夹中有多少张图片?

  • 如果您有数千个,请考虑缩小文件夹。
  • 例如,terminfo系统使用/ usr / share / lib / terminfo / a /子目录来保存以'a'开头的条目。
  • Perl的CPAN系统使用authors / id / A / AB / ABRAHAM来分割。

关键是系统可能会通过目录进行线性搜索来查找文件,而不是所有文件都可以在开头。通过将它们分成更小的子目录,您可以大大缩短查找时间 - 从而提高任何和所有文件打开功能的速度。

有一篇论文或讨论 - 我认为这是在Eric Raymond的'The Art of Unix Programming'中,但它引用了一些测量结果的论文 - 并且它可以以最低的编程成本提供有价值的加速。 / p>

如果操作正确,您可以编写一个简单的函数来从图像存储基目录和图像文件名生成文件名。