php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #78555 Disable dblink cleanup
Submitted: 2019-09-17 17:20 UTC Modified: 2021-08-05 12:09 UTC
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: erik at coretech dot se Assigned:
Status: Open Package: MySQLi related
PHP Version: 7.3.9 OS:
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: erik at coretech dot se
New email:
PHP Version: OS:

 

 [2019-09-17 17:20 UTC] erik at coretech dot se
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)


Patches

mysqli_dbo_cleanup (last revision 2019-09-17 17:24 UTC by erik at coretech dot se)

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2019-09-17 17:24 UTC] erik at coretech dot se
The following patch has been added/updated:

Patch Name: mysqli_dbo_cleanup
Revision:   1568741061
URL:        https://bugs.php.net/patch-display.php?bug=78555&patch=mysqli_dbo_cleanup&revision=1568741061
 [2021-08-05 12:09 UTC] cmb@php.net
Consider to provide the patch as pull request[1] for better
visibility.

[1] <https://github.com/php/php-src/pulls>
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Nov 24 00:01:27 2024 UTC