首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >发送带有服务器缓存文件的头文件

发送带有服务器缓存文件的头文件
EN

Stack Overflow用户
提问于 2013-06-05 04:05:19
回答 1查看 474关注 0票数 1

以下脚本将:

  1. 如果文件的客户端缓存版本是当前的,则返回304未修改的标头。
  2. 如果不是,那么它将返回一个服务器缓存版本的文件,如果它是当前的。
  3. 否则,它将创建文件,将副本存储在服务器端缓存中,并返回该文件。

我的问题是步骤2:返回服务器缓存的文件版本。在创建原始文件的位置上,我还发送了一些标头,以指示返回文件的类型,并允许客户端缓存该文件。当返回文件的服务器缓存版本时,如何发送相同的头?

与主题无关,与这个问题无关,但是任何关于我如何命名缓存文件的评论都将不胜感激。$cachefile = $root.'/ayb_cache/'.preg_replace("/[^A-Za-z0-9 ]/", '', basename($_SERVER['REQUEST_URI']));

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
date_default_timezone_set('UTC');
$root=dirname(dirname(dirname(dirname(__FILE__))));
$filetime=filemtime(__FILE__);
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $filetime))
{
    header('Last-Modified: '.gmdate('D, d M Y H:i:s', $filetime).' GMT', true, 304);
}
else
{
    //Not yet cached on client

    $cachefile = $root.'/ayb_cache/'.preg_replace("/[^A-Za-z0-9 ]/", '', basename($_SERVER['REQUEST_URI']));
    $cachetime=60*60*24*14;

    if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile)))
    {
        // Serve from the cache if it is younger than $cachetime
        include($cachefile);
        //echo "<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))." -->";
        echo "/* Cached ".date('jS F Y H:i', filemtime($cachefile))." */";
    }

    else
    {
        //create new file
        ob_start();

        header( 'Content-type: text/javascript' ); //tell the browser we're returning JS
        header('Pragma: public');
        header('Cache-Control: public, maxage='.$cachetime);
        header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cachetime) . ' GMT');
        header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime(__FILE__)).' GMT', true, 200);

        echo('alert("My Javascript");');

        $fp = fopen($cachefile, 'w'); // open the cache file for writing
        fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file
        fclose($fp);
        ob_end_flush(); // Send the output to the browser
    }
}
?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-05 04:09:31

在下面的代码中,包括header();语句之前的include($cachefile)调用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile)))
{
    // Serve from the cache if it is younger than $cachetime
    include($cachefile);
    //echo "<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))." -->";
    echo "/* Cached ".date('jS F Y H:i', filemtime($cachefile))." */";
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16939498

复制
相关文章
UIViewController初始化没有 init 导致的 Bug
话说 *** Assertion failure in UITraitCollection * _Nonnull _UIGetCurrentFallbackTraitCollection(void)(), /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore_Sim/UIKit-3899.13.13/_UIFallbackEnvironment.m:91
韦弦zhy
2019/11/11
2.7K0
UIViewController present UIViewController 的问题
今天写了个demo才发现,当尝试在函数: func application(_ application: UIApplication, didFinishLaunchingWithOptions la
SheltonWan
2019/07/05
1.1K0
iOS架构设计:揭秘MVC, MVP, MVVM以及VIPER
你将了解到在iOS环境下如何进行系统架构设计。我们将简单回顾一些流行的框架,并通过实践一些小例子来比较它们的理论。
iOSSir
2023/03/19
1.4K0
iOS架构设计:揭秘MVC, MVP, MVVM以及VIPER
寻找协调器FindCoordinatorRequest请求流程
我们在分析消费者的时候, 有看到调用FindCoordinatorRequest的请求
石臻臻的杂货铺[同名公众号]
2022/09/28
3030
寻找协调器FindCoordinatorRequest请求流程
Kafka 核心组件之协调器
假设某 topic 有4个分区,消费者组中只有一个消费者,那么这个消费者将消费全部 partition 中的数据。
CoderJed
2018/09/13
3.1K0
Kafka 核心组件之协调器
android定时器取消,Android定时器崩溃取消
我有一个定时器运行,然后熄灭,并做了一些事情,定时器启动罚款。Android定时器崩溃取消
全栈程序员站长
2022/09/15
1.2K0
聊聊iOS中的 MVC、MVP、MVVM以及 VIPER等代码组织方式
但是现实中我们的View依然跟Model耦合,因为如果完全按照这个理想化的MVC的话,View(cell)层的设置都应该在 Controller中,这样的话,Controller会更臃肿。
進无尽
2018/09/12
4.3K0
聊聊iOS中的 MVC、MVP、MVVM以及 VIPER等代码组织方式
UIViewController生命周期
UIViewController采用懒加载的方式,也就是说第一次访问到view属性时才会加载或创建它。由于视图由视图控制器管理,所以讨论视图的加载方式时,主要讨论视图控制器的加载方式。
Helloted
2022/06/06
2K0
UIViewController生命周期
iOS 转场动画探究(二)
这篇文章是接着第一篇写的,要是有同行刚看到的话建议从前面第一篇看,这是第一篇的地址:iOS 转场动画探究(一) 接着上一篇写的内容:        上一篇iOS 转场动画探究(一)我们说到了转场要素的第四点,把那个小实例解释完,这篇还有一点我们接着总结:        Demo的下载地址这里再发一次: 这里是Demo的下载地址 5、  转场协调器协议 UIViewControllerTransitionCoordinator        可以通过需要产生动画效果的视图控制器的transitionCoord
Mr.RisingSun
2018/01/15
1.4K0
iOS 转场动画探究(二)
[干货分享]一篇可能会让你爱上MVVM与ReactiveCocoa的文章
ios122
2018/01/02
1.3K0
iOS 转场动画探究(二)
这篇文章是接着第一篇写的,要是有同行刚看到的话建议从前面第一篇看,这是第一篇的地址:iOS 转场动画探究(一)
Mr.RisingSun
2018/07/31
8680
iOS 转场动画探究(二)
iOS14开发-UIViewController
UIViewController 可以理解为 App 的界面,负责管理 UIView 中显示的内容和用户的交互,主要有以下作用:
YungFan
2021/03/02
2.4K0
【iOS】UIViewController生命周期
2》假设view在内存中,则直接载入。相反,假设不存在。则UIViewController调用loadView方法。
全栈程序员站长
2022/07/06
8040
【iOS】UIViewController生命周期
iOS NSString类型转UIViewController
NSString * path = [[NSBundle mainBundle] pathForResource:@"ViewControllers" ofType:@"plist"];
用户9758184
2022/05/18
4900
UIViewController生命周期分析
做一个实验,通过实验来分析viewController的生命周期。 和生命周期几个相关的方法 - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"FirstVC viewDidLoad"); } -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear]; NSLog(@"FirstVC viewWillAppear"); } - (void)didRe
xferris
2018/06/01
7960
tensorflow中协调器 tf.train.Coordinator
TensorFlow的Session对象是支持多线程的,可以在同一个会话(Session)中创建多个线程,并行执行。在Session中的所有线程都必须能被同步终止,异常必须能被正确捕获并报告,会话终止的时候, 队列必须能被正确地关闭。TensorFlow提供了两个类来实现对Session中多线程的管理:tf.Coordinator和 tf.QueueRunner,这两个类往往一起使用。
狼啸风云
2019/07/02
1.3K0
tensorflow中协调器 tf.train.Coordinator
iOS17适配指南之UIViewController
YungFan
2023/07/09
9040
iOS17适配指南之UIViewController
VCTransitionsLibrary –自定义iOS交互式转场动画的库
本文介绍了一种用于iOS的交互式转场实现方案,通过使用UIKit Dynamics和UIKit Layout实现自定义转场效果。具体实现包括两个部分:一是交互式转场动画的实现,通过CGAffineTransformAnimation结合UIView.animateWithDuration()方法实现;二是交互式转场交互的实现,通过监听UIViewControllerTransitionCoordinator方法实现。该方案适用于界面之间的复杂转场交互场景,可以自定义转场动画和交互逻辑,实现更加顺滑、自然的界面转场效果。
ios122
2018/01/02
1.6K0
UIViewController声明周期-iOS11新增UIViewController声明周期-iOS11新增
class subViewController: UIViewController { //nib文件的初始化 override init(nibName nibNameOr
用户8893176
2021/08/09
6770
点击加载更多

相似问题

MVVM协调器和弹出UIViewController

30

UIViewController未取消初始化

10

如果协调器不在RxSwift中,那么在RxSwift + MVVM +协调器的情况下,协调器会去哪里?

35

UIViewController与UIView之间的协调

21

从堆栈中弹出时,不会取消分配ARC UIViewController

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文