- 浏览: 1090208 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (290)
- php (65)
- javascript (36)
- html5 (31)
- thinkphp (9)
- mysql (16)
- jquery (13)
- node.js (9)
- css (9)
- android 开发 (8)
- flex (5)
- java (3)
- apache (8)
- linux (8)
- git (5)
- web (5)
- wordpress (9)
- mongodb (2)
- redis (5)
- yaf (6)
- python (4)
- big data (1)
- sphinx (1)
- html (1)
- bootstrap (1)
- vue (1)
- laravel (1)
- test (0)
最新评论
-
July01:
推荐用StratoIO打印控件,支持网页、URL、图片、PD、 ...
如何解决非IE浏览器的web打印 -
flashbehappy:
同一个视频,有mp4,ogg两种格式的。在chrome,fir ...
firefox chrom safari 对video标签的区别 -
xmdxzyf:
可以在网站(www.sosoapi.com)上试下在线表单方式 ...
用swagger-php/ui做API测试 -
flex_莫冲:
a2631500 写道"看了源码,设置Backbon ...
backbone与php交互 -
a2631500:
"看了源码,设置Backbone.emulateJS ...
backbone与php交互
cli code
socket server code
socket client code
#!/bin/bash filepath=$(cd "$(dirname "$0")"; pwd) cd $filepath #running status:sso.lock,stop status:ssostop.lock TMPFILE=$filepath/sso.lock STOPFILE=$filepath/ssostop.lock runCLI(){ touch $TMPFILE echo "sso server process started.\n" logname="sso_"$(date +%Y%m%d); su www-data -c "php index.php sso start 1>>./Log/$logname.log 2>&1" rm -f $STOPFILE; } restartCLI(){ stopCLI echo "Waiting for stop sso process." sleep 1 echo "Exit prev sso process." runCLI & } stopCLI(){ if [ -f $TMPFILE ];then touch $STOPFILE fi rm -f ${TMPFILE}; logname="sso_"$(date +%Y%m%d); su www-data -c "php index.php sso stop 1>>./Log/$logname.log 2>&1" echo "Sent stop sso server signal." } if [ "$1" = "-stop" ] ;then stopCLI elif [ "$1" = "-start" -o "$1" = "" ] ;then if [ -f $TMPFILE ];then echo "Another process is running." else runCLI & fi elif [ "$1" = "-restart" ] ;then restartCLI else echo "Please select option -start -restart -stop" fi
socket server code
<?php namespace Admin\Action; use Think\Action; class SsoAction extends Action { private $sock; private $clients = array(); // 停止socket。kill 后,有可能socket临时文件还是没删除。会导致同一个端口无法启动 //check port status:netstat -ano |grep port //search pid: lsof -i:port //kill pid //rm -f sso.lock public function run($taskType) { switch ($taskType) { case 'start': $this->_start(); break; default: echo datetime() . " unknow task type!" . PHP_EOL; break; } } public function index() { echo datetime() . " server msg: ". $_SERVER['argv'][1] . " " . $_SERVER['argv'][2] . PHP_EOL; $this->run($_SERVER['argv'][2]); } private function _start() { set_time_limit(0); ob_implicit_flush(); if (($this->sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) { echo datetime() . " socket_create() failed: reason:" . socket_strerror(socket_last_error()) . "\n"; exit; } // start if (socket_bind($this->sock, C('SSO_ADDRESS'), C('SSO_PORT')) === false) { echo datetime() . " socket_bind failed, reason:" . socket_strerror(socket_last_error($sock)) . PHP_EOL; exit; } // listen if (socket_listen($this->sock, 5) === false) { echo datetime() . " socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . PHP_EOL; exit; } echo datetime() . " start socket server success!" . PHP_EOL; do { // accept socket msg failed if (($msgsock = socket_accept($this->sock)) === false) { echo datetime() . " socket_accepty() failed :reason:" . socket_strerror(socket_last_error($this->sock)) . PHP_EOL; break; } //read client message $buf = socket_read($msgsock, 1024); $data = json_decode($buf, true); $userID = $data['userID']; if ($data['msg'] == 'logout') { // clear session table $this->_logout($userID); } elseif ($data['msg'] == "check") { // check cache with user ID $back = S($userID) ? "success" : "fail"; echo datetime() . " no cache of {$userID} " . PHP_EOL; if (false === socket_write($msgsock, $back)) { echo datetime() . " socket_write() failed reason:" . socket_strerror(socket_last_error($this->sock)) . PHP_EOL; } } socket_close($msgsock); } while (true); } private function _logout($userID) { if (!$userID) return false; S($userID, null); echo datetime() . " userID:{$userID} logout by client. " . PHP_EOL; } } ?>
socket client code
<?php namespace Admin\Action; use Think\Action; use Org\Util\Socket; class SsoClientAction extends Action { private $SocketClient; /** * loop check sso server auth status */ public function run() { $result = true; while($result===true) { $this->_connect(); $result = $this->send(); if (!$result) { // logout session_destroy(); } sleep(3); } //$this->_connect(); //$result = $this->send(); } private function _connect() { $config = array('persistent' => false, 'host' => C("SSO_ADDRESS"), 'protocol' => 'tcp', 'port' => C("SSO_PORT"), 'timeout' => 5); $this->SocketClient = new Socket($config); $this->SocketClient->connect(); } /** * @param msg check or logout string */ public function send($msg="check") { $userID = $_SESSION[C('USER_AUTH_KEY')]; if (!$userID) $msg = "logout"; $arr = array("msg"=>$msg, $userID=>$userID); $data = json_encode($arr); $result = $this->SocketClient->write($data); //echo datetime() . " send msg:{$msg} \r\n" . PHP_EOL; $response = $this->SocketClient->read(); echo datetime() . " " . $response . " from sso server \r\n" . PHP_EOL; $this->SocketClient->disconnect(); if ($response == "logout" || $response == "fail") { echo datetime . " logout or fail \r\n" . PHP_EOL; session_destroy(); return false; } return true; } } ?>
发表评论
-
将博客搬至CSDN
2017-03-28 09:07 632将博客搬至CSDN,尽情期待 -
laravel入門
2017-03-03 16:31 6451 全局安裝 composer global require ... -
导出csv,excel等文件,文件内容错误的问题,需要加上ob_end_clean
2017-03-02 11:54 1554见这个问题: http://stackoverflow.com ... -
facebook graph api从2.6转到2.8的问题处理
2017-02-15 16:30 1141之前一直用facebook 2.6的api,现在想升级到2.8 ... -
php从mysql读取超过200W行的表
2017-01-04 10:09 645需要从一个大表,如user表中读取所有user数据再做整理并導 ... -
一个session失效的伪命题
2016-12-08 18:33 739最近遇到一个问题,一个ajax请求会调用已存在的session ... -
tp5与tp3的区别
2016-11-21 14:33 1546TP5作了很大的改变,更加灵活,没那么臃肿了,加入了一些令人振 ... -
推送消息能不能区分禁止通知和卸载两种类型?
2016-11-18 10:54 1466消息推送ios用了apns,android用的是gcm。推送失 ... -
yaf在命令行模式下出现PHP Fatal error: Class 'Yaf_Application' not found的解决办法
2016-11-11 16:42 2402为了跑个yaf的crontab,执行时报错: PHP Fata ... -
推送emoji表情乱码的解决方法
2016-11-04 17:44 1969推送内容如果包含了emoji表情,需要做以下修改 1 mysq ... -
YAF访问图片等静态资源禁止调用YAF框架的解决办法
2016-10-20 17:55 1623当访问yafpublic 目录下的某个静态资源时,依然会访问y ... -
在线自动协同编辑文本的实现方案
2016-10-14 16:49 1978要实现可以自动在线协同编辑文本的功能。就类似google do ... -
Paypal支付跳转失败的原因及解决办法
2016-09-18 14:27 3618遇到在跳转到paypal支付页面的时候出现502 bad ga ... -
文件格式不是unix导致sed,cat等读取文件后无法正常退出
2016-08-30 14:44 775#!/bin/bash bucket_config=&quo ... -
varnish的使用和PHP清除缓存的技巧
2016-08-11 14:10 1288官網地址 https://www.varnish-cache. ... -
TP在APP_DEBUG=false的情況下,CLI和WEBSITE會共用同一個~runtime.php導致出錯的問題解決辦法
2015-12-14 11:43 841TP若使用了 define('APP_DEBU ... -
node.js获取php curl post数据req.body为空的处理
2015-09-22 11:43 3964node使用了express4和body-parser来解析p ... -
yaf namespace的使用
2015-08-27 11:32 2318yaf支持namespace。在php.ini 中添加 yaf ... -
yaf 添加phpunittest
2015-08-21 11:16 635首先要讓php在cli下支持yaf wamp下打開D:/wam ... -
TP的module支持中文
2015-05-20 14:06 1275為了讓URL支持中文,例如www.xxx.com/廣州/xx ...
相关推荐
基于 elementui + thinkphp6 + phpsocket.io的单商户客服系统源码 基于 elementui + thinkphp6 + phpsocket.io的单商户客服系统源码 基于 elementui + thinkphp6 + phpsocket.io的单...
标题中的“thinkphp3.1.3完美支持php7”意味着这个压缩包是针对PHP7环境优化过的ThinkPHP 3.1.3框架版本。ThinkPHP是中国常用的开源PHP框架之一,以其简洁、高效的代码风格和丰富的功能而受到开发者的欢迎。PHP7则是...
同时,建议考虑将项目升级到更高版本的ThinkPHP,如ThinkPHP5.x,这样不仅可以解决当前的兼容性问题,还能享受到更多新版本带来的性能优化和新特性。 总的来说,升级ThinkPHP3.1以支持PHP7是一个涉及多方面调整的...
Thinkphp做的阿里云OSS后台,PHP全套代码,Thinkphp3.2整合阿里云OSS图片,thinkphp3.2实现图片上传至OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了。...
本文将深入探讨在ThinkPHP6框架中如何使用Workerman库来实现WebSocket连接,以及相关的技术要点。 首先,`ThinkPHP6` 是一个基于 PHP7 开发的轻量级且强大的国产PHP框架,其核心设计理念是“简洁、实用、快速”。它...
在使用ThinkPHP5.1对接PHPWord时,首先要确保已经正确安装了PHPOffice库。这通常通过Composer进行管理,执行`composer require phpoffice/phpword`命令即可。接着,在ThinkPHP5.1的控制器中引入所需类库,并实例化...
【标签】"php框架 thinkphp6稳定版" 指出这是关于PHP框架的内容,特别强调了ThinkPHP6的稳定版本,表明这是一个适合生产环境使用的框架。 压缩包文件名为"tp6",很可能包含了ThinkPHP6的核心源码文件、示例项目、...
thinkphp-3.1.2.zip是源版本未修复的 Base为在thinkphp3.1.2源版本基本上修复PHP7.0兼容性的文件夹 ├── Base │ ├── Common │ │ └── common.php │ └── Lib │ ├── Behavior │ │ ...
《基于ThinkPHP和Socket通信的病房呼叫系统》 在当今的医疗信息化进程中,病房呼叫系统是提高医院服务质量、提升患者体验的重要组成部分。本项目“基于ThinkPHP和Socket通信的病房呼叫系统”是一款采用PHP编程语言...
这份框架代码已经经过了修改,能够适应PHP7的最新版本,包括7.0和7.1,使得开发者可以充分利用PHP7的优势,同时在ThinkPHP的稳定框架上构建应用。 一、ThinkPHP 3.1.3与PHP7的兼容问题 1. PHP7的语法变化:PHP7...
因为公司要实现SSO单点登录的效果,最近在网上找了一些资料,但是都没有好用的, 所以自己用PHP 使用TP5.0 实现了SSO单点登录,可以跨多个域名。 下载后在本地配置好 A,B,C 3个网站,就可以模拟效果了。
Thinkphp 使用Dompdf
本示例是关于如何在ThinkPHP框架中整合phpqrcode库来生成二维码的DEMO。这个过程涉及到前端与后端的交互、库的安装与配置、以及实际的二维码生成逻辑。 首先,`ThinkPHP`是一个基于PHP的轻量级开源框架,它提供了...
该开源单商户客服系统采用elementui、thinkphp6及phpsocket.io技术构建,支持多语言环境,包含875个文件,涵盖579个PHP文件、57个JavaScript文件、40个Markdown文件、29个JSON文件、29个Vue文件、25个PNG图片文件、...
- **安装PHPSocket.IO**:进入ThinkPHP5.0项目的根目录,使用Composer安装`composer require workerman/phpsocket.io`。完成后,vendor目录下会新增一个workerman文件夹,表示安装成功。 - **创建服务入口文件**...
在ThinkPHP项目中使用mpdf,首先需要引入库。在控制器或服务中,添加以下代码: ```php use Mpdf\Mpdf; // 创建mpdf实例 $mpdf = new Mpdf(); ``` 接下来,你需要准备HTML内容。可以是动态生成的,也可以是静态...
在ThinkPHP5.1项目中,使用PhpSpreadsheet导入Excel文件通常涉及以下步骤: 1. **安装库**: 通过Composer安装PhpSpreadsheet,命令行输入 `composer require phpoffice/phpspreadsheet`。 2. **读取文件**: 使用`\...
帮助你完成php程序对redis的支持,其中分别包含在linux和windows系统中如何一步步完成php_redis扩展安装的步骤和所需资源,最后我再结合Thinkphp3.2把redis整合进tp框架的Cache中,这样更方便的使用tp中S()方法直接...
这里我们探讨的是如何使用ThinkPHP5框架结合PHPOffice库来实现这个功能。 首先,ThinkPHP5是一款流行的PHP轻量级框架,它提供了强大的路由、模型、控制器、视图等MVC模式支持,简化了Web应用的开发过程。在搭建...
在本例中,我们看到的是PHPMailer与ThinkPHP 3.2版本的集成,这是一个较老但仍然被许多项目使用的版本。 " DiaoyongController.class "可能是指一个控制器类,它是ThinkPHP框架的一部分,专门处理与邮件相关的操作...