好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>CMS系统>Dedecms
<tfoot draggable='sEl'></tfoot>

php中的timer php中的两种跳转语句以及各自的特点

很多站长朋友们都不太清楚php中的timer,今天小编就来给大家整理php中的timer,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 PHP FPM源代码反刍品味之四:事件处理 2、 PHP怎么制作计时器 3、 PHP+MYSQL 实现队列 进行发送短信怎么做 4、 php格式化时间转换为多少天,小时,分钟,秒前 PHP FPM源代码反刍品味之四:事件处理

FPM master 进程启动后,会进入函数fpm_event_loop,无限循环.

处理事件.

master 进程所做的的事,总的来说就是两类:

简称timer事件,需按时运行,主要有3个:

简称fd事件,需从文件句柄(file descriptor)读取到指令后,依指令运行.

重复一下,unix 下一切IO, 皆文件,socket ,socketpair,pipe 都返回文件句柄(fd) 用于通信.

主要的fd有:

对于timer事件,多个事件在事件轴上是依次排列的,只需反复检查,到时运行.

对于fd事件,需监听多个fd,需用到我们第二篇讲的IO多路复用技术.

如果满足事件条件,则处理事件内容.

FPM设计上,两类事件使用同一个结构,并且事件触发条件和事件处理逻辑放到同一个事件对象里(C语言对象就是结构体).

举个例子, 打铃下课,打铃是触发条件,下课是事件内容,两个同时放到一个事件对象 ,这是一个很好的设计.

fd值: -1

flags值:FPM_EV_PERSIST

which值: FPM_EV_TIMEOUT

fd值: 获取触发指令的文件fd

flags值: FPM_EV_EDGE(fd事件底层的边缘触发标志,需系统支持)

which值: FPM_EV_READ

两类事件分别放在两个事件队列

static struct fpm_event_queue_s *fpm_event_queue_timer = NULL;

static struct fpm_event_queue_s *fpm_event_queue_fd = NULL;

事件队列的结构很常见,双向队列:

typedef struct fpm_event_queue_s {

struct fpm_event_queue_s *prev;

struct fpm_event_queue_s *next;

struct fpm_event_s *ev;

} fpm_event_queue;

4移除事件 (fpm_event_del -> fpm_event_queue_del)

简单的出列操作:

static int fpm_event_queue_del(struct fpm_event_queue_s **queue, struct fpm_event_s *ev)

对于fd事件,需在底层事件轮询机制里移除(如:epoll)

5,运行事件回调函数:

6, 底层事件轮询模块结构

不同的操作系统,支持不同的IO事件机制,linux 支持epoll,

windows支持select, freebsd 支持kqueue,这个结构统一操作接口

在函数fpm_event_init_main里 调用module->init初始化

fpm 里对应的配置

master进程在fpm_event_loop函数里无限循环,处理定时任务和fd事件.

期间会在module->wait阻塞片刻,对于epoll机制,就是epoll_wait.

PHP怎么制作计时器

计时器的运用在网页制作中很普遍,其实计时器有很多做法,PHP加JS、JS加AJAX也可以控制实现。不是PHP可以单独实现的,因为PHP是实现服务端的语言,没有办法去控制。以下实例就是制作计时器的代码:

<SCRIPT language=JAVASCRIPT>

var timerID = null;

var timerRunning = false;

function stopclock() 

   {

if(timerRunning)

     clearTimeout(timerID);

     timerRunning = false;

   }

function startclock() 

   {

   stopclock();

   showtime();

   }

function showtime() 

   {

   var now = new Date();

   var hours = now.getHours();

   var minutes = now.getMinutes();

   var seconds = now.getSeconds()

   var timeValue = "" +hours; 

//定时初始化数据库的代码:   

timeValue += ((minutes < 10) ? ":0" : ":") + minutes

   timeValue += ((seconds < 10) ? ":0" : ":") + seconds

      document.Calc.time.value = timeValue;

   // you could replace the above with this

   // and have a clock on the status bar:

   // window.status = timeValue;

   timerID = setTimeout("showtime()",1000);

   timerRunning = true;

   return ''; 

   }</script>  

客服端PHP+HTML代码:

<html>

< head>

< META HTTP-EQUIV="Refresh" Content="1;URL=test.php">

< /head>

< body>

< ?

echo date("Y年m月d日 H时i分s秒");

?>

</body>

</html>

PHP+MYSQL 实现队列 进行发送短信怎么做

最近遇到一个批量发送短信的需求,短信接口是第三方提供的。刚开始想到,获取到手机号之后,循环调用接口发送不就可以了吗?

但很快发现问题:当短信数量很大时,不仅耗时,而且成功率很低。

于是想到,用PHP和MySQL实现一个消息队列,一条一条的发送短信。下面介绍具体的实现方法:

首先,建立一个数据表sms,包含以下字段:

id,

phone, //手机号

content //短信内容

将需要发送的短信和手机号存入sms表中。

接下来,需要用PHP实现一个定时器,定时读取一条记录,并发送短信:

<?php

$db = new Db();

$sms = new Sms();

while(true){

$item = $db->getFirstRecord(); //获取数据表第一条记录

if(!$item){

//如果队列中没有数据,则结束定时器

break;

}

$res = $sms->send($item['phone'],$item['content']); //发送短信

if($res){

$db->deleteFristRecord(); //删除发送成功的记录

echo $item['phone'].'发送成功';

}else{

echo $item['phone'].'发送失败,稍后继续尝试';

}

sleep(10); //每隔十秒循环一次

}

echo '发送完毕!';

?>

将代码保存为timer_sms.php,打开命令行,执行定时器:

php timer_sms.php

好了,php定时器将会根据设定的时间间隔(这里设的是10秒),自动完成发送短信的任务。任务完成后将自动退出定时器,不再占用服务器资源。

根据我的测试,PHP定时器占用资源并不多,不会对服务器造成压力。而且是异步访问数据库,也不会影响数据库的运行。

这种方式的优点是:

1、后台运行,前台无需等待

2、成功率高,失败的记录会自动重发,直到成功

php格式化时间转换为多少天,小时,分钟,秒前

<?php  

function mytime($date)

{  

    $str = '';  

    $timer = strtotime($date);  

    $diff = $_SERVER['REQUEST_TIME'] - $timer;  

    $day = floor($diff / 86400);  

    $free = $diff % 86400;  

    if($day > 0) 

    {  

        return $day."天前";  

    }

    else

    {  

        if($free>0)

        {  

            $hour = floor($free / 3600);  

            $free = $free % 3600;  

                if($hour>0)

                {  

                    return $hour."小时前";  

                }

                else

                {  

                    if($free>0)

                    {  

                        $min = floor($free / 60);  

                        $free = $free % 60;  

                        if($min>0)

                        {  

                            return $min."分钟前";  

                        }

                        else

                        {  

                            if($free>0)

                            {  

                                return $free."秒前";  

                            }

                            else

                            {  

                                return '刚刚';  

                            }  

                       }  

                    }

                    else

                    {  

                        return '刚刚';  

                    }  

               }  

       }

       else

       {  

           return '刚刚';  

       }  

    }  

}  

echo mytime("2017-1-18 10:22:01");  

?>

关于php中的timer的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于php中的timer php中的两种跳转语句以及各自的特点的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did167971
更新时间:2023-03-31   阅读:26次

上一篇: php连接sqlserver数据库 php连接sql数据库代码

下一篇:php附件多字节 php_fileinfo扩展

相关资讯

最新资料更新

  • 1.dedecms常用sql语句汇总
  • 2.dedecms标签大全(非常经典)
  • 3.DEDECMS后台无法登陆并跳转回登陆界面的解决方法
  • 4.织梦DEDECMS提示信息提示框美化
  • 5.DEDECMS调用指定栏目下tag标签的方法
  • 6.Dedecms实现列表缩图添加alt锚文本信息的解决方法
  • 7.在织梦中添加腾讯微博最新动态信息的方法
  • 8.dedecms后台模块管理空白不显示的解决方法
  • 9.DedeCMS不支持PHP5.3、5.4及以上版本后台500错误白屏的解决方法
  • 10.DedeCMS关键词替换问题较完美解决方法
  • 11.dedeCMS使用arclist标签调用自定义字段的方法
  • 12.给Dedecms文章列表分页标题加上序号的方法示例
  • 13.织梦dede修改关键字长度的方法
  • 14.Dedecms网站地图获取文章列表支持标签调用的方法
  • 15.详解如何把dedecms数据生成json
  • 16.dede搬家后路径变化批量替换图片路径避免图片不能正常显示
  • 17.dedecms文章keywords关键词字数限制修改方法(同适用于描述)
  • 18.DEDECMS系统分页标签自定义二次开发实例
  • 19.织梦栏目有缓存导致刚发布的文章条数和分页不同步处理方法
  • 20.织梦网站后台底部被挂黑链的解决方法详细解析

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]