PHP读写问题,急啊。。在线等。
时间:2011-09-20
来源:互联网
我的思路是这样的,
首先去读取缓存文件。如果没有缓存则直接返回true,然后写缓存文件。
如果有缓存再去判断缓存里是否有该帐号,如果没有返回true,改写缓存文件,将该帐号跟时间加入缓存文件
如果缓存有该帐号,再去判断该帐号的时间是否超过预定时间,超过返回true,将缓存文件中该帐号时间改写。
如果没超过返回false。缓存不变。
缓存文件格式是这样的。。每行帐号+制表符+时间+换行
帐号1\t时间\n
以下是代码:
PHP code
function is_send_codes($code) { $flag = false; $cache_path = "./codelist.txt"; //缓存文件 $list = explode("\n", file_get_contents($cache_path)); date_default_timezone_set('Asia/Chongqing'); //系统时间差8小时问题 $now = getdate(time()); $cur_wday=$now['wday']; $date = date("Y-m-d H:i:s $cweekday[$cur_wday]"); [color=#FF0000]var_dump($list); //第一次的时候由于缓存文件不存在,按道理这里$list应该是空值应该跳转到步骤1,问题就在这里[/color] if(empty($list)) //步骤1 { $flag = true; file_put_contents($cache_path, $code."\t".$date."\n"); }else{ //步骤2 @unlink($cache_path); //删除缓存 foreach($list as $tmp) { $scode = explode("\t",$tmp); if (empty($scode)) continue; echo "scode is ".$scode[0]."\t".$scode[1]." ...\n"; if($code == $scode[0]) { echo "code is same ...\n"; if((strtotime($date)-strtotime($scode[1]))>18000 ) // 取帐号时间进行比较 { $flag = true ; $scode[1] = $date; //改写该帐号当前活动时间 } }else{ file_put_contents($cache_path, $scode[0]."\t".$scode[1]."\n"); $flag = true; } if(!empty($scode)) { file_put_contents($cache_path, $scode[0]."\t".$scode[1]."\n",FILE_APPEND); //改写缓存 } } } return $flag; } if(@is_send_codes("[email protected]")) echo "send to ...";
写完根本实现不了。找了一下午也不知道该怎么弄,求高手帮忙,指点一二,谢谢。
作者: sunyyang 发布时间: 2011-09-20
作者: php_json 发布时间: 2011-09-20
作者: kenan0304 发布时间: 2011-09-20
作者: sunyyang 发布时间: 2011-09-20
这位兄弟,你可以用memcached啊,memcached有自动过期功能,有动作的时候就设置一下动作key,同时把过期设置成5个小时。至于其他判断就很简单了
这个是内存对象缓存的吧?我那个程序是每隔5分钟启动一次。这样的话程序结束内存对象也应该没有了吧?所以我想写在硬盘上。新手不太明白,愿闻其详。
作者: sunyyang 发布时间: 2011-09-20
说简单点,其实就是判断下缓存文件里有没有这个号码,号码时间有没有超过限制。 没有这个号就把他写回缓存去,有的话再看时间有没超时,超过了就改写时间
这个方法太复式啊。
内存对象缓存只要你不重启机器就行了啊。一般不会重启机器嘛,如果你的检查不涉及到金钱的问题可以用这个。硬是丢了就丢了呗。
作者: php_json 发布时间: 2011-09-20
引用 3 楼 sunyyang 的回复:
说简单点,其实就是判断下缓存文件里有没有这个号码,号码时间有没有超过限制。 没有这个号就把他写回缓存去,有的话再看时间有没超时,超过了就改写时间
这个方法太复式啊。
内存对象缓存只要你不重启机器就行了啊。一般不会重启机器嘛,如果你的检查不涉及到金钱的问题可以用这个。硬是丢了就丢了呗。
有个例子吗?
作者: sunyyang 发布时间: 2011-09-20
引用 3 楼 sunyyang 的回复:
说简单点,其实就是判断下缓存文件里有没有这个号码,号码时间有没有超过限制。 没有这个号就把他写回缓存去,有的话再看时间有没超时,超过了就改写时间
这个方法太复式啊。
内存对象缓存只要你不重启机器就行了啊。一般不会重启机器嘛,如果你的检查不涉及到金钱的问题可以用这个。硬是丢了就丢了呗。
Fatal error: Class 'MemCachedClient' not found
还要给Php装扩展吗?这个我没办法改啊。。。
作者: sunyyang 发布时间: 2011-09-20
作者: php_json 发布时间: 2011-09-20
作者: php_json 发布时间: 2011-09-20
新手吧,直接存储时间戳就可以了哦,为啥要转换为时间格式呢
泪奔啊。。求指教。
作者: sunyyang 发布时间: 2011-09-20
作者: php_json 发布时间: 2011-09-20
作者: php_json 发布时间: 2011-09-20
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28