为现有 MySQL 安装配置 PHP

为现有 MySQL 安装配置 PHP

我正在接管一位前任的基本行政职责技术我的客户的员工。在 CentOS 服务器上,我有以下内容:

Apache、PHP 和 MySQL。他安装了 PHP,但没有配置 MySQL 扩展(我猜是因为服务器只托管基于 rails 的网站)。

因此我需要重新配置 PHP 以使用 MySQL 扩展。这是当前的 PHP 配置(来自 phpinfo(); ):

'./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

是的,我正在使用虚拟主机。这是我的配置文件:

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.

解决了

我刚刚在 PHP 配置中添加了 --with-mysql(无路径)并重新安装它,PHP 显然自己从 MySQL 中找到了所需的内容。感谢大家的见解。

答案1

除非 mysql 安装在非标准位置,否则您应该能够只指定 --with-mysql 而不指定路径。您可能还需要 --with-mysqli 来获取新的改进的 mysql 界面。

答案2

更新

您使用的是虚拟主机吗?您可以检查一下。一个 Apache 配置树(一个 Apache 进程)只允许一个 PHP 实例。在不同的虚拟主机中声明多个 PHP 实例无效。

答案3

关于您的更新: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 的 shell,但有人告诉我,您只需执行“pecl install mysql”和“pecl install mysqli”即可。如果您使用 pecl,则可以将 mysql.so 和 mysqli.so 添加为 php.ini 中的 extension= 行,确保您的 extension_dir 正确。但是,按照您的做法,mysql 支持应该编译到 php 本身中,这样就没有必要对 php.ini 进行任何添加。

最后 - 仅从个人经验来看,如果您继续乱七八糟地重新编译 php,并且开始遇到非常奇怪的链接器错误(或一般奇怪的问题),请先备份您的 Makefile/config.h 并执行 make clean。这将清除所有中间对象文件。

呃,还有一点需要注意 - 如果您从命令行使用 php -i 来获取 phpinfo();,请创建一个 phpinfo.php 测试文件,因为 cli 和 apache 模块可以有不同的 php.ini 文件。

现在我已经完成了这个后续工作,我不确定它是否真的能解决你的问题,但希望它能有所帮助。

答案4

几天前我写了一篇关于在 Linux 上编译 PHP 的文章:http://users.livejournal.com/__hedin/182480.html

抱歉,这是俄语的(我现在无法翻译)。你可以改用谷歌翻译。

简而言之,您应该在 x64 Fedora 上使用此选项:

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

在 make && make install 之后检查 libphp5.so 是否出现在你的 apache 模块目录中

相关内容