ДБ соединение не закрывается
Я только что открыл отправил ошибку, касающуюся соединений с базой данных postgres, которые не были закрыты / очищены сборщиком мусора в любой версии php 7.X для приведенного ниже сценария, я надеялся, что кто-нибудь сможет дать некоторое представление о том, почему такое поведение и точка любые настройки .ini, которые могут помочь избежать этого.
<?php
$dbLink1 = pg_connect( "host=localhost port=5432 dbname=development", PGSQL_CONNECT_FORCE_NEW );
pg_query($dbLink1, 'select 1; /*FIRST*/');
$dbLink2 = pg_connect( "host=localhost port=5432 dbname=development", PGSQL_CONNECT_FORCE_NEW );
pg_query($dbLink2, 'select 1; /*SECOND*/');
/*closing first link*/
pg_close($dbLink1);
$dbLink2 = pg_connect( "host=localhost port=5432 dbname=development", PGSQL_CONNECT_FORCE_NEW );
pg_query($dbLink2, 'select 1; /*THIRD*/');
/*2nd 3rd connection remain idle on the database connection as long as the scripts is alive, the 2nd connection overridden by $dbLink2 should be automatically destroyed*/
sleep(200); ?>
В PHP 5.6, 5.5 я замечаю, что все неиспользуемые соединения автоматически очищаются, и у меня остается только одно простое соединение с базой данных, что, похоже, не так в PHP 7.
1 ответ
Это подтвержденная ошибка в PHP7, которая будет исправлена в следующем выпуске.
Подробности: https://bugs.php.net/bug.php?id=75419
Исправить фиксацию: https://github.com/php/php-src/commit/a645af44561acb4696bc9b98a656781ded81fb79