我会让我的员工联系您的人

作者:Marcel Gagné

Bon soir, mes amis. 很高兴再次见到你们。什么?不,弗朗索瓦,我认为现在不是时候。我们有客人。接个留言,我稍后会回电。请原谅我,mes amis。自从我们开始分发新的在线电话簿以来,弗朗索瓦就忙得不可开交。我那鲁莽的服务员把我们的名字作为默认记录放在了每个数据库中,现在每个人都在打电话!Mon Dieu!

电话簿?当然。事实上,为了庆祝本月发行的“Linux 背后的英雄”特刊,我们正在烹制一个基于网络的电话簿,它使用丰富但低热量的开源软件和我们的秘密配料 Linux。我想你会发现这个食谱非常有趣且实用,non? 如果你从不和他们交谈,了解这些人有什么意义呢?这就是为什么弗朗索瓦的母亲坚持要把她的名字放进去。我开玩笑的。请坐,mes amis,让我向您展示如何创建您自己的基于网络的电话簿,它肯定会成为您内联网的核心。为了增加趣味,这个奇妙的内联网甚至还提供了一个出/入板。

弗朗索瓦!给我们的客人拿些酒来。Vite!

I'll Have My People Call Your People

图 1. Web 电话簿的搜索界面

在我们深入了解这个食谱的精华之前,我建议您看看图 1,它显示了管理搜索界面。标准用户的界面与之类似,但没有添加用户的选项。图 2 显示了一个相当广泛的搜索结果。请注意灰色和红色按钮,它们允许您修改或删除条目。

I'll Have My People Call Your People

图 2. 管理搜索结果界面

我们的电话簿完全用 Perl 编写,并使用 PostgreSQL 存储条目。在我深入之前,我将告诉您您需要什么:

  • PostgreSQL

  • 来自 CPAN 的 PostgreSQL 的 DBD 和 DBI 模块

  • cgi-lib.pl Perl 库

很可能,您的系统上已经加载了 Perl。大多数发行版都将其作为标准安装的一部分包含在内。您还应该运行 Apache Web 服务器。同样,您极有可能已将 Apache 与您的系统一起安装。

准备工作

PostgreSQL 可以在 PostgreSQL 官方网站上找到,并且在大多数情况下,也可以在您的 Linux 发行版 CD 上找到。对于我的 Red Hat 系统,只需使用 rpm 命令安装 PostgreSQL 即可。

rpm -ivh postgresql-6.5.2-1.i386.rpm
rpm -ivh postgresql-devel-6.5.2-1.i386.rpm
rpm -ivh postgresql-server.6.5.2-1.i386.rpm

根据您获取和加载 PostgreSQL 的时间,数字可能会有所不同。此安装过程中发生的部分事情是创建一个 postgres 用户。为该用户分配密码后,以 postgres 身份登录并初始化数据库环境。请记住,路径可能因您的安装而异。

initdb --pglib=/usr/lib/pgsql --pgdata=/var/lib/pgsql
接下来,您需要创建一些默认的 PostgreSQL 用户。如果您以 root 身份安装(为了访问 Perl 目录、cgi 目录等),则必须添加 root 用户。用户“nobody”也一样。这通常是您的 httpd 服务器的用户。有些人有一个名为“www”的用户来运行 Web 服务。我将使用“nobody”作为我的用户,您可以根据您的服务器配置使用任何用户。首先以 postgres 用户身份登录,然后执行以下命令将用户 root 和 nobody 添加到您的 PostgreSQL 系统
createuser root
系统将提示您输入 root 的 UID(接受默认值)以及是否允许用户 root 创建数据库。回答“y”。当被问及是否允许 root 创建用户时,我回答“n”。现在,对用户 nobody 执行相同的操作。唯一的区别是,对于是否允许 nobody 创建数据库的问题,我也回答“n”。根据您使用的 PostgreSQL 版本,关于是否允许用户创建其他用户的问题可能会这样措辞
Is user "whoever" a superuser?
答案仍然是 n,或“否”。最后,在创建 nobody 用户后,系统会询问您是否应该让 createuser 为 nobody 创建数据库。回答“y”,您就完成了创建用户。

DBDDBI 模块都可以在 CPAN FTP 站点上找到,CPAN FTP 站点是 Web 上一个巨大的 Perl 资源。由于这两个模块位于略微不同的目录中,我将同时为您提供这两个目录:ftp://ftp.cpan.org/CPAN/modules/by-module/DBI/ftp://ftp.cpan.org/CPAN/modules/by-module/DBD/

在撰写本文时,最新和最棒的 DBI 版本是 DBI-1.13.tar.gz,而 DBD 的重量为舒适的 DPD-Pg-0.93.tar.gz。

DBI 模块是所有各种数据库通用的,但 DBD 模块必须是特定的。DBD 模块适用于众多数据库,例如 Oracle、Informix,当然还有 PostgreSQL。DBI 是 Perl5 与数据库系统接口的应用程序程序接口 (API)。其目的是提供一组一致的模块和调用,以便数据库访问代码具有可移植性,而无需过多麻烦。但是,由于每个数据库都会有所不同,因此 DBD 模块会发挥作用来考虑这些差异。

有关 DBI 如何工作的更多信息,请访问此地址:www.isc.org/services/public/lists/dbi-lists.html。您不需要这些信息也能够烹制今天的食谱,但这会使以后的阅读变得有趣。

首先安装 DBI 模块,方法是将发行版解压缩到某个临时目录中,然后按照以下步骤操作

cd /usr/local/temp_dir
tar -xzvf DBI-1.13.tar.gz
cd DBI-1.13
perl Makefile.PL
make
make test
make install

Tres simple. 要安装 DBD 模块,过程类似。最新版本的 DBD 模块现在要求您在安装发生之前设置几个环境变量。这些是 POSTGRES_LIBPOSTGRES_INCLUDE

POSTGRES_LIB=/usr/lib/pgsql
export POSTGRES_LIB
POSTGRES_INCLUDE=/usr/include/pgsql
export POSTGRES_INCLUDE
现在,您可以运行安装
cd /usr/local/temp_dir
tar -xzvf DBD-Pg-0.93.tar.gz
cd DBD-Pg-0.93
perl Makefile.PL
make
make test
make install
您需要的最后一个配料是 Perl 的 cgi-lib.pl 库。这已成为使用表单进行 CGI 设计的虚拟(事实上的)标准。浏览到以下地址并将文件保存到您的 /usr/lib/perl5 目录:http://cgi-lib.berkeley.edu/

如果您的 Perl 库位于不同的目录中(例如,/usr/local/lib/perl5),您将需要修改每个 cgi-bin perl 脚本顶部的 require /usr/lib/perl5/cgi-lib.pl 行,以反映您自己的目录结构。

烹饪说明(安装)

完成所有这些步骤后,我们几乎拥有了继续进行实际电话簿创建和构建所需的所有部分。如果您尚未这样做,请从 Salmar 网站的下载部分或 Linux Journal FTP 网站(请参阅“资源”)获取电话簿的发行版。

tar、gzip 压缩的发行版文件旨在解压缩到 Apache 服务器的标准 Red Hat 文件结构中,即 /home/httpd/html 和 /home/http/cgi-bin。

cd /home/httpd
tar -xzvf /path_to/phonebook.tar.gz

文件列表如下所示

html/sciphb/
html/sciphb/index.html
html/sciphb/admin/
html/sciphb/admin/index.html
cgi-bin/sciphb/
cgi-bin/sciphb/admin/
cgi-bin/sciphb/admin/getphoneinfo.pl
cgi-bin/sciphb/admin/updphone.pl
cgi-bin/sciphb/admin/getphone.pl
cgi-bin/sciphb/admin/createphdbs.pl
cgi-bin/sciphb/ugetphone.pl
cgi-bin/sciphb/getnextkey.pl
如果您从默认源发行版构建的二进制文件运行 Apache,则这些目录很可能是 /usr/local/apache/htdocs 和 /usr/local/apache/cgi-bin。如果是这种情况,您可以将文件解压缩到临时目录,并将 sciphb 目录移动到相应的 cgi-bin 和 html/htdocs。由于总是有不止一种方法可以做到这一点,您可以像这样创建符号链接
mkdir /home/httpd
ln -s /usr/local/apache/htdocs /home/httpd/html
ln -s /usr/local/apache/cgi-bin /home/httpd/cgi-bin
一切都将从这里正常工作,但您可能需要验证 Perl 的路径。cgi-bin/sciphb 目录中的 .pl 文件都从 /usr/bin/perl 调用 Perl。如有必要,请更改这些文件的第一行以反映您的 Perl 二进制文件的实际路径。

让它慢炖几秒钟,然后将目录更改为 admin cgi 脚本位置

cd /home/httpd/cgi-bin/sciphb/admin

在那里,您会找到一个名为 createphdbs.pl 的文件,该文件(奇怪的是)将创建使用电话簿所需的数据库。这个包非常简单,我相信它会为有抱负的厨师提供充足的灵感,以进行进一步的开发。脚本数量很少,但浏览每个脚本会占用太多空间,并极大地利用这家优秀出版物的盛情款待。但是,我想向您展示此在线目录的 PostgreSQL 表创建。请记住,这只是一个代码片段(列表 1),而不是最终产品。第一部分显示了使用 Perl DBI 创建电话数据库的设置和初始调用。特别注意以 开头的行

$dbh = DBI->connect("dbi:Pg:dbname=$dbmain",
dbi:Pg 标识数据库接口类型 (DBD);在本例中,Pg 代表 PostgreSQL。

列表 1

列表 2 是实际数据库创建的一部分。请注意整个过程中的 $dbh 调用。这些是使 DBI 环境可移植的原因。一旦建立了 DBD(如上面的 connect 语句中所示),如果您要使用另一个数据库,则几乎不需要修改此代码。

列表 2

当然,还有更多,但您必须下载脚本才能满足您的胃口。

服务建议:您完成的电话簿

电话簿有两个不同的界面:一个仅用于查找,另一个用于查找和更新。如果您愿意,如果您满足于允许组织中的任何人更新电话簿信息,则可以仅使用管理页面。修改 index.html 文件以调入管理页面仅需要更改要调入的实际页面。要访问默认用户界面,请使用此链接http://your_server/sciphb/.

I'll Have My People Call Your People

图 3. 通过电话簿管理添加用户

此页面的管理版本(允许添加用户、修改记录和删除)可以通过访问此地址来访问http://your_server/sciphb/admin/.

我建议您将用户部分和管理部分分开。让一些特定用户负责更新电话簿,信息应该继续有意义。

您可能还会考虑更改可用字段。例如,目录的进/出板方面可能不适合您。也许您需要另一个字段。借助提供的脚本和少量时间,修改此电话目录以满足特定需求应该非常简单。

再次,mes amis,快要结束了。经常有您光临的乐趣,怎么说呢,给我的酒窖带来了“压力”。呵呵!我必须补充一下,non?没关系,mes amis。厨师马塞尔只是在开玩笑。总是有更多的酒,但门,它们必须在某个时候关闭。直到下次,享受那个在线电话簿。记住 - 您永远在 Chez Marcel 受到欢迎。Bon Appétit!

I'll Have My People Call Your People
Marcel Gagné (mggagne@salmar.com) 居住在安大略省密西沙加市。在现实生活中,他是系统集成和网络咨询公司 Salmar Consulting Inc. 的总裁。他也是一名飞行员,撰写科幻小说和奇幻小说,并编辑科幻、奇幻和恐怖杂志 TransVersions。他热爱 Linux 和所有 UNIX 版本,甚至会公开承认这一点。
加载 Disqus 评论