Linux

為現有 MySQL 安裝配置 PHP

  • December 12, 2009

我正在為我的客戶接管一名前技術員工的基本管理職責。在 CentOS 伺服器上,我有以下內容:

阿帕奇、PHP 和 MySQL。他安裝了 PHP,但沒有使用 MySQL 擴展配置它(我假設是因為伺服器只託管一個基於 rails 的網站)。

所以我需要重新配置 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/include/mysql/ /usr/share/mysql/

誰能在這裡指出我正確的方向?我只是不知道在 PHP 配置中與 –with-mysql 一起使用哪個目錄。

更新

好的,所以我重新配置並重新製作並安裝了 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 配置樹(一個 apache 程序)只允許一個 PHP 實例。在不同的虛擬主機中聲明多個 PHP 實例無效。

引用自:https://serverfault.com/questions/93557