• 原森林之家(foresthouse.cn)改为走私范(zousifan.com),只是改个名内容不变。
  • 网站图片自建立开始到19年全部丢失,血的教训时刻备份,多点备份!

php防卡顿前台自动更新代码

开发建站 4年前 (2019-12-06) 227次浏览 0个评论 扫描二维码
本文最后更新于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”代码参考这篇文章织梦网站地图定时更新

版权所有丨如未注明 , 均为原创丨本网站采用 BY-NC-SA 协议进行授权 , 转载请注明 出处!
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
    仅用来给您发送回复提醒。不会公开!
  • 网址