php discuz的定时任务是什么原理怎么实现的?求高手解答

php discuz的定时任务是什么原理怎么实现的?求高手解答,第1张

php中定时计划任务的实现原理:

当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限时,TIMEOUT 状态的标记将被打开。

示例代码:

<php

ignore_user_abort(true);set_time_limit(0);

date_default_timezone_set('PRC'); // 切换到中国的时间

$run_time = strtotime('+1 day'); // 定时任务第一次执行的时间是明天的这个时候

$interval = 360012; // 每12个小时执行一次

if(!file_exists(dirname(__FILE__)'/cron-run')) exit(); // 在目录下存放一个cron-run文件,如果这个文件不存在,说明已经在执行过程中了,该任务就不能再激活,执行第二次,否则这个文件被多次访问的话,服务器就要崩溃掉了

do {

if(!file_exists(dirname(__FILE__)'/cron-switch')) break; // 如果不存在cron-switch这个文件,就停止执行,这是一个开关的作用

$gmt_time = microtime(true); // 当前的运行时间,精确到00001秒

$loop = isset($loop) && $loop $loop : $run_time - $gmt_time; // 这里处理是为了确定还要等多久才开始第一次执行任务,$loop就是要等多久才执行的时间间隔

$loop = $loop > 0 $loop : 0;

if(!$loop) break; // 如果循环的间隔为零,则停止

sleep($loop);

//

// 执行某些代码

//

@unlink(dirname(__FILE__)'/cron-run'); // 这里就是通过删除cron-run来告诉程序,这个定时任务已经在执行过程中,不能再执行一个新的同样的任务

$loop = $interval;

} while(true);

不可以,不过你可以通过修改源代码实现:如帖子数据,修改:source\class\block\forum\block_threadphp在function fields()返回的数组中增加返回数据的数据类型配置,在getdata函数中查询出帖子的所有,并存储在$list['fields']中,键要与fields中你指定的键匹配,确认代码无误后到后台更新(工具---更新缓存选上最后一个,叫什么忘了),然后添加数据调用,即可通过{fields中新增的键名调用相应的}

用这个可以衍生很多种方法,你自己思考咯

discuz的官方默认是有了帖子列表瀑布流的这个功能的,不需要添加插件,discuz自身就可以实现了,discuz是越来越强大了。但是强大的同时,很多功能隐藏的比较深,对于新手来说,很多都不会用。经常遇到一些朋友不知道如何设置瀑布流。下面我一步一步教给大家

登录自己网站的后台。首先访问http://你的域名/adminphp用管理员账号直接登录自己discuz网站的后台

登录后台后,在网站的后台找到 界面 按钮,下的界面设置,点击主题列表页按钮,出现设置界面,首先一般将“左侧版块导航宽度”设置为0

往下拉,在主题封面宽度的设置里我们一般设置为 208,你也可以自己修改成其他的,主题封面高度设置一般为 9999

在网站后台 找到[论坛]栏目下面的[版块管理]按钮,选择编辑自己想要开启瀑布流的那个版块,在该模块的 [扩展设置] 里 开启列表模式。

很多时候,我们设置的瀑布流的模块已经有帖子了,怎么办呢?别急我们可以重建主题封面实现: 在后台的[工具]设置栏目下找到[更新统计]按钮,点击[重建主题封面]就可以拉

更新缓存,到相应的模块查看瀑布流效果吧

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » php discuz的定时任务是什么原理怎么实现的?求高手解答

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情