X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=Civi%2FInstall%2FRequirements.php;h=4d2d3f72d423a3af9ab9497d850b315185765123;hb=b34b52944a0810b341118d2978459dd314f25c02;hp=13506a22b276cc2767e0e5a6c6f66d6762f45312;hpb=5fc836bff5adba9daa0c1099a72e7df2779604ef;p=civicrm-core.git diff --git a/Civi/Install/Requirements.php b/Civi/Install/Requirements.php index 13506a22b2..4d2d3f72d4 100644 --- a/Civi/Install/Requirements.php +++ b/Civi/Install/Requirements.php @@ -40,6 +40,7 @@ class Requirements { 'checkMysqlTrigger', 'checkMysqlThreadStack', 'checkMysqlLockTables', + 'checkMysqlUtf8mb4', ); /** @@ -582,4 +583,65 @@ class Requirements { return $results; } + /** + * @param $db_config + * + * @return array + */ + public function checkMysqlUtf8mb4($db_config) { + $results = array( + 'title' => 'CiviCRM MySQL utf8mb4 Support', + 'severity' => $this::REQUIREMENT_OK, + 'details' => 'Your system supports the MySQL utf8mb4 character set.', + ); + + $conn = $this->connect($db_config); + if (!$conn) { + $results['severity'] = $this::REQUIREMENT_ERROR; + $results['details'] = 'Could not connect to database'; + return $results; + } + + if (!@mysqli_select_db($conn, $db_config['database'])) { + $results['severity'] = $this::REQUIREMENT_ERROR; + $results['details'] = 'Could not select the database'; + mysqli_close($conn); + return $results; + } + + $r = mysqli_query($conn, 'CREATE TABLE civicrm_utf8mb4_test (id VARCHAR(255), PRIMARY KEY(id(255))) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ENGINE=INNODB'); + if (!$r) { + $results['severity'] = $this::REQUIREMENT_WARNING; + $results['details'] = 'It is recommended, though not yet required, to configure your MySQL server for utf8mb4 support. You will need the following MySQL server configuration: innodb_large_prefix=true innodb_file_format=barracuda innodb_file_per_table=true'; + mysqli_close($conn); + return $results; + } + mysqli_query('DROP TABLE civicrm_utf8mb4_test'); + + // Ensure that the MySQL driver supports utf8mb4 encoding. + $version = mysqli_get_client_info($conn); + if (strpos($version, 'mysqlnd') !== FALSE) { + // The mysqlnd driver supports utf8mb4 starting at version 5.0.9. + $version = preg_replace('/^\D+([\d.]+).*/', '$1', $version); + if (version_compare($version, '5.0.9', '<')) { + $results['severity'] = $this::REQUIREMENT_WARNING; + $results['details'] = 'It is recommended, though not yet required, to upgrade your PHP MySQL driver (mysqlnd) to >= 5.0.9 for utf8mb4 support.'; + mysqli_close($conn); + return $results; + } + } + else { + // The libmysqlclient driver supports utf8mb4 starting at version 5.5.3. + if (version_compare($version, '5.5.3', '<')) { + $results['severity'] = $this::REQUIREMENT_WARNING; + $results['details'] = 'It is recommended, though not yet required, to upgrade your PHP MySQL driver (libmysqlclient) to >= 5.5.3 for utf8mb4 support.'; + mysqli_close($conn); + return $results; + } + } + + mysqli_close($conn); + return $results; + } + }