Назад | Перейти на главную страницу

Настройка PHP для существующей установки MySQL

Я беру на себя основные административные обязанности бывшего технология сотрудник для моего клиента. На сервере CentOS у меня есть следующее:

Apache, PHP и MySQL. У него был установлен PHP, но он не настраивал его с расширением MySQL (я предполагаю, потому что на сервере размещался только веб-сайт на основе рельсов).

Поэтому мне нужно перенастроить PHP для использования расширения MySQL. Вот текущая конфигурация PHP (из phphinfo ();):

'./configure' '--build=i686-redhat-linux-gnu' '--host=i686-redhat-linux-gnu' '--
target=i386-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--
bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--
includedir=/usr/include' '--libdir=/usr/lib' '--libexecdir=/usr/libexec' '--
localstatedir=/var' '--sharedstatedir=/usr/com' '--mandir=/usr/share/man' '--
infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib' '--with-config-
file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--
disable-rpath' '--without-pear' '--with-bz2' '--with-curl' '--with-exec-dir=/usr/bin' '--
with-freetype-dir=/usr' '--with-png-dir=/usr' '--enable-gd-native-ttf' '--without-gdbm' '--
with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-
png' '--with-pspell' '--with-expat-dir=/usr' '--with-pcre-regex=/usr' '--with-zlib' '--
with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' 
'--enable-sysvsem' '--enable-sysvshm' '--enable-sysvmsg' '--enable-track-vars' '--enable-
trans-sid' '--enable-yp' '--enable-wddx' '--with-kerberos' '--enable-ucd-snmp-hack' '--
with-unixODBC=shared,/usr' '--enable-memory-limit' '--enable-shmop' '--enable-calendar' '--
enable-dbx' '--enable-dio' '--with-mime-magic=/usr/share/file/magic.mime' '--without-
sqlite' '--with-libxml-dir=/usr' '--with-xml' '--with-system-tzdata' '--with-
apxs2=/usr/sbin/apxs' '--without-mysql' '--without-gd' '--without-odbc' '--disable-dom' '--
disable-dba' '--without-unixODBC' '--disable-pdo' '--disable-xmlreader' '--disable-
xmlwriter'

Вы можете видеть, что у него --without-mysql там.

Когда вы настраиваете PHP для использования --with-mysql, вы должны правильно указать путь к mysql? Или источник mysql? Или что-то вроде того? Что-то вроде этого:

--with-mysql=/usr/local/mysql

Проблема с этой существующей установкой заключается в том, что MySQL уже установлен, за исключением того, что я не знаю, где он установлен ... Я знаю, что есть /etc/init.d/mysqld. Я также нашел следующие каталоги:

/ usr / lib / mysql / / usr / включить / mysql / / usr / share / mysql /

Может ли кто-нибудь указать мне здесь правильное направление? Я просто не знаю, какой каталог использовать с --with-mysql в конфигурации PHP.

ОБНОВИТЬ

Итак, я переконфигурировал, переделал и установил PHP. Теперь, когда я перезапускаю Apache, я получаю следующее:

[warn] module php5_module is already loaded, skipping

Это потому, что php уже был запущен на сервере раньше? Я посмотрел на httpd.conf, и там загружается только один экземпляр php5_module ...

Однако, если теперь посмотреть на phpinfo (); он показывает, что PHP используется в новой обновленной версии, которую я только что настроил / установил.

Кроме того, phpinfo (); показывает mysql как используемый, однако, когда я пытаюсь установить, скажем, Wordpress (который использует MySQL), Wordpress выдает эту ошибку:

Your PHP installation appears to be missing the MySQL extension which is required by WordPress.

Где мне теперь искать?

ОБНОВЛЕНИЕ # 2

По-прежнему нет решения. Я прошел настройку PHP, чтобы включить Mysql и phpinfo (); (да, я использую file.php для просмотра этого) показывает --with-mysql = shared, / usr (согласно предложению другого пользователя ниже). Однако PHP по-прежнему не распознает расширение MySQL как находящееся в конфигурации.

Я просто не понимаю, какой путь вы должны указать в конце --with-mysql =? Я нашел следующие каталоги:

/usr/bin/ contains:
mysql (executable?)

/usr/lib/mysql/ contains:
libdbug.a    libmyisammrg.a      libmysqlclient_r.so         libmysqlclient.so         libmystrings.a  mysqlbug
libheap.a    libmysqlclient.a    libmysqlclient_r.so.15      libmysqlclient.so.15      libmysys.a      mysql_config
libmyisam.a  libmysqlclient_r.a  libmysqlclient_r.so.15.0.0  libmysqlclient.so.15.0.0  libvio.a

/usr/include/mysql/ contains:
chardefs.h  keymaps.h       my_config.h       my_global.h      mysql_com.h      mysql_time.h     readline.h    sql_common.h       tilde.h
decimal.h   m_ctype.h       my_config_i386.h  my_list.h        mysqld_ername.h  mysql_version.h  rlmbutil.h    sql_state.h        typelib.h
errmsg.h    m_string.h      my_dbug.h         my_net.h         mysqld_error.h   my_sys.h         rlprivate.h   sslopt-case.h      xmalloc.h
history.h   my_alloc.h      my_dir.h          my_no_pthread.h  mysql_embed.h    my_xml.h         rlshell.h     sslopt-longopts.h
keycache.h  my_attribute.h  my_getopt.h       my_pthread.h     mysql.h          raid.h           rltypedefs.h  sslopt-vars.h

/usr/share/mysql/ contains:
charsets  english               french     italian      my-innodb-heavy-4G.cnf  mysql_fix_privilege_tables.sql  norwegian     romanian  spanish
czech     errmsg.txt            german     japanese     my-large.cnf            mysql_system_tables_data.sql    norwegian-ny  russian   swedish
danish    estonian              greek      korean       my-medium.cnf           mysql_system_tables.sql         polish        serbian   ukrainian
dutch     fill_help_tables.sql  hungarian  my-huge.cnf  my-small.cnf            mysql_test_data_timezone.sql    portuguese    slovak

Что-нибудь из этого помогает?

ОБНОВЛЕНИЕ 3

Да, я использую виртуальные хосты. Вот мой файл conf:

Listen 80
NameVirtualHost *:80

<VirtualHost *:80>
        ServerName thedomain.com
        ServerAlias www.thedomain.com
        DocumentRoot /u1/thedomain.com/public
        RailsEnv production
</VirtualHost>

<VirtualHost *:80>
        ServerName subdomain.thedomain.com
        DocumentRoot /u1/subdomain.thedomain.com/public
</VirtualHost>

Я пытаюсь установить базовую установку Wordpress на поддомене. Я все еще получаю эту ошибку:

Your PHP installation appears to be missing the MySQL extension which is required by WordPress.

Решено

Я просто добавил --with-mysql (без пути) в конфигурацию PHP и переустановил его, и PHP просто нашел то, что ему нужно от MySQL, очевидно. Всем спасибо за понимание.

Если mysql не установлен в нестандартном месте, вы можете просто указать --with-mysql без пути. вам также может понадобиться --with-mysqli, чтобы получить новый улучшенный интерфейс mysql.

Что касается вашего обновления: предупреждение apache сообщает вам, что модуль php5 apache уже был добавлен где-то в конфигурации. Если вы выполните настройку и, что более важно, добавите дополнительные файлы конфигурации, вы увидите что-то вроде:

#PHP Stuff
AddModule mod_php5.c

более чем в одном месте. Не бойтесь, это не важная ошибка, и вы можете просто проигнорировать ее (или используйте grep в своих файлах конфигурации, grep -ir 'mod_php5' /etc/httpd.d/*).

Что касается пути --with-mysql, в моем случае двоичные файлы mysql можно найти в / usr / local / bin / my * и / usr / local / sbin / my *, поэтому моя строка --with-mysql может можно увидеть здесь:

'./configure' '--with-pear' '--disable-cli' '--with-apache=/usr/src/apache_1.3.41' '--with-mysql=/usr/local' '--enable-safe-mode'

(это просто пример, он не обязательно будет подходить для вашей настройки). В вашем случае я бы попробовал --with-mysql = / usr / share / mysql (из заданных вами параметров он кажется наиболее правильным. Попробуйте ls / usr / share / mysql / bin / my * )

Если вы установили pecl вместе с php, вы можете использовать pecl для установки mysql / mysqli без перекомпиляции всего остального. Я обычно использую их cpan-подобную оболочку, но мне сказали, что вы можете просто выполнить «pecl install mysql» и «pecl install mysqli». Если вы используете pecl, вы можете добавить mysql.so и mysqli.so как extension = lines в вашем php.ini, убедившись, что ваш extension_dir верен. Однако, как вы это делаете, поддержка mysql должна быть скомпилирована в php сама по себе, что делает ненужными любые дополнения к php.ini.

Наконец, исходя из личного опыта, если вы продолжаете возиться с перекомпиляцией php и начинаете получать действительно странные ошибки компоновщика (или странные проблемы в целом), сделайте резервную копию вашего Makefile / config.h и сначала выполните make clean. Это очистит все промежуточные объектные файлы.

Эмм, еще одно замечание - если вы используете php -i из командной строки для получения вашего phpinfo () ;, создайте тестовый файл phpinfo.php, поскольку модули cli и apache могут иметь разные файлы php.ini.

Теперь, когда я действительно закончил это продолжение, я не уверен, что это действительно решит вашу проблему, но, надеюсь, это поможет.

ОБНОВИТЬ

вы используете виртуальные хосты? Вы можете это проверить. Только один экземпляр PHP разрешен для одного дерева конфигурации Apache (для одного процесса apache). Объявление нескольких экземпляров PHP на разных виртуальных хостах не дает никакого эффекта.

Несколько дней назад я написал сообщение о компиляции PHP в Linux: http://users.livejournal.com/__hedin/182480.html

Извините, но это на русский язык (и я не могу его сейчас перевести). Вместо этого вы можете использовать Google Translate.

Короче говоря, вы должны использовать эти параметры в Fedora x64:

-with-mysql = / usr / bin -with-libdir = lib64

и после make && make install проверьте, появился ли libphp5.so в вашем каталоге модулей apache

Вышеупомянутая строка configure не очень похожа на строку пакета PHP5 CentOS / RHEL PHP, поэтому я предполагаю, что PHP был настроен и установлен на машине вручную.

Для недавней машины CentOS / RHEL достаточно следующего флага в скрипте настройки PHP:

--with-mysql=shared,/usr

(как используется в официальном пакете CentOS / RHEL PHP).

Вам понадобится mysql и mysql-devel пакеты для успешной компиляции и использования библиотек MySQL.

Для справки: в системе CentOS / RHEL, полностью использующей управление пакетами, следующее установит PHP и расширение MySQL:

yum install php php-mysql

Локки