热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP-smarty引起的白屏故障

:本篇文章主要介绍了PHP-smarty引起的白屏故障,对于PHP教程有兴趣的同学可以参考一下。
今天遇到了一个比较大而且棘手的问题——更新了smarty的模板之后,页面白屏了,然而在预发布环境下测试的时候,并没有发现这个情况!最后,找到了原因,竟然是与smarty的模板编译原理有关。

编写一个简单的smarty页面,运行之后查看模板的编译目录,找到对应的编译文件。

decodeProperties(array (
  'file_dependency' => 
  array (
    '177dfb3e2809e44a1ff3a49d04e73219944e3fef' => 
    array (
      0 => 'tpl\\test.htm',
      1 => 1458725943,         #注意到这个值1458725943为2016/3/23 17:39:03
      2 => 'file',
    ),
.........
  'has_nocache_code' => false,
),false); /*/%%SmartyHeaderCode%%*/?>
如果我将这个值调整到未来的时间(2016/3/23 23:16:5),并修改模板文件会发生什么?可以看到即使我们修改了模板,页面也是没有变化的,也就是说,smarty模板并没有重新编译。那么,1458725943这个时间表示什么意思呢?这个时间,是模板文件的修改时间。总结来说,如果你更新的模板文件的修改时间比覆盖前的模板的修改时间要早,那么smarty不会重新编译(开发环境系统时间不正确就会导致这个问题)。

但是,出问题的smarty模板是同一个开发者开发的,而且也能确认新版本的模板文件的修改时间正确,却导致了白屏。后来,也终于查出了原因——由于文件上传过程中,修文件的修改时间为服务器的当前时间,导致了smarty编译了不完整的模板文件,导致了白屏。当模板文件上传完成之后,该文件的修改时间变成真实的修改时间,此时smarty就不会再编译了。

之前上传smarty模板一直没遇到这个问题,但是并发量高的服务器上,问题出现的概率也会提高。

解决方案:

更新模板文件后,需要清空smarty的编译目录。

以上就介绍了PHP-smarty引起的白屏故障,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

推荐阅读
author-avatar
自由风纪战_951
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有