之前做聊天室的时候有那么个需求就是当用户异常断线的时候就应该清除她的在线状态。因为当时对于flush不够了解,尝试了各种办法,好像都没办法在我们开发机上面执行相应的代码。后来知道是flush的原因。我现在就把所有尝试过的办法都相应地说一次.

第一 最开始的时候,看到了一个regist_shutdown_function()简直是激动惨了。结果后来才知道有好哈。不过是脚本完成或者中断的时候提供一个方法来执行相应的代码。并且在这个里面注册的函数相当的有限(虽然可以把这样传入array($this,method))但是对于环境中的已经存在的函数和类的使用受到了很大的限制,并且对于某些系统函数或者类的支持也并不是很好。

第二。后来在论坛看到某人说这个不过是当时没有面向对象这个概念,做这个函数不过是为了代替析构函数让我们可以在析构的时候进行一定的操作。=。=一听就有点恍然大悟的赶脚。

其实在面向对象之后析构函数已经完全具备这个功能了。根本就没有必要用这么老土的函数。并且经过测试,析构函数可以在脚本中断的情况下执行(前提是你知道脚本中断的流程并且会使用flush这个东西)

第三。这个只适合于我之前做的聊天室的那个情况。当然因为是长连接我们一直处在死循环睡眠的时候并且顺带flush。这个时候其实只要能够判断连接状态,并且在if里面执行相应的代码就好。例如

 <?php
while(true){
echo 1;
ob_flush();
flush();
if(connection_status()){
echo 'finish';
}//end of if
}//end of while
?>

备注:致命错误不能激活析构函数

PHP - 脚本退出(包括异常退出),执行指定代码的更多相关文章

  1. Shell脚本实现每个工作日定时执行指定程序

    我们可能会遇到这样的情景:必须在每个工作日定时执行Linux服务器上的某个程序.那么有没有办法实现这一功能呢?答案是肯定的.我们可以运用Shell脚本简单实现这一功能. 原理很简单,Shell脚本内部 ...

  2. 在Spring Boot启动后执行指定代码

    在开发时有时候需要在整个应用开始运行时执行一些特定代码,比如初始化环境,准备测试数据等等. 在Spring中可以通过ApplicationListener来实现相关的功能,不过在配合Spring Bo ...

  3. springboot框架实现启动项目执行指定代码

    说明: 当有写代码需要在项目启动时执行的时候(即项目启动完成前),可以使用这个方法. 步骤: 创建一个启动类并在类上打上@Component注解 让这个类实现CommandLineRunner接口 重 ...

  4. PHP - 用户异常断开连接,脚本强制继续执行,异常退出回调

    试想如下情况.如果你的用户正在执行一个需要非常长的执行时间的操作.他点了执行了之后,浏览器就开始蛋疼地转.如果执行5分钟,你猜他会干啥,显然会觉得什么狗屎垃圾站,这么久都不响应,然后就给关了.当然这个 ...

  5. hive使用python脚本导致java.io.IOException: Broken pipe异常退出

    反垃圾rd那边有一个hql,在执行过程中出现错误退出,报java.io.IOException: Broken pipe异常,hql中使用到了python脚本,hql和python脚本最近没有人改过, ...

  6. C#WinForm程序异常退出的捕获、继续执行与自动重启

    本文参考网上搜索的信息,并做了适当修改可以让捕捉到异常之后阻止程序退出. 另给出了通过命令行自动重启的方法. 如果一个线程里运行下面的代码 ; / a; 将会导致程序自动结束,而且没有任何提示信息 但 ...

  7. MHA监控进程异常退出

    这两天遇到一个非常诡异的问题,打算和大家分享一下.只所以诡异估计是自己知识面不够吧.线上的MHA一直没有开启自动切换,都是手动切换的,最近开启了自动切换以后,退出securecrt窗口以后发现监控进程 ...

  8. 一次信号量引发的tomcat异常退出

    近期在玩大数据.有个朋友找过来,说他线上的tomcat会莫名其妙的退出,表示非常苦恼,请我帮看看.每次他发现退出了,都通过腾讯云的WEB控制台登录,启动tomcat. 本着助人为乐(shao kao ...

  9. MHA监控进程异常退出(MHA版本:0.56)

    最近遇到一个非常诡异的问题,mha后台进程自己中断退出了.以下是报错:Mon Dec 21 20:16:07 2015 - [info] OK.Mon Dec 21 20:16:07 2015 - [ ...

随机推荐

  1. NullReferenceException,就不应该存在!

    如果要你说出 .NET 中的三个异常,NullReferenceException 一定会成为其中一个:如果说出 .NET 中的一个异常,NullReferenceException 也会被大多数人说 ...

  2. Orders

    The stores manager has sorted all kinds of goods in an alphabetical order of their labels. All the k ...

  3. MySQL中的表中增加删除字段

    1.增加一个字段alter table user表 add COLUMN new1字段 VARCHAR(20)   NOT NULL DEFAULT 0; //增加一个字段,VARCHERA 20 , ...

  4. Ubuntu 破解密码及用户管理

    Ubuntu 破解密码及用户管理 ubuntu 16.04 破解密码 useradd 实现以下要求 1.ubuntu16.04破解密码 2.创建下面的用户.组和组成员关系 名字为xipudata 的组 ...

  5. windows下使用linux命令搜文件

    在linux系统的黑幕下,我们只能通过find命令来搜文件,而在windows的界面里,我们只能通过搜索框来搜.两者各有利弊,前者单调但高效,后者用户体验好却比较慢.能不能在windows使用linu ...

  6. SharePoint2013 中集成AD RMS 与Office Web App 2013集成

    SharePoint2010时Office Web App2010是一个让人又爱又恨的产品,尽管能够在WEB上查看与编辑文档,甚至能够多能协同编辑,但总会遇到两个看似普通的需求却需要给业务人员大费口舌 ...

  7. 如何用TortoiseSVN管理本地文档

    1.安装(略) 2.搭建本地SVN版本管理数据库(服务器) (1)在本地磁盘上新建一个目录,例如E:\SVN,用来存储各种需要进行版本管理的文档:接着在该目录下再创建一个新的空目录,例如创建一个E:\ ...

  8. php端安装rabbitmq-c

    php端安装rabbitmq-c url:https://github.com/alanxz/rabbitmq-c cd rabbitmq-c**** ./configure --prefix=/us ...

  9. HttpClient使用示例

    1)使用HttpClient发送GET请求 public class MainActivity extends Activity implements OnClickListener { privat ...

  10. LogUtils日志管理工具

    public class LogUtils { public static final int VERBOSE = 1; public static final int DEBUG = 2; publ ...