我正在接管一位前任的基本行政职责技术我的客户的员工。在 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 模块目录中