|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
Patchesmysqli_dbo_cleanup (last revision 2019-09-17 17:24 UTC by erik at coretech dot se)Pull RequestsHistoryAllCommentsChangesGit/SVN commits
[2019-09-17 17:24 UTC] erik at coretech dot se
[2021-08-05 12:09 UTC] cmb@php.net
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Nov 17 22:00:01 2025 UTC |
Description: ------------ When building daemon processes with php that requires the parent process to create a persistent database connection. The cleanup of the child process closes the parents database connection. A way to disable this cleanup on a object basis would make php better for daemon projects. This problem applies to other file descriptors aswell but the most problematic is the mysqli dblink resource. Test script: --------------- <?php function query_db($dbo) { if(!mysqli_real_query($dbo, "SELECT 1")) die("Unable to query database: " . mysqli_error($dbo) . " (" . mysqli_errno($dbo) . ")\n"); if(($res = mysqli_store_result($dbo)) === FALSE) die("Unable to store result: " . mysqli_error($dbo) . " (" . mysqli_errno($dbo) . ")\n"); echo "Successful query\n"; } $dbo = mysqli_init(); if (!mysqli_real_connect($dbo, 'dbserver', 'dbuser', 'dbpwd')) { die("Unable to connect to the database\n"); } query_db($dbo); $pid = pcntl_fork(); if ($pid == -1) { die("Could not fork\n"); } else if($pid) { // Parent pcntl_wait($status); query_db($dbo); } else { // Child // mysqli_disable_cleanup($dbo, TRUE); exit(0); } Expected result: ---------------- Successful query Successful query Actual result: -------------- Successful query PHP Warning: mysqli_real_query(): MySQL server has gone away in /tmp/test.php on line 5 PHP Warning: mysqli_real_query(): Error reading result set's header in /tmp/test.php on line 5 Unable to query database: MySQL server has gone away (2006)