http://topic.csdn.net/T/20050522/18/4026820.html我原来也遇到过,解决办法就是设置$compile_id 

解决方案 »

  1.   

    我就说嘛,都说smarty好。但凡是遇到smarty的问题,就没有人解答了。我不用smarty,给点参考意见:
    smarty中是用filemtime函数判断模板和编译文件的修改时间的,这通常没有问题
    可能在你的环境中这个函数未能返回正确的值。请确认一下
      

  2.   

    谢谢iasky,设了$compile_id后,果然可以编译了,但是这需要每次要重新编译的时候,都重新设一个不同的$compile_id,而且每次编译都会生成新的文件,而旧文件并不自动删除。这个方法可以缓解问题,但是应该还有更彻底的解决办法的吧。上面说的时间函数的问题,等回头有空试试。
      

  3.   

    谁说没人答,俺这不来了。^o^php中取得文件修改时间的函数返回的结果是会被系统缓存的。
    找到smarty相应代码,在filectime()之前加入clearstatcache()清除系统缓存就可以了。没有哪个软件是没有问题的。smarty也不例外。smarty还是向前发展的嘛,要不等新版,要不自己动手解决。smarty是开源的,碰上问题自己改一下源码就解决了。
      

  4.   

    用compile_id来实现是绝对不正确的。因为你每更新一次compile_id,就会生成一个新的编译文件。而以前的旧文件并不会自动删除!事实上,只有你极短时间内连续更新同一文件才会发现你所说的不会重新编译(修改时间被缓存)。一般人不会为了这种问题去清除文件缓存,因为这会造成每次访问此文件都多了一次磁盘访问。不过你为了这个都达到了受不了要放弃smarty的地步了,估计你每天都需要修改同一个文件上百次吧。那就把源代码按我说的改了一劳永逸,反正也就每次点击多花十万分之x秒左右而已。
      

  5.   

    compile_id可以设置成模版名字,这样不会有多少的“垃圾”的了
      

  6.   

    看看你$compile_check是否设置为true。
      

  7.   

    ----"找到smarty相应代码,在filectime()之前加入clearstatcache()清除系统缓存就可以了。"谢谢提示,我试过了,但是没效果,smarty里判断文件修改时间的函数是filemtime(),clearstatcache()后没有任何变化,甚至我将smarty里判断页面是否已编译的函数_is_compiled()强制返回false,问题依然如故。我调试自己程序的代码都很头疼了,实在没多少心思再来调试smarty了。
      

  8.   

    _is_compiled()强制返回false问题依然的话那就只有一种可能了。你上传文件时把本地的编译文件也一起传上去了。要知道一般的服务器ftp用户权限和web用户权限是分开的。你传上去的文件php无权修改。你要先将已传上去的编译文件全删了,然后将编译目录的可写权限打开,必然恢复正常。good lucky
      

  9.   

    在smarty 文件中直接让这个_is_compiled($resource_name, $compile_path) 返回false保管用!!!
      

  10.   

    看看你$compile_check是否设置为true。
     还有smart按y有权限修改temp_c的模板文件嘛?我经常把编译文件一起移动到linux服务器上,但是没办法修改编译文件,所以造成修改不了.
      

  11.   

    force_compile设为true就可以解决了。强制每次刷新编译。