From: Jesús Martínez Novo Date: Sun, 1 Jun 2014 13:54:48 +0000 (+0200) Subject: Make MySQLi work with non-standard socket X-Git-Tag: 1.31.0-rc.0~14048^2 X-Git-Url: http://git.cyclocoop.org/%24image?a=commitdiff_plain;h=a74881be24946a0d0fa0f2b3b0f7b403a4fa89e2;p=lhc%2Fweb%2Fwiklou.git Make MySQLi work with non-standard socket MySQLi needs to specify the socket location as a parameter, and not as part of the hostname. Split the socket out of the hostname if it contains *one* colon (IPv6 safe) after checking for the port number. Bug: 65998 Change-Id: I66ee34e1029bc1630669bde4272d0eae9d3fd9f1 --- diff --git a/includes/db/DatabaseMysqli.php b/includes/db/DatabaseMysqli.php index 2ce6307918..a03c9aaf62 100644 --- a/includes/db/DatabaseMysqli.php +++ b/includes/db/DatabaseMysqli.php @@ -58,14 +58,22 @@ class DatabaseMysqli extends DatabaseMysqlBase { } // Other than mysql_connect, mysqli_real_connect expects an explicit port - // parameter. So we need to parse the port out of $realServer + // and socket parameters. So we need to parse the port and socket out of + // $realServer $port = null; + $socket = null; $hostAndPort = IP::splitHostAndPort( $realServer ); if ( $hostAndPort ) { $realServer = $hostAndPort[0]; if ( $hostAndPort[1] ) { $port = $hostAndPort[1]; } + } elseif ( substr_count( $realServer, ':' ) == 1 ) { + // If we have a colon and something that's not a port number + // inside the hostname, assume it's the socket location + $hostAndSocket = explode( ':', $realServer ); + $realServer = $hostAndSocket[0]; + $socket = $hostAndSocket[1]; } $connFlags = 0; @@ -90,7 +98,7 @@ class DatabaseMysqli extends DatabaseMysqlBase { $mysqli->options( MYSQLI_OPT_CONNECT_TIMEOUT, 3 ); if ( $mysqli->real_connect( $realServer, $this->mUser, - $this->mPassword, $this->mDBname, $port, null, $connFlags ) + $this->mPassword, $this->mDBname, $port, $socket, $connFlags ) ) { return $mysqli; }