1
1
Fork 0

Fix database connection with sockets

- Reformat Database\Database.php file
- Reformat and fix spelling in static/defaults.config.php file
This commit is contained in:
Hypolite Petovan 2022-11-19 19:07:43 -05:00
parent 5a2a8db21f
commit 2a4985cd46
2 changed files with 88 additions and 83 deletions

View file

@ -112,23 +112,22 @@ class Database
$port = 0; $port = 0;
$serveraddr = trim($this->configCache->get('database', 'hostname')); $serveraddr = trim($this->configCache->get('database', 'hostname'));
$serverdata = explode(':', $serveraddr); $serverdata = explode(':', $serveraddr);
$server = $serverdata[0]; $host = trim($serverdata[0]);
if (count($serverdata) > 1) { if (count($serverdata) > 1) {
$port = trim($serverdata[1]); $port = trim($serverdata[1]);
} }
if (!empty(trim($this->configCache->get('database', 'port')))) { if (trim($this->configCache->get('database', 'port') ?? 0)) {
$port = trim($this->configCache->get('database', 'port')); $port = trim($this->configCache->get('database', 'port') ?? 0);
} }
$server = trim($server);
$user = trim($this->configCache->get('database', 'username')); $user = trim($this->configCache->get('database', 'username'));
$pass = trim($this->configCache->get('database', 'password')); $pass = trim($this->configCache->get('database', 'password'));
$db = trim($this->configCache->get('database', 'database')); $database = trim($this->configCache->get('database', 'database'));
$charset = trim($this->configCache->get('database', 'charset')); $charset = trim($this->configCache->get('database', 'charset'));
$socket = trim($this->configCache->get('database', 'socket')); $socket = trim($this->configCache->get('database', 'socket'));
if (!(strlen($server) && strlen($user))) { if (!$host && !$socket || !$user) {
return false; return false;
} }
@ -138,19 +137,20 @@ class Database
if (!$this->configCache->get('database', 'disable_pdo') && class_exists('\PDO') && in_array('mysql', PDO::getAvailableDrivers())) { if (!$this->configCache->get('database', 'disable_pdo') && class_exists('\PDO') && in_array('mysql', PDO::getAvailableDrivers())) {
$this->driver = self::PDO; $this->driver = self::PDO;
$connect = "mysql:host=" . $server . ";dbname=" . $db; if ($socket) {
$connect = 'mysql:unix_socket=' . $socket;
} else {
$connect = 'mysql:host=' . $host;
if ($port > 0) { if ($port > 0) {
$connect .= ";port=" . $port; $connect .= ';port=' . $port;
}
} }
if ($charset) { if ($charset) {
$connect .= ";charset=" . $charset; $connect .= ';charset=' . $charset;
} }
if ($socket) { $connect .= ';dbname=' . $database;
$connect .= ";$unix_socket=" . $socket;
}
try { try {
$this->connection = @new PDO($connect, $user, $pass, [PDO::ATTR_PERSISTENT => $persistent]); $this->connection = @new PDO($connect, $user, $pass, [PDO::ATTR_PERSISTENT => $persistent]);
@ -165,10 +165,12 @@ class Database
if (!$this->connected && class_exists('\mysqli')) { if (!$this->connected && class_exists('\mysqli')) {
$this->driver = self::MYSQLI; $this->driver = self::MYSQLI;
if ($port > 0) { if ($socket) {
$this->connection = @new mysqli($server, $user, $pass, $db, $port); $this->connection = @new mysqli(null, $user, $pass, $database, null, $socket);
} elseif ($port > 0) {
$this->connection = @new mysqli($host, $user, $pass, $database, $port);
} else { } else {
$this->connection = @new mysqli($server, $user, $pass, $db); $this->connection = @new mysqli($host, $user, $pass, $database);
} }
if (!mysqli_connect_errno()) { if (!mysqli_connect_errno()) {
@ -177,11 +179,6 @@ class Database
if ($charset) { if ($charset) {
$this->connection->set_charset($charset); $this->connection->set_charset($charset);
} }
if ($socket) {
$this->connection->set_socket($socket);
}
} }
} }
@ -198,6 +195,7 @@ class Database
{ {
$this->testmode = $test; $this->testmode = $test;
} }
/** /**
* Sets the logger for DBA * Sets the logger for DBA
* *
@ -222,6 +220,7 @@ class Database
{ {
$this->profiler = $profiler; $this->profiler = $profiler;
} }
/** /**
* Disconnects the current database connection * Disconnects the current database connection
*/ */
@ -358,11 +357,15 @@ class Database
if ($log) { if ($log) {
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
@file_put_contents($this->configCache->get('system', 'db_log_index'), DateTimeFormat::utcNow() . "\t" . @file_put_contents(
$this->configCache->get('system', 'db_log_index'),
DateTimeFormat::utcNow() . "\t" .
$row['key'] . "\t" . $row['rows'] . "\t" . $row['Extra'] . "\t" . $row['key'] . "\t" . $row['rows'] . "\t" . $row['Extra'] . "\t" .
basename($backtrace[1]["file"]) . "\t" . basename($backtrace[1]["file"]) . "\t" .
$backtrace[1]["line"] . "\t" . $backtrace[2]["function"] . "\t" . $backtrace[1]["line"] . "\t" . $backtrace[2]["function"] . "\t" .
substr($query, 0, 4000) . "\n", FILE_APPEND); substr($query, 0, 4000) . "\n",
FILE_APPEND
);
} }
} }
} }
@ -743,10 +746,14 @@ class Database
$duration = round($duration, 3); $duration = round($duration, 3);
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
@file_put_contents($this->configCache->get('system', 'db_log'), DateTimeFormat::utcNow() . "\t" . $duration . "\t" . @file_put_contents(
$this->configCache->get('system', 'db_log'),
DateTimeFormat::utcNow() . "\t" . $duration . "\t" .
basename($backtrace[1]["file"]) . "\t" . basename($backtrace[1]["file"]) . "\t" .
$backtrace[1]["line"] . "\t" . $backtrace[2]["function"] . "\t" . $backtrace[1]["line"] . "\t" . $backtrace[2]["function"] . "\t" .
substr($this->replaceParameters($sql, $args), 0, 4000) . "\n", FILE_APPEND); substr($this->replaceParameters($sql, $args), 0, 4000) . "\n",
FILE_APPEND
);
} }
} }
return $retval; return $retval;
@ -1438,8 +1445,7 @@ class Database
} }
} }
array_walk($fields, function(&$value, $key) use ($options) array_walk($fields, function (&$value, $key) use ($options) {
{
$field = $value; $field = $value;
$value = DBA::quoteIdentifier($field); $value = DBA::quoteIdentifier($field);

View file

@ -43,7 +43,7 @@ return [
'socket' => '', 'socket' => '',
// user (String) // user (String)
// Database user name. Please don't use "root". // Database username. Please don't use "root".
'username' => '', 'username' => '',
// pass (String) // pass (String)
@ -64,7 +64,7 @@ return [
'pdo_emulate_prepares' => true, 'pdo_emulate_prepares' => true,
// disable_pdo (Boolean) // disable_pdo (Boolean)
// PDO is used by default (if available). Otherwise MySQLi will be used. // PDO is used by default (if available). Otherwise, MySQLi will be used.
'disable_pdo' => false, 'disable_pdo' => false,
// persistent (Boolean) // persistent (Boolean)
@ -145,7 +145,7 @@ return [
'block_local_dir' => false, 'block_local_dir' => false,
// blocked_tags (String) // blocked_tags (String)
// Comma separated list of hash tags that shouldn't be displayed in the trending tags // Comma separated list of hashtags that shouldn't be displayed in the trending tags
'blocked_tags' => '', 'blocked_tags' => '',
// community_no_sharer (Boolean) // community_no_sharer (Boolean)
@ -153,7 +153,7 @@ return [
'community_no_sharer' => false, 'community_no_sharer' => false,
// contact_update_limit (Integer) // contact_update_limit (Integer)
// How much contacts should be checked at a time? // How many contacts should be checked at a time?
'contact_update_limit' => 100, 'contact_update_limit' => 100,
// cron_interval (Integer) // cron_interval (Integer)
@ -259,7 +259,7 @@ return [
'disable_implicit_mentions' => false, 'disable_implicit_mentions' => false,
// disable_url_validation (Boolean) // disable_url_validation (Boolean)
// Disables the DNS lookup of an URL. // Disables the DNS lookup of a URL.
'disable_url_validation' => false, 'disable_url_validation' => false,
// disable_password_exposed (Boolean) // disable_password_exposed (Boolean)
@ -300,11 +300,11 @@ return [
// groupedit_image_limit (Integer) // groupedit_image_limit (Integer)
// Number of contacts at which the group editor should switch from display the profile pictures of the contacts to only display the names. // Number of contacts at which the group editor should switch from display the profile pictures of the contacts to only display the names.
// This can alternatively be set on a per account basis in the pconfig table. // This can alternatively be set on a per-account basis in the pconfig table.
'groupedit_image_limit' => 400, 'groupedit_image_limit' => 400,
// gserver_update_limit (Integer) // gserver_update_limit (Integer)
// How much servers should be checked at a time? // How many servers should be checked at a time?
'gserver_update_limit' => 100, 'gserver_update_limit' => 100,
// hsts (Boolean) // hsts (Boolean)
@ -330,7 +330,7 @@ return [
'ipv4_resolve' => false, 'ipv4_resolve' => false,
// invitation_only (Boolean) // invitation_only (Boolean)
// If set true registration is only possible after a current member of the node has send an invitation. // If set true registration is only possible after a current member of the node has sent an invitation.
'invitation_only' => false, 'invitation_only' => false,
// itemspage_network (Integer) // itemspage_network (Integer)
@ -483,7 +483,7 @@ return [
'paranoia' => false, 'paranoia' => false,
// permit_crawling (Boolean) // permit_crawling (Boolean)
// Restricts the search for not logged in users to one search per minute. // Restricts the search for not logged-in users to one search per minute.
'permit_crawling' => false, 'permit_crawling' => false,
// pidfile (Path) // pidfile (Path)
@ -491,7 +491,7 @@ return [
'pidfile' => '', 'pidfile' => '',
// png_quality (Integer) // png_quality (Integer)
// Sets the ImageMagick compression level for PNG images. Values ranges from 0 (uncompressed) to 9 (most compressed). // Sets the ImageMagick compression level for PNG images. Values range from 0 (uncompressed) to 9 (most compressed).
'png_quality' => 8, 'png_quality' => 8,
// profiler (Boolean) // profiler (Boolean)
@ -568,11 +568,11 @@ return [
'set_creation_date' => false, 'set_creation_date' => false,
// show_global_community_hint (Boolean) // show_global_community_hint (Boolean)
// When the global community page is enabled, use this option to display a hint above the stream, that this is a collection of all public top-level postings that arrive on your node. // When the global community page is enabled, use this option to display a hint above the stream, that this is a collection of all public top-level postings that arrive at your node.
'show_global_community_hint' => false, 'show_global_community_hint' => false,
// show_received (Boolean) // show_received (Boolean)
// Show the receive data along with the post creation date // Show the received date along with the post creation date
'show_received' => true, 'show_received' => true,
// show_received_seconds (Integer) // show_received_seconds (Integer)
@ -609,13 +609,13 @@ return [
// username_min_length (Integer) // username_min_length (Integer)
// The minimum character length a username can be. // The minimum character length a username can be.
// This length is check once the username has been trimmed and multiple spaces have been collapsed into one. // This length is checked once the username has been trimmed and multiple spaces have been collapsed into one.
// Minimum for this config value is 1. Maximum is 64 as the resulting profile URL mustn't be longer than 255 chars. // Minimum for this config value is 1. Maximum is 64 as the resulting profile URL mustn't be longer than 255 chars.
'username_min_length' => 3, 'username_min_length' => 3,
// username_max_length (Integer) // username_max_length (Integer)
// The maximum character length a username can be. // The maximum character length a username can be.
// This length is check once the username has been trimmed and multiple spaces have been collapsed into one. // This length is checked once the username has been trimmed and multiple spaces have been collapsed into one.
// Minimum for this config value is 1. Maximum is 64 as the resulting profile URL mustn't be longer than 255 chars. // Minimum for this config value is 1. Maximum is 64 as the resulting profile URL mustn't be longer than 255 chars.
'username_max_length' => 48, 'username_max_length' => 48,
@ -738,8 +738,7 @@ return [
'config_dir' => 'view/smarty3', 'config_dir' => 'view/smarty3',
// use_sub_dirs (Boolean) // use_sub_dirs (Boolean)
// By default the template cache is stored in several sub directories. // By default the template cache is stored in several subdirectories.
//
'use_sub_dirs' => true, 'use_sub_dirs' => true,
], ],
]; ];