使用PDO MySQL编译PHP 5.1.6

3

我最初在ServerFault上提出了这个问题,但没有得到任何回应,我认为这与编程有关,所以在这里再次提问...


一段时间以前,我们的一个大客户转移到了一个单一的托管提供商,该提供商规定了一个软件环境,该环境将在所有实时服务器上保持一致。

除其他事项外,这包括Apache 2.2.8和PHP 5.1.6。

我们有一个Ubuntu 8.04服务器用于开发,而这些版本的Apache和PHP不是默认安装的。因此,我必须从源代码进行编译。这些版本已经愉快地运行了一年多。

我们正在开始一个新的站点构建,并希望使用需要PDO_MySQL的ZendFrameword。

我尝试重新编译以下内容...(下划线表示继续行)

./configure --with-apxs2=/usr/local/apache2/bin/apxs _
--with-config-file-path=/user/local/apache2/conf/php.ini _
--with-curl=/usr/lib/ --with-mysql=shared --with-mysqli=shared _
--with-zlib --with-gd --with-jpeg-dir=/usr/local/lib/ _
--with-freetype-dir=/usr/lib/ --enable-soap --enable-pdo=shared _
--with-pdo-mysql=shared --with-sqlite=shared
...
make
...
make install
...
libtool --finish /sources/php-5.1.6/libs

所有的工作都很好,当我重新启动apache时,在phpinfo()中显示了新的./configure。

但在这样做后,MySQL停止工作,MYSQL部分消失且无法使用。

make、make install、libtool等操作将*.so文件放置在

/usr/local/lib/php/extensions/no-debug-non-zts-20050922中。

我之前使用的配置可以启用MySQL,但不能启用PDO。

./configure --with-apxs2=/usr/local/apache2/bin/apxs _
--with-config-file-path=/user/local/apache2/conf/php.ini _
--with-curl=/usr/lib/ --with-mysql --with-mysqli _
--with-zlib --with-gd --with-jpeg-dir=/usr/local/lib/ _
--with-freetype-dir=/usr/lib/ --enable-soap

我不是*nix专家,有人能告诉我错在哪里吗?

谢谢


5.2.10/5.3.0 是当前稳定版本。您确定要使用可能存在已知安全漏洞的三年前版本吗? - Kornel
不久前,我们的一个大客户转移到了单一托管提供商,该提供商规定了一种软件环境,以确保所有实时服务器的一致性。 - Greg B
@porneL 我们处于必须使用已有资源的境地。客户规模相当庞大(全球数百个品牌),因此迁移到不同版本是一项巨大的任务。"如果它没出问题,就别修理它"等等... - Greg B
2个回答

3

我不确定这样做是否真的有帮助,但如果您在配置行中删除每个"=shared"实例会怎样呢?

例如,以下是我以前使用过的一个配置命令*(由phpinfo给出)*:

$ /usr/local/php-5.1.6/bin/php -i | grep 'configure'
Configure Command =>  './configure' '--prefix=/usr/local/php-5.1.6' '--with-config-file-path=/etc/php-5.1.6' 
  '--with-apxs2=/usr/bin/apxs2' '--disable-ipv6' '--with-openssl' '--with-zlib' '--enable-bcmath' 
  '--with-bz2' '--with-curl' '--enable-exif' '--enable-ftp' '--with-gd' '--with-ttf' 
  '--enable-gd-native-ttf' '--with-imap-ssl' '--with-ldap' '--enable-mbstring' '--with-mcrypt' 
  '--with-mhash' '--with-mysql' '--with-mysqli' '--enable-pcntl' '--with-pdo-mysql' '--with-pdo-sqlite' 
  '--enable-shmop' '--enable-soap' '--enable-sockets' '--enable-sqlite-utf8' '--with-xmlrpc' 
  '--with-xsl' '--with-pear'

这有帮助吗?


那个可行。我真的应该自己想到那个。不过,我很想看到使用共享模块的工作编译。只是作为一个学习练习。 - Greg B
好的,知道问题出在哪里很不错;实际上,“shared”这个词有点跳入我的眼帘,因为我从来没有用过它 ^^ - Pascal MARTIN
如果这解决了您的问题......是否可能是您只是忘记在php.ini(或另一个配置文件)中通过extension=php_pdo_mysql.so加载已编译为共享对象的模块? - VolkerK

-1

无需重新编译整个PHP。只需单独编译PDO_MYSQL模块即可。使用pecl进行安装:

pecl install PDO_MYSQL

为此,您需要安装phpize。在Debian机器上,它由名为php5-dev的软件包提供。之后,只需将其添加到您的php.ini中并重新启动Apache。

如果您使用的是Debian/Ubuntu系统,则可以在名为php5-mysql的软件包中找到PDO_MYSQL。


从我的帖子中,“我们有一个用于开发的Ubuntu 8.04服务器,这些版本的Apache和PHP不是默认安装的。因此,我必须从源代码编译它们。” - Greg B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接