关于PHP文件缓存的一点测试

前几天测试,发现include(require)一个文件要远比file_get_contents慢(甚至能差一个数量级)。一般PHP的文件缓存是将数组解析成PHP变量赋值语法格式写入一个PHP文件中,载入缓存使用include,大多数人都认为这样会比较快,但是考虑到file_get_contents与include之间巨大的速度差,我还是测试了一下file_get_contents然后反串行化(自然文件的内容直接就是串行化后的字符串)的速度与include进行比较。测试发现大部分情况下反串行化速度都要比include快,大多是时候比include速度快一倍,只有保存的数据非常简单才有可能include比较快(例如空数组,不过有一次发现include快,过了几个小时再测试又成了反串行化快….所以先说有可能…),感兴趣的朋友可以测试看看

另外,提醒一点,不要在file_get_contents一个文件之前include这个文件,否则file_get_contents会非常的慢

—————— 2018年1月30日 —————–

在 PHP7.2.1 上测试,include 比 file_get_contents 再 unserialize 要快的多,执行时间差300倍…. 所以对于文件缓存 include 是当前最好的办法

并且不会再出现 include 影响 fopen 速度的问题了

6 thoughts on “关于PHP文件缓存的一点测试

  1. file_get_contents
    (PHP 4 >= 4.3.0, PHP 5)

    file_get_contents — 将整个文件读入一个字符串
    说明
    string file_get_contents ( string filename [, bool use_include_path [, resource context [, int offset [,

    int maxlen]]]] )

    和 file() 一样,只除了 file_get_contents() 把文件读入一个字符串。将在参数 offset 所指定的位置开始读取长度为

    maxlen 的内容。如果失败,file_get_contents() 将返回 FALSE。

    file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技

    术来增强性能。

    注: 如果要打开有特殊字符的 URL (比如说有空格),就需要使用 urlencode() 进行 URL 编码。

    注: context 参数可以用 NULL 来忽略。

    更新日志

    版本 说明
    5.0.0 添加了对 context 的支持。
    5.1.0 添加了 offset 和 maxlen 参数。

    注释
    注: 本函数可安全用于二进制对象。

    似乎不常用哦!

  2. Blog用了官方的防止垃圾留言插件,但是这个插件经常会把正常留言也弄成垃圾留言…所以可能留言后看不到,要等我去后台审核= =b

    注意这一句:file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。在php4.3以上建议使用这一个函数来读取文件内容

    file_get_contents就是用来代替fopen、fread、fclose这一过程的,这个函数里面就是做了这三个函数的操作,在PHP5还有一个file_put_contents,作用是代替fopen、fwrite、fclose这个过程

    关于最后补充的不要在file_get_contents一个文件之前include这个文件,其实应该更扩大了说不要在fopen一个文件之前include这个文件,否则fopen会很慢

  3. 读入到一个字符串?有点难理解哦!好像这个函数可以打开远程文件,我看这还是用的比较多些;比如抓取股票价格等什么的。老大,你CSS做的挺牛!我全拷下来了,共4CSS个文件吧!

  4. 未组织好
    ?feed=rss (line 35)
    从官方论坛看到的(http://sourceforge.net/forum/forum.php?thread_id=1468237& forum_id=416741),总是最新的版本,更新的很快,现在已经是v0.9.4 for PHP4.4.4和v0.9.5 rc1 for PHP5.1.6,两边都是紧跟最新版本,推荐

回复 macoo 取消回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据