|   | 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 Group All rights reserved. | Last updated: Fri Oct 31 01: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)