首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>perl>正文

Linux环境中的Mod_perl编程介绍

http://www.oklinux.cn  2007-02-08  oklinux收集整理   会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn


  1. 介绍性指南
  mod_perl 是个庞大而复杂的工具,它内建了许多模块帮助你方便地构建动态网站。这篇指南的目的是帮助你构建一个良好的 mod_perl 模块,并从中理解 mod_perl 的实现技术。我并不推荐使用这里介绍的技术来建立一个大型站点,尤其对于一个刚刚涉足 mod_perl 的人来说。但我推荐大家可以深入看一下它的一些内建的方案,比如 Mason, AxKit, EmbPerl, Apache::ASP 和 PageKit 等等。
  
  1.1. 你需要什么?
  本指南假设你已经有过安装和测试 mod_perl 的经验。以及较新版本的 Apache 的安装经验。因为有可能你需要在你的机器上实现时适当的修改本文提供的配置。我们需要你安装一些模块并且需要进入 Apache 的配置目录作修改。所以最好你有 root 权限来做这些事情。当然你还需要一个文本编辑器。
  
  1.2. 切入正题
  mod_perl 模块也是 Perl 模块,但它有较为特别的设计。最方便的创建一个 Perl 模块的方法就是使用标准的 Perl 分发自带的工具 h2xs 。你可以在命令行模式键入 h2xs 来看看它的参数列表。现在,到一个适当的目录开始一个新项目,键入:
  
  h2xs -A -X -n Apache::Tutorial::First
  
  h2xs 将会创建目录 Apache, 以及其他一些子目录.现在进入最深一级的目录看看:
  
  cd Apache/Tutorial/First
  
  在这个新目录里面,你可以看到 5 个文件: Changes, First.pm, MANIFEST, Makefile.PL 和 test.pl。它们的作用如下:
  
  Changes
  这个文件作为你的项目的修改日志(changelog)文件
  
  First.pm
  这是主模块文件,包含你的 mod_perl 句柄代码(handler code)。
  
  MANIFEST
  本文件用于自动构建 tar.gz 类型的模块版本分发。这样你就可以把你的模块拿到 CPAN 发布或者分发给其他人。它包含了你在这个项目中所有文件的列表。
  
  Makefile.PL
  这是标准的 Perl Makefile 构造器。用于创建 Makefile.PL 文件来编译该模块。
  
  test.pl
  针对该模块的一些测试脚本。默认情况下它只是检查模块的编译和载入
  
  好了,现在我们开始把 First.pm 变为可工作的 mod_perl 模块。使用文本编辑器打开该文件,修改后的内容如下:
  
  package Apache::Tutorial::First;
  use strict;
  use vars qw/$VERSION/;
  use Apache::Constants;
  $VERSION = 0.01;
  sub handler {
   my $r = shift;
   $r->send_http_header('text/html');
   print "<html><body>Hello World</body></html>";
   return OK;
  }
  1;
  
  不要忘记文件末尾的"1;",对于 Perl 来说,一个模块最后返回的非零值表示该模块已经被成功编译。
  
  1.3. 安装你的模块
  h2xs 工具使我们的模块安装工作极为方便。在和你的 First.pm 文件相同的目录中。、,键入:
  
   perl Makefile.PL
  make
  make test
  
  如果 make test 成功的话,你需要以 root 身份执行:
  
   make install
  
  这样你就把你的模块安装到了 perl 的库目录(library directory)。
  
  1.4. 添加该模块为 Apache 的一个句柄(handler)现在我们需要进入 Apache 配置目录来修改配置文件,使我们的模块作为 Apache 内容处理阶段的处理器。打开 httpd.conf 文件,在末尾加入如下配置:
  
   <Location /mod_perl_tutorial>
   SetHandler perl-script
   PerlHandler Apache::Tutorial::First
  </Location>
  
  然后保存配置文件,并且重新启动 apache 服务器:
  
   apachectl stop
  apachectl start
  
  现在使用浏览器访问 http://localhost/mod_perl_tutorial ,你将如期的看到显示 "Hello World" 页面。
  
  2. 这里都发生了些什么?
  好,在这里都发生了什么事情呢?
  
  当 Apache 启动的时候,它读取它的配置指令并把适当的命令传递给相应的处理该命令的模块。这里有两个相关的指令 SetHandler 和 PerlHandler.
  
  第一个指令 SetHandler 由 mod_mime 模块处理,该指令表示使用什么模块作为处理请求的主要部分。这里所设置的 perl-script 表示使用 mod_perl 来处理请求。
  
  第二个指令 PerlHandler 由 mod_perl 模块来处理,它只是简单的说明使用我们的模块来处理请求的主要部分。有一点需要注意,无论何时在你有一个 PerlHandler 时,你需要相应的 SetHandler perl-script 配置指令。这样才能使你的 mod_perl 代码起作用。我总是认为这是一个弱点,但这将涉及 Apache 内部的处理机制,所以在将来这也很难改变。
  
  现在请求来了,Apache 查看用什么模块来处理相应的 URI 并且在这里决定使用 mod_perl,而 mod_perl 知道它必须把请求发送给我们的模块,并调用我们模块的 handler() 函数作为 Apache::Request 对象的第一个参数。而我们的 handler() 函数的返回值决定了下一步 Apache 将要做什么。现在我们知道返回值 OK 意味着一切成功。 OK 是个从 Apache::Constants 模块导出的常量。
  
  3. 调试
  如果你没有看到 "Hello World", 那你可能看到了一个错误页面,或者其他什么完全不同的。第一步去查看错误日志看看到底是什么发生了错误。我习惯于在浏览器中请求后立即查看错误日志。你可以使用 tail 工具:
  
   tail -f /path/to/apache/logs/error_log
  
  (使用你的真实 error_log 路径替换上面的路径。如果你不肯定它在哪里,查看你的 httpd.conf 文件的 ErrorLog 指令部分)
  
  现在重新载入页面,然后 error_log 将告诉你什么地方出现了问题。更多的关于 perl 调试,请参见 perldebug.
  
  4. 加入更多
  现在如果你想要针对上面的情况作一些修改,该如何做呢?不幸的,唯一一种安装模式如下:
  
  修改你的 First.pm 文件
  
  重新以 root 身份运行 make install
  
  重新启动 Apache
  
  这也许很麻烦,特别是重新启动 Apache。针对这个问题,我们可以另外安装一个特别设计的模块来避免每次这样麻烦的做。首先你需要从 CPAN 下载并安装 Apache::Reload 模块(除非你已经使用 mod_perl 1.26 或者更高版本)。在这里 http://search.cpan.org/search?dist=Apache-Reload 下载。
  
  解开 tar.gz 文件并进入新目录,执行:
  
   perl Makefile.PL
  make
  
  然后到 root 身份执行:
  
   make install
  
  现在再次打开 httpd.conf 文件,加入:
  
   PerlInitHandler Apache::Reload
  
  这将测试所有有所改变的模块并在必要时自动重新载入新模块。这对于开发来说很有用,但会有性能损失,所以在开发完成之后,就将该特性关闭。




上一篇:Smarty中的ob_start问题   下一篇:Linux下Perl的经典用法:读入单个记录

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Linux下Perl的经典用法:读入单个记录
·善用PerlDateStructure和reference
·功能丰富的Perl:遗传算法仿真多细胞机体
·功能丰富的Perl:JustAnotherPerlHacker
·用Perl写不刷屏的聊天室原理分析
·用Linux下脚本Perl连接SQLServer
·功能丰富的Perl
·ActivePerlPerlIS.dll远程缓冲区溢出漏洞
·功能丰富的Perl:用Perl保存
·功能丰富的Perl:有趣的Ion窗口管理器
·功能丰富的Perl:用于系统管理
·功能丰富的Perl:编写说英语的Perl程序
·功能丰富的Perl:xinetd程序用于系统管理
·功能丰富的Perl:Perl6语法和正则表达式
·Perl的经典用法:用Sysopen()进行控制
·吸引C和Java程序员目光的Perl5.6
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Linux下安装Perl脚本语言的方法
·以非超级用户身份安装mod_perl
·优化Perl榨取代码的最大性能
·功能丰富的Perl:Perl自动化系统管理
·使用Perl/Tk把GUI加入服务器编程
·CJavaPHPPerlPython的程序代码美化工具
·改良的Perl:程序员面向Linux的设置
·Perl的经典用法:用Open()函数打开文件
·功能丰富的Perl:轻松调试Perl的技巧
·功能丰富的Perl:Perl用于实现遗传算法
·Linux使用基本知识:编写简单的perl
·功能丰富的Perl:用Perl读写Excel文件
  阅读排行
·使用Perl自动化UNIX系统管理
·功能丰富的Perl:用Perl读写Excel文件
·利用Perl列出系统环境变量清单范例
·Perl的经典用法:用Open()函数打开文件
·Linux下安装Perl脚本语言的方法
·优化Perl榨取代码的最大性能
·用Pear加速PHP程序开发
·怎样从Perl中调用C库里的函数
·Linux使用基本知识:编写简单的perl
·功能丰富的Perl:轻松调试Perl的技巧
·在Perl中使用SendMail发送邮件
·功能丰富的Perl:编写说英语的Perl程序
·用Perl写不刷屏的聊天室原理分析
·吸引C和Java程序员目光的Perl5.6
·改良的Perl:程序员面向Linux的设置
网摘收藏: