善意提醒

如果您打开本站很慢,布局排版混乱,并且看不到图片,那么可能是因为您还没有掌握用科学的方法上网的本领。

2006-03-24

OpenBSD研究手记(四)

终于轮到了最后的步骤,PHP。然而,没想到过程是意外的艰苦。按照以前设想的,以支持 MySQL、iconv、GD(PNG)、XML 为目的的 PHP 编译行动,却遇到了预想之外的麻烦。

当然,首先要准备好外围的库文件。要支持 iconv,需要 libiconv。要支持 GD,需要 libpng。而且我还得确认 libz 也要存在才行,GD 也需要它,虽然一般操作系统都有默认安装。

我个人比较喜欢用 locate 来在 Linux / Unix 系统上找文件。不过当前系统刚装,显然 locate 数据库中还没有信息,因此需要让数据库得到一次填充才行。在 RedHat Linux 上,可以通过 locate -u 来做到,可 OpenBSD 下面的 locate 根本没有 -u 这个选项。但是我知道 locate 的数据库肯定是有一个定期更新的定时事件的,通过查找 cron 的配置,我很快找到了 locate 数据库的更新者——/usr/libexec/locate.updatedb。这是个可执行程序,运行它就可以让 locate 自动扫描硬盘,生成所有文件的路径索引了。

用 locate,我轻易地发现了 libz,也确认了 libpng 和 libiconv 在 OpenBSD 上没有默认安装。这两个软件包,都可以从 http://www.openbsd.org/3.8_packages/i386.html(链接已失效)处下载。下载完了之后,将它们上传到 /usr/local,然后就地 tar -zxf 即可。多出来的 +DESC 和 +CONTENT 是一些说明性的文本,可以删掉。

外围的库文件准备好了。接下来,就该编译 PHP 本身了。我首先试用了在 RedHat Linux 上的 configure 参数。然而,在执行 ./configure 的时候出现了一些问题。按照提示的错误信息,我把 png.h 和 pngconf.h 在 /usr/include和/usr/local/include 处都做了 ln -s,并在参数中对 iconv、png 都手动指明路径。OK,configure 没问题了。

接下来是 make。这次出现了一些不同寻常的信息,说什么找不到 real path of libmysqlclient,只好编译成静态的版本。make install 之后,我草草修改了 httpd.conf,马上去看 phpinfo() 的结果。结果我沮丧地发现,除了 --with-apxs2 参数有生效,其它的参数全部都没有起作用。

当时我的机器非常的慢,完全编译一次要花二十分钟左右。因此我不得不第二天来接着处理这个问题。暂停一下,经过思考,我觉得,不可能所有的选项都有问题。我决定单独添加每个选项,逐个测试,看到底是哪个出了问题。而实践证明,这个方法是有效的。我发现会出问题的只有 --with-mysql=[dir] 这个选项,若去掉它,使用其它的选项都能正常编译。同时,也证明了 PHP 在编译的时候,选项的顺序也是可能会影响编译结果的。我之所以会仅仅生效一个 --with-apxs2,就是因为它的后面紧接着就是 --with-mysql=[dir],所以后面的选项全部失效掉了。

确定了是 MySQL 的问题就好说了。我注意到,不论是否在 --with-mysql 参数中指定 mysql 的安装路径,编译都能通过(这也正常,不指定路径,PHP 就使用自带的 mysqlclient 代码),但是若指定参数,就会出现那个错误信息。不过两者的 phpinfo() 并没有什么实质上的区别,mysqlclient 的版本都是 3.23.*。我试了一下,都无法连接 MySQL 5 的数据库。

无论如何都不行,我郁闷了。只有上 Google,嗬,还真有找到东东。一个叫 Kelly Martin 的人在 MySQL 的官方站点上报告了一条信息,说 MySQL for OpenBSD 3.8 的版本,别的都没有问题,就是和 PHP 4 / 5 编译的时候就会出错。他的帖子链接如下:

http://dev.mysql.com/doc/refman/5.0/en/openbsd.html(链接已失效)

按照他提供的办法。我从 MySQL 官方站点上下载了源代码分发版(5.0.19),根据他指定的参数进行了编译,然后安装 MySQL。果然,这次编译 PHP 不会出现问题了。phpinfo() 的信息也显示,mysqlclient 已经更新为 5.0.19 的版本。

然后,正式调整 httpd.conf 的内容。编辑主机名;修改 DocumentRoot;调整目录权限,把 Index 权限去掉;添加默认首页面文件名;调整编码字符集;至于 AddType application/x-httpd-php .php 那是早就做了。调整完后,重启 Apache,总算!大功告成!

没有评论:

发表评论