$fullpath='/www/images/'.basename($_GET['img']);// 假定文件都在 / www/images / 下if (!is_file($fullpath)) {header("HTTP/1.0 404 Not Found");exit();}$info = getImageSize($fullpath); // 获取图片信息if (!$info) { // 如果不是图片header("HTTP/1.0 404 Not Found");exit();}// 以下凡是 header 函数都是在输出头部信息较多header('Content-type:'. $info['mime']); // 类似于 image/pngheader('Content-Length:'. filesize($fullpath)); // 文件长度header('Pragma:'); // 没用, 但要设置, 防止服务器生成 no-cache 的可怕字眼// 手动设置过期时间, 单位都是秒$validtime = 48* 60 * 60; // 48 小时// 缓存相对请求的时间,header('Cache-Control:' . 'max-age='. $validtime);// 也很重要的 Expires 头, 功能类似于 max-age//time()+$validtime: 设置期限, 到期后才会向服务器提交请求//gmdate, 生成 Sun, 01 Mar 2009 04:05:49 +0000 的字符串, 而且是 GMT 标准时区//preg_replace, 生成 Sun, 01 Mar 2009 04:05:49 GMT, 注意: 可能与服务器设置有关,// 但我都用默认设置header('Expires:'. preg_replace('/.{5}$/', 'GMT', gmdate('r', time()+ $validtime)));// 文件最后修改时间$lasttime = filemtime($fullpath);// 最后修改时间, 设置了, 点击刷新时, 浏览器再次请求图片才会发出'IF_MODIFIED_SINCE'头,// 从而被 php 程序读取header('Last-Modified:' . preg_replace('/.{5}$/', 'GMT', gmdate('r', $lasttime) ));// 重要, 如果请求中的时间和 文件生成时间戳相等, 则文件未修改, 客户端可用缓存if (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $lasttime) {header("HTTP/1.1 304 Not Modified"); // 服务器发出文件不曾修改的指令exit();}// 如果文件被修改了, 只好重新发出数据echo file_get_contents($fullpath);
php 浏览器缓存 图片_PHP 设置图片浏览器缓存方法介绍
最新推荐文章于 2021-03-27 13:54:00 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)