Notice: Undefined variable: data in XX ecshop的屏蔽静态缓存解决方法

2016-07-07 14:55 来源:www.chinab4c.com 作者:ecshop专家

在网上找到了解决方法!但是不知道怎么使用,有高手路过,指教一下!
------------------------------------------
今天接到主管一个任务,一直以来在IIS服务器上,系统是server 2003的,ecshop的网站经常会出Notice: Undefined variable: data in XXX linexxx,failed to open stream: No such file or directory :.......Warning: require(../../languages//common.php),Fatal error: require():.......尤其是有这样的标志:/languages//common.php,..注意前面的两个/,这表明没有写入,刚开始公司里一直用的是网上的办法,删除根目录下的“temp/static_caches/ ” 里面的文件,保留index.htm,而且我们的人也把temp文件夹的权限改成777,但是好景不长,隔一段时间之后,当temp文件夹下的文件到达一定程度后,当然我也不知道这个程度是以什么为标准的。文件夹的权限被自动恢复,又出现如上的错误还得手工去改它,于是主管下定决心要把这个问题从根本上解决掉。

经过一个上午的查询资料,我发现了别人忽略的一个地方,在includes文件下有一个叫lib_base.php的文件,里面存着这样的两个函数

函数一:
read_static_cache()

  1. /**
  2. * 读结果缓存文件
  3. *
  4. * @params string $cache_name
  5. *
  6. * @return array $data
  7. */
  8. function read_static_cache($cache_name)
  9. {
  10. if ((DEBUG_MODE & 2) == 2)
  11. {
  12. return false;
  13. }
  14. static $result = array();
  15. if (!empty($result[$cache_name]))
  16. {
  17. return $result[$cache_name];
  18. }
  19. $cache_file_path = ROOT_PATH . '/temp/static_caches/' . $cache_name . '.php';
  20. if (file_exists($cache_file_path))
  21. {
  22. include_once($cache_file_path);
  23. $result[$cache_name] = $data;
  24. return $result[$cache_name];
  25. }
  26. else
  27. {
  28. return false;
  29. }
  30. }
复制代码

另一个函数
write_static_cache()

  1. /**
  2. * 写结果缓存文件
  3. *
  4. * @params string $cache_name
  5. * @params string $caches
  6. *
  7. * @return
  8. */
  9. function write_static_cache($cache_name, $caches)
  10. {
  11. if ((DEBUG_MODE & 2) == 2)
  12. {
  13. return false;
  14. }
  15. $cache_file_path = ROOT_PATH . '/temp/static_caches/' . $cache_name . '.php';
  16. $content = "<?php\r\n";
  17. $content .= "\$data = " . var_export($caches, true) . ";\r\n";
  18. $content .= "?>";
  19. file_put_contents($cache_file_path, $content, LOCK_EX);
  20. }
复制代码

这两个函数就是控制读出和写入缓存的,在各个页面中都有被用到。而从上面的错误信息分析来看,只有不让它写入到temp文件夹下就能解决问题,也就是缓存的屏蔽,将这两个函数,在第一个 if前面加上

  1. return false;
复制代码

直接屏蔽掉功能,这样改过之后,(测试之前应该删除原有的除index.htm以外的文件,然后通过反复访问进行测试缓存的写入)我测试了一下,temp/static_caches/文件夹下不再写入缓存文件了,只保留有index.htm,也就是不会再出现刚开始的那种错误了,因为写入和读出都被屏蔽了。最直接是页面的错误消失了,网站恢复了正常,让人感到欣慰。

缓存的屏蔽,网上通用都是那个cls_template.php文件下的两行代码的注释,

  1. 01.if (file_put_contents($this->cache_dir . ‘/’ . $cachename . ‘.php’, ‘<?php exit;?>’ . $data . $out) === false) 02. { 03. trigger_error(’can\’t write:’ . $this->cache_dir . ‘/’ . $cachename . ‘.php’); 04. }
复制代码
--------------------------------------------

我想知道的是第一种如何在第一个 if前面加上
  1. return false;
复制代码


求高手指导!

回答:
没有人出现这种问题吗?

没有人出现这种问题?为什么我的站点最近老出现这样的问题

不知道 内容太多,没发看完,帮你顶一个。。。。。。。。。。

把 error_reporting 的 E_NOTICE 去掉就好,其实没什么影响

在文件头部加一个error_reporting(0);即可。

先收藏着

收藏起来在看

这样改的话,网站数据量大的话,严重影响网站打开的速度

最好别这样修改