Записки самоучки

Февраль 6, 2007

WordPress 2.1 с поддержкой mysqli

Filed under: Движки,MySQL,PHP — 4matic @ 2:56 дп

У меня свой сервер. На нем поднят Apache и PHP 5.2.0. Так же есть сервер MySQL 5.0.27. У PHP стоят только те расширения, что мне нужно. В частности мне не нужно расширение mysql, но мне нужно расширение mysqli. Владея такой конфигурацией решил поставить Worpdress. К своему удивлению обнаружил, что WordPress не знает ничего о расширении mysqli. Так же есть пробелы при описании классов. В частности, при описании классов не описаны все поля класса, что для версий PHP5 не есть правильно. Но это на самом деле мелочи. Ниже я опишу процесс подключения поддержки расширения mysqli. Благодаря архитектуре WordPress, не составит большого труда наладить работу и с другими СУБД.

  1. Идем в директорию wp-includes. Делаем копию файла wp-db.php и даем копии имя db.php. Копию кладем в туже директорию, что и wp-db.php.
  2. Открываем файл и правим в нем все функции mysql_* на соответствующие им функции mysqli_*. При этом не забываем, что нужно обязательно указывать идентификатор ресурса результата запроса. Кстати, этот идентификатор не описан в классе. Поэтому выполняем пункт 3.
  3. Описываем в классе забытое, но нужное свойство $dbh, добавляя строку var $dbh где-то в районе дислокации всех var класса wpdb.
  4. Что-то какие-то непонятки с экранированием строк, которые поступают в запросы. Из-за каких-то непонятных мне причин разработчики решили просто прослешивать функцией addslashes():

    function escape($string) {
    return addslashes( $string ); // Disable rest for now, causing problems
    if( !$this->dbh || version_compare( phpversion(), ‘4.3.0’ ) == ‘-1’ )
    return mysql_escape_string( $string );
    else
    return mysql_real_escape_string( $string, $this->dbh );
    }

    Я вместо этого написал:

    function escape($string) {
    return mysqli_real_escape_string($this->dbh, $string);
    }

  5. Сохраняем изменения, закрываем файл. Или качаем db.php.
  6. Идем в директорию wp-admin.
  7. Делаем копию файл upgrade-functions.php и называем ее upgrade-ifunctions.php.
  8. Открываем upgrade-ifunctions.php и изменяем функцию:
  9. function wp_check_mysql_version() {
    global $wp_version;

    // Make sure the server has MySQL 4.0
    $mysql_version = preg_replace(‘|[^0-9\.]|’, », @mysql_get_server_info());
    if ( version_compare($mysql_version, ‘4.0.0’, ‘<‘) )
    die(sprintf(__(‘<strong>ERROR</strong>: WordPress %s requires MySQL 4.0.0 or higher’), $wp_version));
    }

    на

    function wp_check_mysqli_version() {
    global $wp_version;
    global $wpdb;

    // Make sure the server has MySQL 4.0
    $mysqli_version = preg_replace(‘|[^0-9\.]|’, », @mysqli_get_server_info($wpdb->dbh));
    if ( version_compare($mysqli_version, ‘4.0.0’, ‘<‘) )
    die(sprintf(__(‘<strong>ERROR</strong>: WordPress %s requires MySQL 4.0.0 or higher’), $wp_version));
    }

    Так же в этом файле поменяйте вызовы функции wp_check_mysql_version() на wp_check_mysqli_version() (2 раза).

  10. В директорию wp-admin находим файл setup-config.php и меняем в нем строку (у меня строка 154):

    require_once(‘../wp-includes/wp-db.php’);

    на:

    if ( file_exists(ABSPATH . ‘wp-content/db.php’) )
    require_once(‘../wp-includes/db.php’);
    else
    require_once(‘../wp-includes/wp-db.php’);

    Т.е. теперь, при наличии файла db.php — нашего враппера (обмертки) запросов к СУБД, WP попробует подключить его, а если не найдет этот файл, то подключит стандартный врапер, к которому и пальцем не прикасались.

  11. В той же директории находим файл install.php и меняем в нем строку (у меня строка 9):

    require_once(‘./upgrade-functions.php’);

    на:

    if ( file_exists(ABSPATH . ‘wp-admin/upgrade-ifunctions.php’) )
    require_once(ABSPATH . ‘wp-admin/upgrade-ifunctions.php’);
    else
    require_once(ABSPATH . ‘wp-admin/upgrade-functions.php’);

    Т.е. теперь, при наличии файла upgrade-ifunctions.php — «нашего файла», WP попробует подключить его, а если не найдет этот файл, то подключит стандартный файл upgrade-functions.php, к которому и пальцем не прикасались.

  12. В той же директории находим файл admin.php и меняем в нем строку (у меня строка 92):

    require_once(ABSPATH . ‘wp-admin/upgrade-functions.php’);

    на:

    if ( file_exists(ABSPATH . ‘wp-admin/upgrade-ifunctions.php’) )
    require_once(ABSPATH . ‘wp-admin/upgrade-ifunctions.php’);
    else
    require_once(ABSPATH . ‘wp-admin/upgrade-functions.php’);

  13. В той же директории находим файл upgrade.php и меняем в нем строку (у меня строка 8):

    require_once(ABSPATH . ‘/wp-admin/upgrade-functions.php’);

    на:

    if ( file_exists(ABSPATH . ‘wp-admin/upgrade-ifunctions.php’) )
    require_once(ABSPATH . ‘wp-admin/upgrade-ifunctions.php’);
    else
    require_once(ABSPATH . ‘wp-admin/upgrade-functions.php’);

    Кстати, обратите внимание, что лишний слеш, потому что ABSPATH заканчивается слешем, а тут еще один прицепили.

  14. Последний рывок. Идем в корневую директорию распакованного движка, открываем файл wp-settings.php, находим строку (у меня строка 100):

    require_once (ABSPATH . WPINC . ‘/wp-db.php’);

    на:

    if ( file_exists(ABSPATH . ‘wp-includes/db.php’) )
    require (ABSPATH . ‘wp-includes/db.php’);
    else
    require_once (ABSPATH . ‘wp-includes/wp-db.php’);

Если я ничего не забыл, то все готово для инсталяции WordPress на сервере с конфиграцией PHP5 с расширением mysqli, но без расширения mysql, а так же самой СУБД MySQL. Если что-то упустил — комментируйте, но сначала попробуйте отладить самостоятельно!

P.S. Отредактированные файл выложить не могу — не позволяют настройки WordPress.

Предупреждение. Если вы выделяете и копируете тексты из блога, то исправляйте кавычки. В блоге кавычки обратные и скрипт с такими кавычками корректно работать не будет!!!!!

3 комментария »

  1. Спасибо, очень пригодилась инфа

    комментарий от Yuzle — Март 29, 2007 @ 1:54 пп

  2. Поделитесь впечатлением — стоит оно того — изворачиваться на переделке двига ? что это реально дает ?

    комментарий от BookMap — Апрель 15, 2007 @ 10:23 пп

  3. Полезные скрипты, надо взять на вооружение. Спасибо!

    комментарий от Виктор — Май 13, 2008 @ 2:55 пп


RSS feed for comments on this post. TrackBack URI

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Создайте бесплатный сайт или блог на WordPress.com.

%d такие блоггеры, как: