У меня свой сервер. На нем поднят Apache и PHP 5.2.0. Так же есть сервер MySQL 5.0.27. У PHP стоят только те расширения, что мне нужно. В частности мне не нужно расширение mysql, но мне нужно расширение mysqli. Владея такой конфигурацией решил поставить Worpdress. К своему удивлению обнаружил, что WordPress не знает ничего о расширении mysqli. Так же есть пробелы при описании классов. В частности, при описании классов не описаны все поля класса, что для версий PHP5 не есть правильно. Но это на самом деле мелочи. Ниже я опишу процесс подключения поддержки расширения mysqli. Благодаря архитектуре WordPress, не составит большого труда наладить работу и с другими СУБД.
- Идем в директорию wp-includes. Делаем копию файла wp-db.php и даем копии имя db.php. Копию кладем в туже директорию, что и wp-db.php.
- Открываем файл и правим в нем все функции mysql_* на соответствующие им функции mysqli_*. При этом не забываем, что нужно обязательно указывать идентификатор ресурса результата запроса. Кстати, этот идентификатор не описан в классе. Поэтому выполняем пункт 3.
- Описываем в классе забытое, но нужное свойство $dbh, добавляя строку var $dbh где-то в районе дислокации всех var класса wpdb.
- Что-то какие-то непонятки с экранированием строк, которые поступают в запросы. Из-за каких-то непонятных мне причин разработчики решили просто прослешивать функцией 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);
} - Сохраняем изменения, закрываем файл. Или качаем db.php.
- Идем в директорию wp-admin.
- Делаем копию файл upgrade-functions.php и называем ее upgrade-ifunctions.php.
- Открываем upgrade-ifunctions.php и изменяем функцию:
- В директорию 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 попробует подключить его, а если не найдет этот файл, то подключит стандартный врапер, к которому и пальцем не прикасались.
- В той же директории находим файл 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, к которому и пальцем не прикасались.
- В той же директории находим файл 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’); - В той же директории находим файл 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 заканчивается слешем, а тут еще один прицепили.
- Последний рывок. Идем в корневую директорию распакованного движка, открываем файл 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’);
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 раза).
Если я ничего не забыл, то все готово для инсталяции WordPress на сервере с конфиграцией PHP5 с расширением mysqli, но без расширения mysql, а так же самой СУБД MySQL. Если что-то упустил — комментируйте, но сначала попробуйте отладить самостоятельно!
P.S. Отредактированные файл выложить не могу — не позволяют настройки WordPress.
Предупреждение. Если вы выделяете и копируете тексты из блога, то исправляйте кавычки. В блоге кавычки обратные и скрипт с такими кавычками корректно работать не будет!!!!!
Спасибо, очень пригодилась инфа
комментарий от Yuzle — Март 29, 2007 @ 1:54 пп
Поделитесь впечатлением — стоит оно того — изворачиваться на переделке двига ? что это реально дает ?
комментарий от BookMap — Апрель 15, 2007 @ 10:23 пп
Полезные скрипты, надо взять на вооружение. Спасибо!
комментарий от Виктор — Май 13, 2008 @ 2:55 пп