之前做聊天室的时候有那么个需求就是当用户异常断线的时候就应该清除她的在线状态。因为当时对于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. 实现一个web服务器, 支持php

    暂时还很不完善, 不过框架已经写出来了. https://github.com/tw1996/studyHttpd/

  2. 实用符号Alt+小键盘快输

    键盘输入:①Word.写字板.QQ2011等,Alt+Unicode之十进制数:②记事簿.网页框.浏览器之地址栏.TM2009等,Alt+GBK之十进制数. 字符 Unicode 十进制数 GBK ...

  3. 《DSP using MATLAB》示例Example6.6

    代码: h = [1, 2, 3, 2, 1]/9; [C, B, A] = dir2fs(h) 运行结果:

  4. PAT 1009 说反话 C语言

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区 ...

  5. drill 数据库查询方式简单说明

    1. mysql   select * from mysql-storage.mysqldb.mysqltable   2. oracle    select * from oracle-storag ...

  6. Spring boot admin 使用

    1. maven依赖 <dependencies> <dependency> <groupId>org.springframework.boot</group ...

  7. FastAdmin 关于跨域问题解决

    FastAdmin 关于跨域问题解决 之前很久之前收集到社区的问题. https://forum.fastadmin.net/thread/277 今天又有人问到,无法打开,估计是网络问题. 以下为完 ...

  8. sqlite3添加、修改列名(转)

    sqlite3添加.修改列名http://blog.163.com/yi_xiaoluo@126/blog/static/72090439201161533941528/SQLite如何删除,修改.重 ...

  9. Qt学习之秒表的实现(StopWatch) (转)

    秒表对于我来说并不陌生,在之前自己学习单片机时,实现过秒表和数字钟:基本思路:开启单片机带的定时器,并设置它没10ms溢出一次,分别用三个变量hour,minute,secong记录秒表的时分秒,然后 ...

  10. (转)Android studio 使用心得(五)—代码混淆和破解apk

    这篇文章等是跟大家分享一在Android studio 进行代码混淆配置.之前大家在eclipse上也弄过代码混淆配置,其实一样,大家可以把之前在eclipse上的配置文件直接拿过来用.不管是.cfg ...