今天接到主管一个任务,一直以来在IIS服务器上,系统是server 2003的,ecshop的网站经常会出Notice: Undefined variable: data in XXX line xxx,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()
- /**
- * 读结果缓存文件
- *
- * @params string $cache_name
- *
- * @return array $data
- */
- function read_static_cache($cache_name)
- {
- if ((DEBUG_MODE & 2) == 2)
- {
- return false;
- }
- static $result = array();
- if (!emptyempty($result[$cache_name]))
- {
- return $result[$cache_name];
- }
- $cache_file_path = ROOT_PATH . '/temp/static_caches/' . $cache_name . '.php';
- if (file_exists($cache_file_path))
- {
- include_once($cache_file_path);
- $result[$cache_name] = $data;
- return $result[$cache_name];
- }
- else
- {
- return false;
- }
- }
另一个函数
write_static_cache()
- /**
- * 写结果缓存文件
- *
- * @params string $cache_name
- * @params string $caches
- *
- * @return
- */
- function write_static_cache($cache_name, $caches)
- {
- if ((DEBUG_MODE & 2) == 2)
- {
- return false;
- }
- $cache_file_path = ROOT_PATH . '/temp/static_caches/' . $cache_name . '.php';
- $content = "<?php\r\n";
- $content .= "\$data = " . var_export($caches, true) . ";\r\n";
- $content .= "?>";
- file_put_contents($cache_file_path, $content, LOCK_EX);
- }
这两个函数就是控制读出和写入缓存的,在各个页面中都有被用到。而从上面的错误信息分析来看,只有不让它写入到temp文件夹下就能解决问题,也就是缓存的屏蔽,将这两个函数,在第一个 if 前面加上
- return false;
直接屏蔽掉功能,这样改过之后,(测试之前应该删除原有的除index.htm以外的文件,然后通过反复访问进行测试缓存的写入)我测试了一下,temp/static_caches/文件夹下不再写入缓存文件了,只保留有index.htm,也就是不会再出现刚开始的那种错误了,因为写入和读出都被屏蔽了。最直接是页面的错误消失了,网站恢复了正常,让人感到欣慰。
缓存的屏蔽,网上通用都是那个cls_template.php文件下的两行代码的注释,
- if (file_put_contents($this->cache_dir . ‘/’ . $cachename . ‘.php’, ‘<?php exit;?>’ . $data . $out) === false)
- {
- trigger_error(’can\’t write:’ . $this->cache_dir . ‘/’ . $cachename . ‘.php’);
- }
我试过了,没效果。。。也许别人有效吧,欢迎一起探讨。 详细内容可来我的博客一起探讨 没有船的海贼 www.hanluner.com
转载于:https://blog.51cto.com/hanluner03/419373