X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/58fa7679bccafd00f9a50bcd4a87e96876331b03..refs/pull/5676/head:/app/Config/database.php diff --git a/app/Config/database.php b/app/Config/database.php index 170666ddb..8d38a86df 100644 --- a/app/Config/database.php +++ b/app/Config/database.php @@ -40,12 +40,16 @@ if (env('REDIS_SERVERS', false)) { // MYSQL // Split out port from host if set -$mysql_host = env('DB_HOST', 'localhost'); -$mysql_host_exploded = explode(':', $mysql_host); -$mysql_port = env('DB_PORT', 3306); -if (count($mysql_host_exploded) > 1) { - $mysql_host = $mysql_host_exploded[0]; - $mysql_port = intval($mysql_host_exploded[1]); +$mysqlHost = env('DB_HOST', 'localhost'); +$mysqlHostExploded = explode(':', $mysqlHost); +$mysqlPort = env('DB_PORT', 3306); +$mysqlHostIpv6 = str_starts_with($mysqlHost, '['); +if ($mysqlHostIpv6 && str_contains($mysqlHost, ']:')) { + $mysqlHost = implode(':', array_slice($mysqlHostExploded, 0, -1)); + $mysqlPort = intval(end($mysqlHostExploded)); +} else if (!$mysqlHostIpv6 && count($mysqlHostExploded) > 1) { + $mysqlHost = $mysqlHostExploded[0]; + $mysqlPort = intval($mysqlHostExploded[1]); } return [ @@ -59,38 +63,41 @@ return [ 'connections' => [ 'mysql' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL'), - 'host' => $mysql_host, - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), - 'password' => env('DB_PASSWORD', ''), - 'unix_socket' => env('DB_SOCKET', ''), - 'port' => $mysql_port, - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => $mysqlHost, + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'port' => $mysqlPort, + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + // Prefixes are only semi-supported and may be unstable + // since they are not tested as part of our automated test suite. + // If used, the prefix should not be changed otherwise you will likely receive errors. + 'prefix' => env('DB_TABLE_PREFIX', ''), 'prefix_indexes' => true, - 'strict' => false, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ + 'strict' => false, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], 'mysql_testing' => [ - 'driver' => 'mysql', - 'url' => env('TEST_DATABASE_URL'), - 'host' => '127.0.0.1', - 'database' => 'bookstack-test', - 'username' => env('MYSQL_USER', 'bookstack-test'), - 'password' => env('MYSQL_PASSWORD', 'bookstack-test'), - 'port' => $mysql_port, - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', + 'driver' => 'mysql', + 'url' => env('TEST_DATABASE_URL'), + 'host' => '127.0.0.1', + 'database' => 'bookstack-test', + 'username' => env('MYSQL_USER', 'bookstack-test'), + 'password' => env('MYSQL_PASSWORD', 'bookstack-test'), + 'port' => $mysqlPort, + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', 'prefix_indexes' => true, - 'strict' => false, + 'strict' => false, ], ], @@ -102,6 +109,6 @@ return [ 'migrations' => 'migrations', // Redis configuration to use if set - 'redis' => env('REDIS_SERVERS', false) ? $redisConfig : [], + 'redis' => $redisConfig ?? [], ];