@brummel: stand auf der Seite 1 dieses Themas hier:
http://www.phpbb.de/community/viewtopic ... 9#p1067547
Ob das in der config. php der Version 3.x von phpbb noch so funktioniert, weis ich allerdings nicht, denn die Variable taucht in den Dateien von phpbb 3.x nirgendwo auf.
Edit: funktioniert nicht!
Diese Variable heist bei phpbb 3.x '$persistency' und wird in den datenbankspezifischen Dateien unter 'root\includes\db' abgetestet, d.h. wenn die Datenbank persistent connections zulässt, werden diese automatisch benutzt. Einfache Lösung wäre, alle 'mssql_pconnect' in 'mssql_connect' zu ändern, bzw. (sauberer) den Test zu umgehen und daraus eine einfache Zuweisung zu machen. Mal am Beispiel der mssql.php, aus:
Code: Alles auswählen
if (version_compare(PHP_VERSION, '5.1.0', '>=') || (version_compare(PHP_VERSION, '5.0.0-dev', '<=') && version_compare(PHP_VERSION, '4.4.1', '>=')))
{
$this->db_connect_id = ($this->persistency) ? @mssql_pconnect($this->server, $this->user, $sqlpassword, $new_link) : @mssql_connect($this->server, $this->user, $sqlpassword, $new_link);
}
else
{
$this->db_connect_id = ($this->persistency) ? @mssql_pconnect($this->server, $this->user, $sqlpassword) : @mssql_connect($this->server, $this->user, $sqlpassword);
}
wird
Code: Alles auswählen
if (version_compare(PHP_VERSION, '5.1.0', '>=') || (version_compare(PHP_VERSION, '5.0.0-dev', '<=') && version_compare(PHP_VERSION, '4.4.1', '>=')))
{
$this->db_connect_id = @mssql_connect($this->server, $this->user, $sqlpassword, $new_link);
}
else
{
$this->db_connect_id = @mssql_connect($this->server, $this->user, $sqlpassword);
}
d.h. statt dem Test auf persistent connections und anschließdender Zuweisung dieser oder normaler connections wird gleich die Zuweisung auf non persistent connections vorgenommen. Das müsste dann analog in allen Dateien:
- firebird.php
- mssql.php
- mssql_odbc.php
- mysql.php
- mysqli.php
- oracle.php
- postgres.php
- sqlite.php
bzw. nur der für den vorliegenden Datenbanktyp verwendeten geändert werden.
___________
Ich habe auch schon mehrere dieser Fehlermeldungen erhalten, obwohl nachweislich des Datenbanklogs nur max. 25 persistent connections offen waren und das mit der Fehlermeldung angezeigte Limit deutlich höher liegt. Ich habe deshalb einen anderen Verdacht, was die Ursache betrifft.
Es werden ja mehrere Webserver auf einer Maschine virtualisiert, wenn man nicht gerade einen eigenen Server betreibt oder gemietet hat.
Ich vermute nun, da die Storage ja unabhängig von der Virtualisierung auf der Hardware läuft, dass die Fehlermeldung tatsächlich von dort kommt, d.h. nicht die für den eigenen Webserver virtualisierte Datenbank hat zu viele persistent connections, sondern die tatsächlich physisch auf der Hardware befindliche. D.h. es werden dabei alle persistent connections aller auf der Hardware virtualisierten Datenbanken zusammengezählt.
Das würde alles erklären.
Zu beheben wäre die Ursache dann nur, indem der Provider weniger Kunden auf einen Server packt oder man sich einen Povider sucht, dessen Virtualisierungssoftware und Hardware leistungsfähiger ist.