PHP文件生成的图片无法使用CDN缓存的解决方法

 更新时间:2015年06月20日 10:18:27   投稿:junjie  
这篇文章主要介绍了PHP文件生成的图片无法使用CDN缓存的解决方法,这里的PHP生成图片是指src地址是一个PHP文件的图片,如果不做CDN,服务器的压力会非常大,本文就讲解了如何加进CDN的方法,需要的朋友可以参考下

今天发现线上有个问题,线上一个图片域名,在前端已经加了CDN缓存,不落缓存,则用PHP动态实现图片缩放,但经PHP处理过的图片输出后,每次都要从后端读取,后端服务器压力瞬间增加,经分析,PHP中没有作304的处理,

HTTP的原理是这样的,每次请求到服务器后,服务端检测有没有修改,如没有修改,可以直接返回一个304的状态码,这样就用客户端的缓存了,CDN的原理就是如此,如果设置了304,就会将相应的URL进行缓存起来;

相关代码如下:

复制代码 代码如下:

//检测有没改变
if (isset($_SERVER['HTTP_IF_NONE_MATCH'])){
    $etag = $_SERVER['HTTP_IF_NONE_MATCH'];
    if (md5($this->image) === $etag){
        header("HTTP/1.1 304 Not Modified");
        exit;
    }
}

header("Last-Modified: " . gmdate("D, d M Y H:i:s", strtotime('2011-1-1'))." GMT");
//输出etag头
header('etag:' . md5($this->image));
header('Cache-Control:max-age=2592000');echo $this->image;

其中http头HTTP_IF_NONE_MATCH,一般是服务器返回的对某一URL的标识,一般用MD5计算,这样我们检测MD5值对不对,相同就可以返回304了;

PS:

刚开始抓了半天包,只看到服务端返回的Etag标签,没看到客户端的http头中If-None-Match,害得在fastcgi.conf.default 中加入如下代码:

复制代码 代码如下:

fastcgi_param  CACHE_ETAG    $http_if_none_match;

一打印$_SERVER,根本就没有CACHE_ETAG这个变量,看来nginx都会将相关的HTTP头放到$_SERVER变量中,也加深了http协议的了解

相关文章

  • PHP使用观察者模式处理异常信息的方法详解

    PHP使用观察者模式处理异常信息的方法详解

    这篇文章主要介绍了PHP使用观察者模式处理异常信息的方法,结合实例形式详细分析了php观察者模式处理异常信息相关原理、实现方法及操作注意事项,需要的朋友可以参考下
    2019-09-09
  • 解析php常用image图像函数集

    解析php常用image图像函数集

    本篇文章是对php中常用的image图像函数集进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 记录一次排查PHP脚本执行卡住的问题

    记录一次排查PHP脚本执行卡住的问题

    最近通过监控发现服务器中的一台机器异常,通过排除发现可能是php执行脚本出现了问题,于是通过一步步排查,最终解决了这个问题,下面这篇文章主要是记录了一次排查PHP脚本执行卡住的问题,需要的朋友可以参考下。
    2016-12-12
  • Ajax请求PHP后台接口返回信息的实例代码

    Ajax请求PHP后台接口返回信息的实例代码

    今天小编就为大家分享一篇Ajax请求PHP后台接口返回信息的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • php文件操作相关类实例

    php文件操作相关类实例

    这篇文章主要介绍了php文件操作相关类,实例分析了php针对文件与目录的创建、删除、复制、检查等操作技巧,需要的朋友可以参考下
    2015-06-06
  • 教你在header中隐藏php的版本信息

    教你在header中隐藏php的版本信息

    本文教大家如何在header信息中隐藏PHP的版本信息,这样修改后对于大家的php程序会更加安全,有需要的可以参考学习。
    2016-08-08
  • 使用eAccelerator加密PHP程序

    使用eAccelerator加密PHP程序

    这款软件的功能就是通过在内存中缓存PHP文件从而加速PHP程序的执行速度。由于MMCache的原作者被Zend挖走,MMCache的开发一直处于停滞状态。而Eaccelerator却借鉴了MMCache的优点而一直在不断的更新。
    2008-10-10
  • 说明的比较细的php 正则学习实例

    说明的比较细的php 正则学习实例

    首先,让我们看看两个特别的字符:’^’ 和 ‘$’ 他们是分别用来匹配字符串的开始和结束,一下分别举例说明
    2008-07-07
  • mysql 查询指定日期时间内sql语句实现原理与代码

    mysql 查询指定日期时间内sql语句实现原理与代码

    查询指定日期时间内sql语句实现原理:如果是月份就是当前的月减去你要统计的时间如我要查询数据库中从今天起往前三个月的所有记录
    2012-12-12
  • 修改了一个很不错的php验证码(支持中文)

    修改了一个很不错的php验证码(支持中文)

    很早前在PHP喜悦国际村看到的一个验证码类,写的很强。但有些逻辑方面感觉处理的不好,然后我不喜欢完全用session来处理验证码。这在大型系统中是很不好的
    2007-02-02

最新评论