PHP - file_exists 或数组缓存?

发布于 2024-10-18 07:55:11 字数 135 浏览 7 评论 0原文

我有一个 PHP 代码,其中包含多个文件(如果存在)。可能需要包含 150 个文件。

在这种情况下使用 file_exists 会很慢吗?我应该构建一个数组来创建文件结构的缓存吗?

还有其他方法可以对文件结构进行某种缓存吗?

I have a PHP code which includes several files if they exists. It might be 150 files to include.

Is it slow to use file_exists in this case? Should I build an array to create a cache of the file structure instead?

Is there other ways to make some kind of cache of the file structure?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

野侃 2024-10-25 07:55:11

服务单个请求期间有 150 个文件?
如果是这样,您必须减少这个数字,不是因为 150 个 file_exists,而是因为 150 个 include。

如果取决于请求的参数并且每个请求3-4个,那就可以了。

但您不能使用常规数组作为缓存。 PHP 不保留请求之间的变量。您不必重新考虑您的应用程序结构,而不是发明此类缓存。

150 files during serving single request?
If so, you have to reduce this number, not because of 150 file_exists but because of 150 includes.

If it depends on the requested parameters and being 3-4 per request, it's OK.

You cannot use a regular array as a cache though. PHP doesn't preserve variables between requests. Instead of inventing such cache you have tho rethink your application structure.

忆梦 2024-10-25 07:55:11

这是非常糟糕的主意。有两种行之有效的方法可以解决这个问题。

  • 在第一次实例化时使用自动加载器动态解析类文件位置通常需要严格的文件夹结构(ala Zend Framework)
  • 递归地查找所有相关类文件并生成类名到位置的缓存索引。因此,在第一个实例化时,您有一个更简单的自动加载器,它查看缓存的索引并根据类名匹配文件的位置,然后包含它(ala Symfony1 )

This is very bad idea. There are two proven ways around this.

  • Using an autoloader dynamically resolve a classes file location on the first instantiation usually requires a strict folder structure (ala Zend Framework)
  • recursively find all the relevent class files and generate a cached index of classname to location. So on the first instantiation you have a much simplier autoloader that looks at the cached index and match the file's location based on the classname and include it then (ala Symfony1 )
梦里寻她 2024-10-25 07:55:11

@include($file)

include 在尝试打开文件时隐式检查文件是否存在。

根据下面的评论:

  • 这将关闭整个包含文件中的错误检查。
  • 包含不存在的文件比包含现有文件要慢一些,并且比 file_exists 检查慢得多。

@include($file)

include implicitly checks whether the file exists when it tries to open it.

Per comments below:

  • This turns off error checking in the entire included file.
  • Including a non-existant file is somewhat slower than including an existant file and significantly slower than a file_exists check.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文