PHP连接mysql后pcntl_fork产生的错误
来源:互联网 发布:留学生回国 知乎 编辑:程序博客网 时间:2024/05/08 14:10
最近使用PHP做多进程上传碰到了一个问题,上传完成以后写入数据库时报错:Packets out of order. Expected 1 received 0. Packet size=4131940
也有可能是:MySQL server has gone away
总之可能是这种各样奇怪的错误
思考了一下,考虑到PDO是在主进程中创建的,因此fork后多个子进程使用的是同一个PDO连接,如果有两个子进程同时使用该连接与数据库通信,那么就可能因为通信协议时序的不正确导致mysql出现异常
为了验证该想法,写了一个测试程序抓包看了一下
$dsn = "mysql:host={$host};dbname={$dbName};port={$port};charset=utf8";$dbh = new PDO($dsn, $user, $pswd);for ($i=0; $i < 2; $i++) { $pid = pcntl_fork(); if ($pid == -1) { throw new \Exception("Fork process error!", 1); } if ($pid == 0) { // child $sth = $dbh->query("select * from test_table"); exit(0); }}
从抓包结果可以看到两个子进程确实是使用的同一个tcp链接,其中61是客户机,178是服务机
知道了原因,解决起来就好办了,不要使用主进程中创建的mysql连接,进入子进程了以后再重新建立新的mysql连接就不会出现这种问题了
参考链接:https://bugs.php.net/bug.php?id=67061
阅读全文
0 0
- PHP连接mysql后pcntl_fork产生的错误
- 安装Nginx+MySQL+PHP后执行.php程序后产生的错误解决方法:
- PHP函数pcntl_fork的理解与应用
- php连接MySQL时产生错误:mysqlnd cannot connect to MySQL 4.1+ using old authentication
- pcntl_fork和pcntl_fork 的用法
- pcntl_fork和pcntl_fork 的用法
- PHP编程出现的MySQL连接错误
- PHP函数pcntl_fork
- PHP多进程pcntl_fork
- php pcntl_fork 多进程僵尸进程的问题
- 关于kettle 与mysql 连接后 出现错误的问题
- PHP网站从Apache转移到Nginx后产生404错误的原因和解决办法
- PHP网站从Apache转移到Nginx后产生404错误的原因和解决办法
- Eclipse validate后产生错误的处理
- 编译时产生常见的连接错误
- PHP函数 mysql_connect()连接MySQL数据库错误的解决办法
- pcntl_fork实现PHP多进程
- pcntl_fork实现PHP多进程
- CSS 伪类的效果
- [HDU4366]Successor 线段树
- visual studio2010问题导致CMake执行例子时出错Error in configuration process,project files may be invalid
- POJ1651 Multiplication Puzzle
- python 读写CSV 文件
- PHP连接mysql后pcntl_fork产生的错误
- 函数指针小结
- dubbo配置详解
- 段落中字体围绕第一个字 或者字体围绕图片
- mysql的C API函数简介
- 上传excel文件存到服务器并且读取sheet
- 关于python变量
- opengl对着色器纹理坐标等的综合
- MySQL 使用SELECT ... FOR UPDATE 做事务写入前的确认