最近几天, 尝试创建了一个基于LAMP的cgi项目,说是项目,其实只是一个小玩具,不过麻雀虽小,五脏俱全,本人由此得到了不少的体会.
本着相互交流,相互促进的原则(communicate可是我博客的主题呢!),我把具体过程给予一定的整理,由此发布出来,相当于固化学习成果了.

版权声明:本文为原创,转载请遵循"保持署名一致,非商业使用"原则.
**
概述:**
LAMP是一套开源的强大工具, 本次通过创建网页查询,从数据库中查询出相应记录并在网页上展示出来.
涉及以下部分,近期将依次发布,敬请留意:
    LAMP的安装和设置;
    mySQL数据库的创建及数据导入;
    使用CGI创建动态网页,对查询数据进行处理,返回查询结果.

LAMP的安装和设置

本人使用的linux发行版是Ubuntu Feisty(7.04),在这个版本中可以一键完成整个系统的安装.整个过程在ubuntu forum中有详述,在此不在赘述.
#在Apache服务器中进行cgi的设置.
在site-enabled的配置文件中,需要添加你的cgi脚本目录并给予相应的说明.

[code]
        ScriptAlias /mycgi/ /var/www/cgi/
    <Directory “/var/www/cgi/">
        AllowOverride None
        Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>
[/code]

首先定义一下alias,这样在服务器上输入mycgi则会在/var/www/cgi/目录执行.
很简单.需要注意的就是相应目录的权限,要给所有人以执行的权利(755) 设置完成之后,注意重启apache服务器,

sudo /etc/init.d/apache2 restart

创建mySQL数据库,并导入数据

#数据的结构
我们要导入的是一个科技论文影响因子的列表,如下显示了它的结构:

每一行是一个记录,共有四栏column,栏间以”,“相隔,分别是缩写的标题,06,05,04年的impact factor;

#创建数据库和导入上面的数据

注:shell>表示在命令行下输入的命令; mySQL>表示输入的sql命令;
shell>mysql -uroot -p
*****(root的密码)
mysql>create database test;
mysql>create table ifactor(
    myid int(6),
    title varchar(30) not null,
    if04 float,
    if05 float,
    if06 float
);
mysql>alter table ifactor add primary key(‘myid’);
mysql>alter table ifactor change myid int(6) auto_increment;
数据库的结构如下:

mysql>load data local infile ‘数据文件的绝对路径,eg,/home/test/Desktop/if.txt’
    into table ifactor(title,if06,if05,if04);
mysql>select * from ifactor limit 0,5;
至此,数据库建立完成.

#mysql查询,模式匹配简介

在mysql中可以使用两个命令进行模式匹配.一个是LIKE,一个是RLIKE(REGEXP);
前者使用”_“代替一个字符,”%“代替多个字符,RLIKE则使用扩展的正则表达式进行匹配.
如上第一条记录,可以写成:
mysql>select * from ifactor where title like ‘aap%bu%’; [后面必须有%,因为还有字符]
mysql>select * from ifactor where title rlike ‘aap.*bu’;
后面将要使用这个东西.

使用DBI,CGI

dbi和cgi是perl的模块, 因此使用dbi,cgi要对perl有所了解.
#建立cgi中使用的mysql账户(为了安全的考虑)
mysql>grant select on test.ifactor to test@localhost identified by ’testpasswd’;

下面的代码只是其中的一部分,请确保你的代码前面几行是这个东西:
[code]
#!/usr/bin/perl -w
use DBI;
use use CGI ‘:standard’;
use strict;
[/code]

#创建DBI,mysql数据库连接

my $dbh = DBI->connect(‘DBI:mysql:people’, ‘apache’, ’lampiscool’)
        or die “Can’t connect: " . DBI->errstr();
#进行数据库查询

    my $sth = $dbh->prepare(‘SELECT title,if04,if05,if06 FROM ifactor
                       WHERE title RLIKE ? ‘)
           or handle_error(“Can’t prepare SQL: " . $dbh->errstr(), $dbh);

    $sth->execute($query)
           or handle_error(“Can’t execute SQL: " . $dbh->errstr(),
                            $dbh, $sth);

#对查询结果进行处理

    my($title,$if04,$if05,$if06);
    while (($title,$if04,$if05,$if06) = $sth->fetchrow()) {
      print “<tr><th>$title</th><th>$if04</th><th>$if05</th><th>$if06</th></tr>\n”;
    }

作者简介

Chun-Hui Gao is a Research Associate at Huazhong Agricultural University.

重复使用

Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The source code is licensed under MIT. The full source is available at https://github.com/yihui/hugo-prose.

欢迎修订

如果您发现本文里含有任何错误(包括错别字和标点符号),欢迎在本站的 GitHub 项目里提交修订意见。

引用本文

如果您使用了本文的内容,请按照以下方式引用:

gaoch (2008). LAMP Project[part A]-概述:使用Linux,apache,mySQL和Perl创建cgi动态网页项目[上部]. BIO-SPRING. /post/2008/01/16/lamp-configuration/

BibTeX citation

@misc{
  title = "LAMP Project[part A]-概述:使用Linux,apache,mySQL和Perl创建cgi动态网页项目[上部]",
  author = "gaoch",
  year = "2008",
  journal = "BIO-SPRING",
  note = "/post/2008/01/16/lamp-configuration/"
}