ThinkPHP5.0.*版本 cli模式下php每隔段时间就出错

ByteGalacticEcho
• 阅读 7731

关于ThinkPHP5.0.*版本 cli模式下php每隔段时间就出错
cli模式下php每隔段时间就出错
官方论坛
日志如下:

控制台

Uncaught thinkexceptionErrorException: Error while sending STMT_CLOSE packet. PID=23951 in /www/web/work/public_html/thinkphp/library/think/db/Connection.php:318

log文件

thinkdbConnection::free(): send of 9 bytes failed with errno=32 Broken pipe

分析原因

长时间数据库会断线 但是新版本会改进断线重连机制

解决方案

1.临时解决

修改/thinkphp/library/think/db/Connection.php

1.1是否需要断线重连

'break_reconnect' => true,

1.2 释放查询结果 捕获异常

public function free()
{

try {
    $this->PDOStatement = null;
} catch (Exception $e) {
    Log::write("has error when free PDOStatement maybe mysql gone away,skip it:" . $e->getMessage(), log::DEBUG);
}

}

1.3 是否断线,修改为master最新

protected function isBreak($e)
{

if (!$this->config['break_reconnect']) {
    return false;
}

$info = [
    'server has gone away',
    'no connection to the server',
    'Lost connection',
    'is dead or not enabled',
    'Error while sending',
    'decryption failed or bad record mac',
    'server closed the connection unexpectedly',
    'SSL connection has been closed unexpectedly',
    'Error writing data to the connection',
    'Resource deadlock avoided',
    'failed with errno',
    'send of 33 bytes failed with errno=32 Broken pipe',
];

$error = $e->getMessage();

foreach ($info as $msg) {
    if (false !== stripos($error, $msg)) {
        return true;
    }
}
return false;

}

2.官方推荐使用最新版本以解决此问题


作者:HD2killers
来源:CSDN
原文:https://blog.csdn.net/HD2kill...
版权声明:本文为博主原创文章,转载请附上博文链接!

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
PHP命令行下的世界
PHP作为一门web开发语言,通常情况下我们都是在WebServer中运行PHP,使用浏览器访问,因此很少关注其命令行操作以及相关参数的使用,但是,特别是在类Unix操作系统上,PHP可以作为一门脚本语言执行与shell类似的处理任务。php命令行(CLI)参数详解查看PHP的所有命令行参数,使用phph命令。我们将会对大部分常用的
Wesley13 Wesley13
3年前
PHP教程
PHP教程php读取输出其他文件方法人们往往想到出现一些关于访问很缓慢,有白页现象,要是测试环境你也就重启一下PHP的phpfpm进程发现又好了,隔一段时间又出类似的问题,本期我们邀请到了兄弟连PHP教育www.lampbrother.net(https://www.oschina.net/action/GoToLink?urlhttp%3A
Wesley13 Wesley13
3年前
@Scheduled注解
1概述@Scheduled注解是springboot提供的用于定时任务控制的注解,主要用于控制任务在某个指定时间执行,或者每隔一段时间执行.注意需要配合@EnableScheduling使用,配置@Scheduled主要有三种配置执行时间的方式,cron,fixedRate,fixedDelay.2croncron是
Stella981 Stella981
3年前
CentOS 7 yum nginx MySQL PHP 简易环境搭建
用centos自带的yum源来安装nginx,mysql和php,超级方便,省去编译的麻烦,省去自己配置的麻烦,还能节省非常多的时间。我们先把yum源换成国内的阿里云镜像源(当然不换也可以),先备份一下原来的源镜像文件,以免出错后可以恢复:\root@192~\mv/etc/yum.repos.d/CentOSBase.repo/et
Wesley13 Wesley13
3年前
PHP7版本改动细节整理翻译完毕
自从鸟哥发布PHP7相关的版本以来,就一直关注PHP7的进展。PHP7是非常值得期待的一个版本,性能获得了极大的提升,语法也更加合理规范。最近就花了一些时间,整理翻译了PHP7版本的改动记录文件。主要包括了以下部分:  2非兼容性改动   2.1语言修改   2.1.1变量处理机制修改   2.1.2list
Stella981 Stella981
3年前
PHP中$_SERVER详解参数&说明
!(https://oscimg.oschina.net/oscnet/4911f43dc292efbaf24fe48dd8c443ef8c2.jpg)一.$\_SERVER\'argv'\1、cli模式(命令行)下,第一个参数$\_SERVER\'argv'\\0\是脚本名,其余的是传递给脚本的参数2、web网页模式下
Stella981 Stella981
3年前
PHP版本升级后Atom的环境配置
近来PHP7出山,为了领略号称近100%提升的性能,在Mac上用Brew安装了PHP70,过程算顺利,apache也配置完,运行一个页面后见到了php7.0.1的版本号。于是用Atom写段测试代码,发现不对,怎么Atom运行的版本还是5.5?因为Atom运行PHP的话需要安装N个插件,所以首先逐个检查插件的配置,发现linterphp和phpcsf
Wesley13 Wesley13
3年前
PHP调用外部程序的方法
很多情况下需要php调用其他程序如shell命令、shell脚本、可执行程序等等,此时需要使用到诸如exec/system/popen/proc\_open等函数,每种函数有各自适合使用的场景以及需要注意的地方。前提:PHP没有运行在安全模式如果PHP运行在安全模式下,那么在执行外部命令、打开文件、连接数据库、基于HTTP的认证这4
Wesley13 Wesley13
3年前
PHP状态模式
状态设计模式状态模式的作用是允许对象在状态改变时改变其行为对象中频繁的状态非常依赖于条件语句,就自身来说条件语句并没有什么问题,不过,如果选项太多,以至于程序出现混乱,或者增加或改变选项需要太多的是时间。<?php/CreatedbyPhpStorm.User:ge
Wesley13 Wesley13
3年前
thinkphp 定时执行php文件 php自动执行php文件
最近开发短信任务和短信发送功能,用到了定时执行php这方面:和大家分享一下:(个人笔记,写的不好,海涵海涵,看不懂的话可以留言,但是我一般都能及时回复,其他网上有很多这样的教程,大家一搜就满地)我用的是thinkphp开发的程序,程序已经开发好了,程序有个分批定时发送功能,每隔一段时间查找一下数据库,然后把符合条件的短信任务给发送出去
Stella981 Stella981
3年前
Redis的持久化
RDB模式1、什么是RDB每隔一段时间,把内存中的数据写入磁盘,恢复的时候,他会自动从工作区拿出来进行恢复2、RDB的优劣势优势每隔一段时间,全量备份备份简单,可以直接传输文到其他地方备份的过程中会fork一个新的进程来进行文件的存储劣势发生
ByteGalacticEcho
ByteGalacticEcho
Lv1
等待着大雪的纷纷扬扬,把每一个梦筑成洁白的巢。
文章
6
粉丝
0
获赞
0