本文最后更新于2022年7月9日,已超过 1 年没有更新,如果文章内容失效,请 反馈 给我们,谢谢!
这是一个项目需求,要在一定访问时间段内自动更新网站的,也就是说如果网页被打开了并且在设定的时间段内就更新,这个代码可以做很多事情不止更新网站,更新个地图啊更新个文章啊啥的。
代码如下:
ini_set('date.timezone','Asia/Shanghai'); $lasttime=filemtime("uptime");//取当前目录中“uptime”文件的创建时间 $interval=5; //更新时间秒为单位秒(7200,2小时) if((time()-$lasttime)>$interval) { fopen("uptime", "w"); //这里可以写程序啦! }
需要注意的是如果服务器的php.ini中没有定义时区的话第一行是要写的,不然会报错,思路就是创建0字节的文件-然后判断创建这个文件的时间到此刻的时间过了多久-如果时间是设置的5秒,那就开始执行下面的代码。有个好处避免了同一时间有N个人打开网站,偏偏需要更新的东东占用很多资源的情况下非常实用。
一个织梦实例代码:
<?php ini_set('date.timezone','Asia/Shanghai'); $lasttime=filemtime("uptime");//取当前目录中“uptime”文件的创建时间 $interval=50; //更新时间秒为单位秒(7200,2小时) if((time()-$lasttime)>$interval) { //快速创建一个时间文件 fopen("uptime", "w"); $newtime=time();//当前时间 //这里可以写程序啦! require_once(dirname(__FILE__)."/../include/common.inc.php"); //查询未审核文章,一次一编 $row = $dsql->GetOne("Select id,title,typeid,arcrank From #@__archives where arcrank=-1 order by id"); //待审核文章数是否为空 if(!is_array($row)){exit();} //更新未审核的文章数据库并且把时间调整(arcrank=-1[待审核状态],arcrank=0[开放浏览];ismake=-1[动态浏览], $ismake = 1 [生成html静态浏览]) $upquery = "Update `#@__archives` set ismake=-1,arcrank =0,sortrank='$newtime',pubdate ='$newtime',senddate='$newtime' where id='$row[id]';"; $upquery1 = "Update `#@__arctiny` set arcrank =0,senddate='$newtime',sortrank='$newtime' where id='$row[id]';"; $rs = $dsql->ExecuteNoneQuery($upquery); $rs1 = $dsql->ExecuteNoneQuery($upquery1); if($rs==''&&$rs1=='') {exit();} //程序结束 } ?>
注意:“uptime”文件一定要给写文件读写执行权限,不然的话不会创建文件,每执行这个php文件就会更新一次,因为当前时间减去创建文件的时间永久大于设定的时间。最简单的解决办法就是创建一个空白的txt文件命名为uptime上传到data目录(注意不要有扩展名,把.txt删除)用ftp给文件设置权限757即可如下图:
把这个PHP文件放到/data/目录下(不一定是data也可以是其它文件夹下但是注意只能是根目录下的一级文件夹下,同时把uptime文件也放在相同目录)
前台调用方法:<script src="/data/update.php"></script>
到现在这项功能已经完成了,那么怎么看我今天都审核了哪些内容呢?需要在后台搞一个可视化程序方便查看。
首先在上面的代码//程序结束换一行粘贴以下代码
$title=$row['title']; $pid=$row['id']; $sql = "INSERT INTO #@__verify (title,pid,utime) VALUES('$title','$pid','$newtime');"; $insql=$dsql->ExecuteNoneQuery($sql);
其次在后台找到“SQL命令行工具”打开它把下面的代码粘贴到SQL命令窗口中点击确定。
CREATE TABLE dede_verify(id int primary key auto_increment,pid int(10) unsigned NOT NULL default '0',title char(90) NOT NULL default '',utime int(10) unsigned NOT NULL default '0')
然后下载下面的压缩包,把里面的一个php文件放到织梦后台目录默认是dede,然后再把htm文件放到织梦后台目录的templets文件夹中。
最后打开织梦后台目录/inc/inc_menu.php找到“常用操作”在下面添加以下代码:
<m:item name='自动审核记录' link='isverify.php' target='main' />
效果如下:
<m:top item='1_' name='常用操作' display='block'> <m:item name='自动审核记录' link='isverify.php' target='main' />
也可以在此代码的基础上做一个延伸,比如随机审核1到10篇,或者是3到5篇。
在“//查询未审核文章,一次一编”换一行写入以下代码:
//循环随机1或10次 $rand = mt_rand(1,10); for ($i=1; $i <= $rand; $i++ ){
在“//审核结束,缓存数据”后面加一个“}”就行了。这样可以更随机更人性化,避免了每天都固定的文章显得很死板很机器。
结尾:既然都审核了文章还需要一个地图,这里可以在审核文章后自动把sitemap地图也顺便更新一下,在//审核结束,缓存数据换行粘贴下面代码:
require_once(dirname(__FILE__)."/../plus/task/generate_sitemap.php");
“generate_sitemap.php”代码参考这篇文章织梦网站地图定时更新