帝国cms动态模式下,千万级文章定时发布,无需人工干预的方法完整版代码代码
时间:2023年12月16日
/来源:网络
/编辑:佚名
之前研究帝国cms的审核功能,不知道什么原因,火车头发布文章到帝国cms,设置是未审核,但是不一会又自动审核了,总之麻烦!
为了避免过多的浪费时间,于是就没有去仔细研究!
最近又需要用到审核功能,这下就头疼了!
上千万文章,火车头发布,发布到待审核很麻烦!
于是我研究一番,采用了另外一种思路!
我不用待审核功能,但是却能实现网站每天显示最新文章!
思路解析
1.帝国cms的模版,我们在生成标签的时候,设置一下发布时间!
我们从发布时间下手,发布时间小于当前时间,那么就调用。
比如我设置一篇文章发布时间是明天,那么标签就不调用这篇文章,需要到明天指定时间才调用!
附加SQL条件:newstime <= '.time().'
如果不想每次都加上SQL条件,可以参考这篇文章:《帝国cms修改PHP,直接设置小于文章发布时间(newstime)的文章调用条件》
2.利用PHP修改帝国数据表里面的发布时间,为了上千万文章全部能设置完时间,我写了两个PHP!
第一个PHP负责读取整表的文章,同时生成好发布时间。
第二个PHP负责将设置数据库里面文章的定时发布时间,每次修改100个!
这样可以很有效率的完成时间的设定,并且不会给服务器造成大负担。
第一个PHP代码
本文隐藏内容
<?php
require('e/class/connect.php'); //引入数据库配置文件和公共函数文件
require('e/class/db_sql.php'); //引入数据库操作文件
$link=db_connect(); //连接MYSQL
$empire=new mysqlquery(); //声明数据库操作类
$sql=$empire->query("select id,title from {$dbtbpre}ecms_news"); //查询新闻表最新10条记录
$num = 10;
$i = 1;
$n = 1;
$s = 1;
$newstime = strtotime("2023-8-21 6:20:30");
while($r=$empire->fetch($sql)) //循环获取查询记录
{
$br = '';
$time = $num;
if($num==1){
if($s==0){
$s = 1;
$n++;
}
$num = 10 + $n;
$br = "<hr style='color:red'>";
$s--;
$newstime+=86400;
}
echo"{$i}标题:".$r['title']."-----{$time}---{$newstime}---".date("Y-m-d H:i:s",$newstime)."<br>{$br}";
// echo"{$i}--".$r['id']."--{$time}|{$br}";
// echo $sqlUp = "UPDATE `phome_ecms_news` SET `newstime` = '{$newstime}' WHERE `id` = {$r['id']};";
$array[] = array($r['id'],$newstime);
$empire->query1($sqlUp);
$i++;
$num--;
}
file_put_contents("定时发布.json", json_encode($array));
db_close(); //关闭MYSQL链接
$empire=null; //注消操作类变量
?>
第二个PHP代码
本文隐藏内容
<?
$jsonFile = "定时发布.json";
$array = json_decode(file_get_contents($jsonFile),true);
if(empty($array)){
die("已发布完成");
}
function getSequentialElements(&$array, $quantity) {
// 检查数组长度和需求数量
$arrayLength = count($array);
if ($arrayLength <= $quantity) {
$result = $array;
$array = array_slice($array, $arrayLength);
return $result; // 数组长度小于或等于需求数量,直接返回整个数组
}
// 从原数组中顺序取出指定数量的元素,并将其从原数组中删除
$result = array_slice($array, 0, $quantity);
$array = array_slice($array, $quantity);
return $result;
}
$randomElements = getSequentialElements($array, 100);
require('e/class/connect.php'); //引入数据库配置文件和公共函数文件
require('e/class/db_sql.php'); //引入数据库操作文件
$link=db_connect(); //连接MYSQL
$empire=new mysqlquery(); //声明数据库操作类
$n=1;
foreach($randomElements as $v){
$sql = "UPDATE `phome_ecms_news` SET `newstime` = '{$v[1]}' WHERE `id` = {$v[0]};";
if($empire->query($sql)){
echo "{$n}成功设置定时发布,文章ID:$v[0],发布时间:".date("Y-m-d H:i:s",$v[1])."<br>";
$n++;
}
}
file_put_contents($jsonFile,json_encode($array));
db_close(); //关闭MYSQL链接
$empire=null; //注消操作类变量
?>
<meta http-equiv="refresh" content="0;">
为了避免过多的浪费时间,于是就没有去仔细研究!
最近又需要用到审核功能,这下就头疼了!
上千万文章,火车头发布,发布到待审核很麻烦!
于是我研究一番,采用了另外一种思路!
我不用待审核功能,但是却能实现网站每天显示最新文章!
思路解析
1.帝国cms的模版,我们在生成标签的时候,设置一下发布时间!
我们从发布时间下手,发布时间小于当前时间,那么就调用。
比如我设置一篇文章发布时间是明天,那么标签就不调用这篇文章,需要到明天指定时间才调用!
附加SQL条件:newstime <= '.time().'
如果不想每次都加上SQL条件,可以参考这篇文章:《帝国cms修改PHP,直接设置小于文章发布时间(newstime)的文章调用条件》
2.利用PHP修改帝国数据表里面的发布时间,为了上千万文章全部能设置完时间,我写了两个PHP!
第一个PHP负责读取整表的文章,同时生成好发布时间。
第二个PHP负责将设置数据库里面文章的定时发布时间,每次修改100个!
这样可以很有效率的完成时间的设定,并且不会给服务器造成大负担。
第一个PHP代码
本文隐藏内容
<?php
require('e/class/connect.php'); //引入数据库配置文件和公共函数文件
require('e/class/db_sql.php'); //引入数据库操作文件
$link=db_connect(); //连接MYSQL
$empire=new mysqlquery(); //声明数据库操作类
$sql=$empire->query("select id,title from {$dbtbpre}ecms_news"); //查询新闻表最新10条记录
$num = 10;
$i = 1;
$n = 1;
$s = 1;
$newstime = strtotime("2023-8-21 6:20:30");
while($r=$empire->fetch($sql)) //循环获取查询记录
{
$br = '';
$time = $num;
if($num==1){
if($s==0){
$s = 1;
$n++;
}
$num = 10 + $n;
$br = "<hr style='color:red'>";
$s--;
$newstime+=86400;
}
echo"{$i}标题:".$r['title']."-----{$time}---{$newstime}---".date("Y-m-d H:i:s",$newstime)."<br>{$br}";
// echo"{$i}--".$r['id']."--{$time}|{$br}";
// echo $sqlUp = "UPDATE `phome_ecms_news` SET `newstime` = '{$newstime}' WHERE `id` = {$r['id']};";
$array[] = array($r['id'],$newstime);
$empire->query1($sqlUp);
$i++;
$num--;
}
file_put_contents("定时发布.json", json_encode($array));
db_close(); //关闭MYSQL链接
$empire=null; //注消操作类变量
?>
第二个PHP代码
本文隐藏内容
<?
$jsonFile = "定时发布.json";
$array = json_decode(file_get_contents($jsonFile),true);
if(empty($array)){
die("已发布完成");
}
function getSequentialElements(&$array, $quantity) {
// 检查数组长度和需求数量
$arrayLength = count($array);
if ($arrayLength <= $quantity) {
$result = $array;
$array = array_slice($array, $arrayLength);
return $result; // 数组长度小于或等于需求数量,直接返回整个数组
}
// 从原数组中顺序取出指定数量的元素,并将其从原数组中删除
$result = array_slice($array, 0, $quantity);
$array = array_slice($array, $quantity);
return $result;
}
$randomElements = getSequentialElements($array, 100);
require('e/class/connect.php'); //引入数据库配置文件和公共函数文件
require('e/class/db_sql.php'); //引入数据库操作文件
$link=db_connect(); //连接MYSQL
$empire=new mysqlquery(); //声明数据库操作类
$n=1;
foreach($randomElements as $v){
$sql = "UPDATE `phome_ecms_news` SET `newstime` = '{$v[1]}' WHERE `id` = {$v[0]};";
if($empire->query($sql)){
echo "{$n}成功设置定时发布,文章ID:$v[0],发布时间:".date("Y-m-d H:i:s",$v[1])."<br>";
$n++;
}
}
file_put_contents($jsonFile,json_encode($array));
db_close(); //关闭MYSQL链接
$empire=null; //注消操作类变量
?>
<meta http-equiv="refresh" content="0;">
新闻资讯 更多
- 【帝国cms教程】帝国CMS模板变量$GLOBALS[navclassid]用法分析04-03
- 【帝国cms教程】鲜为人知帝国CMS内容页调用上一篇和下一篇的精华方法汇总04-03
- 【帝国cms教程】怎么快速找出帝国CMS数据库配置文件路径及迁移网站后修改技巧!04-03
- 【帝国cms教程】帝国CMS模板$GLOBALS[navclassid]用法详解04-03
- 【帝国cms教程】帝国cms 7.5版列表页分页样式修改笔记04-02
- 【帝国cms教程】解决帝国CMS搜索页面模板不支持灵动标签和万能标签的方法04-02
- 【帝国cms教程】帝国CMS只备份栏目和模板的方法04-02
- 【帝国cms教程】帝国CMS怎样删除清空数据库记录?04-02
热门文章
- 178Moban源码谈谈免费源码与收费源码的区别
- 2帝国CMS忘记后台登陆用户名、密码、认证码的解决方法
- 3帝国CMS(EmpireCMS) v7.5后台任意代码执行漏洞及具体修复方法
- 4帝国CMS和WordPress 哪个好?哪个适合建站?
- 5如何解决Discuz的密码错误次数过多请15分钟后登陆的问题
- 6帝国cms灵动标签取得内容和栏目链接地址
- 7emlog pro 注册码“开心”教程(如果有一天,emlog官方版 或者 emlog免费版 跑路了,那用户怎么办?)
- 8织梦CMS在nginx下设置伪静态方法(附nginx伪静态规则)
- 9帝国cms后台登录出现”您还未登录”怎么解决?
- 10帝国cms7.5忘记登录密码 和忘记登录认证码以及多次登录 失败被锁定解决办法