大顽石

凡事太紧,缘分必早尽

  IT博客 :: 首页 :: 联系 :: 聚合  :: 管理
  9 Posts :: 0 Stories :: 14 Comments :: 0 Trackbacks

我的linux虚拟机上,原来的情况是:
Fedora Core (2.6.9-1.667)

httpd版本2.0.52-3
mysql版本3.XXX(忘了)
php版本:4.3.9
这些都是安装linux的时候给安装上去的。它们配合工作还都正常。

最后成功配置:
httpd版本:2.0.52-3
mysql版本:4.1.22
php(含gd):5.2.4

过程如下:
想安装bugzilla3.1.4来玩玩。可是这个bugzilla抱怨我的mysql版本太低,没办法,找了个mysql 4.1.22的rpm来安装。

1,MySQL的安装
由于原来已经有了个mysql,用rpm -Uvh mysql-xxxxx.rpm的时候,它有一堆的抱怨。大怒,用命令:
rpm -Uvh mysql-xxxxx.rpm --force --nodeps
来给它强制安装。安装mysql的话,最好把server, client, devel的包都给安装了。dev的包好像在安装bugzilla的时候有用到的。

强扭的瓜果然不甜的。我重新启动了一下httpd,果然httpd抱怨出错了。不过在它的抱怨中,还是说了点东西出来:libmysqlclient.so.10找不到了。郁闷。它为什么不找libmysqlclient.so,而要找libmysqlclient.so.10来链接呢?我安装了新的mysql4.1.22,这个libmysqlclient.so.10已经变为libmysqlclient.so.14了。干脆霸王硬上弓,把libmysqlclient.so.14拷贝一份,改名为libmysqlclient.so.10,再重启httpd,嘿,好了!

顺便把linux骂一遍:不同版本,不同软件之间的偶合搞那么强,有几个用户能够搞的定的?

走到这里,下面已经可以安装bugzilla了。和bugzilla的搏斗这里省去。

2,php的安装。
玩完了bugzilla后,回过头又想来玩GD和jpgraph了。用phpinfo()查了一下我的Php4,没有包括GD的。好,不是4.3.9吗,我下一个src下来再编译一次。这下开始了我噩梦般的历程。
./configure配置好后,进行make。恶心的编译错误出来了。在网上找啊找,看看是什么配置不对。尝试来尝试去,不是这里有错误,就是那里有错误。就这样,两天过去了。干脆发狠心,来个霸王硬上弓,根据错误,一个一个来修改。主要的错误的修正方法有如下几类:
--- 某些开关要定义。比如#define HAVE_BCOPY等等。
--- 可能也是某些开关不对,导致编译器抱怨系统头文件定义有重复。比如说<string.h>中有重复定义。Shit! 我把#include <string.h>放到#include "php.h"前就好了。
--- 还有就是上面两种错误的组合。比如有时候发现两个头文件,谁放在前面都会导致错误。这时候就除了调整位置外,还要看文件中的编译开关,进行恰当的设置。

当然,虽然花了我一天的时间,把问题一个一个摆平,都要快绝望的时候,编译通过了。哈哈哈!

可是别高兴太早。link的时候又报出了一堆错误。哦,天啦。我彻底崩溃了。

没关系,咱们反正失业在家,有的是时间!
换了php4.4.9,还是make有一堆错误。我可不想再尝试修正开关了。
再换。当下到php5.2.4的时候,config好后,make居然一个错也没有!哦,太伟大了。

#> ./configure  --prefix=/usr/local/php --with-mysql=/usr --with-apxs2=/usr/sbin/apxs
然后make, make install,居然顺利ok了。

然而,在和httpd组合的时候,却发生了问题:依照通常的说法,我把php.ini放到了编译时候指定的位置:#> cp php.ini-dist /usr/local/php/lib/php.ini,然后把libphp5.so拷贝到httpd的module目录下。(我的httpd在/etc/httpd/modules下,因为是安装系统时候自动安装的)。
我的httpd是默认安装的,Httpd.conf在etc/httpd/conf下。
然后检查/etc/httpd/conf/httpd.conf,发现
LoadModule php5_module        modules/libphp5.so
已经在make install的时候配置好了。于是再自己添加了下面两句:
AddType application/x-httpd-php .php .phtml .html
AddType application/x-httpd-php-source .phps
并把index.php添加到DirectoryIndex中。
DirectoryIndex index.html index.html.var index.php

这时候出现的问题是:当我重新启动httpd的时候,好像是正常启动了。可是当我运行带php脚本的页面时候,就没有动静。检查/var/log/httpd/error.log,发现每次运行带php页面的时候,就有一个类似错误:
[notice] child pid 4165 exit signal Segmentation fault
真是奇怪了!

在没头苍蝇似的瞎尝试了一通后,我发现/etc/httpd下面和conf目录同级别有一个conf.d目录。进去后,发现里面还有很多***.conf文件,其中就有一个php.conf。
这是怎么回事?同时联想httpd.conf文件,感觉好像对php的配置也是有点问题(尽管我都手动修改了),比如:DirectoryIndex中原来居然没有index.php。而我原来的系统中httpd+php是能够正常工作的,尽管是Php4。于是我打开这个/etc/httpd/conf.d/php.conf文件,发现对Php的配置都在里面,而且里面赫然还是加载的老的php4:
LoadModule php4_module        modules/libphp4.so
下一个问题是,这个php.conf是如何被httpd.conf调用的呢?我查看httpd.conf,发现里面有一句:
# Load config file from the config directory “/etc/httpd/conf.d”
Include conf.d/*.conf
哦,Shit!原来是这样。于是把httpd.conf改回去,回头把php.conf给改为php5,然后再启动httpd,就OK啦。原来前面的问题是两个不同版本的php在那里闹的。

下一步,看看mysql是否和Php连接正常。用下面语句:
<?php
mysql_connect(“localhost”,”root”,”root”)
?>
来试一下,OK了。就不再折腾其它的了。

再下一步,把GD给编译进去,看看如何。
由于查看phpinfo没有看到GD(当然不会有,编译的时候没有包含进去的),所以再把Php5给编译一次看看。
#> ./configure  --prefix=/usr/local/php --with-zlib-dir=/usr/bin \
--with-mysql=/usr --with-apxs2=/usr/sbin/apxs \
--with-gd –enable-gd-native-ttf \
--with-ttf \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
Configure和make没想到那么顺利。把新生成的libphp5.so替换原来的就可以了。重启httpd,再查看phpinfo(),终于看到gd了。就好了。

下面,进行最后一步:尝试Jpgraph。
使用Jpgraph的时候,要注意把他的路径添加到php.ini的include_path中。这个的语法比较变态,一定要”.:/path1:/path2”的形式,而且不能够有空格。

好啦。
嗨,终于喘了一口气。回头再把linux骂一通:
软件间的兼容搞得如此复杂,难怪让人敬而远之。

posted on 2008-08-17 16:06 大顽石 阅读(674) 评论(1)  编辑 收藏 引用

Feedback

# re: 搏斗:http+mysql+php(GD) 2008-08-24 12:25 戴尔
使用http+mysql+php(GD) 这样的环境,是很节省系统资源的。  回复  更多评论
  

只有注册用户登录后才能发表评论。