设为首页 收藏本站
查看: 1181|回复: 0

[经验分享] 【转】利用Perl开发Internet/Intranet应用之二(4)

[复制链接]

尚未签到

发表于 2015-12-28 15:13:30 | 显示全部楼层 |阅读模式
  ----5 怎样在程序中调用系统命令

------以在程序中自动收发邮件为例

----CGI的推出就是为了使WebServer可以与更多的数据源沟通,常用的数据源有三种:数据库、非关系型数据文件(如txt文本)、邮件系统。前二者的连接和读写都有很多的方法,这里就不再相述。我主要想谈谈在CGI程式中怎样才能读取到邮件系统的邮件,自动发送邮件又是怎样进行的。Microsoft最近推出了ADO(ActiveXDataObject),只要相应数据源能提供OLEDB(DataProviderInterfaces),我们的应用程序就可调用ADO透明的访问该数据源(包括前面我们提到的三种数据源)。这种应用在邮件系统方面现在还只限于在MicrosoftExchangeServer上,由于这是新标准,实用与否还要看数据源供应商的反应和是否提供OLEDB接口。下面,我给大家介绍另外一种较为通用的实现方法。

----读取邮件:在很多unix系统中,邮件一般都放在/var/mail目录下,每个用户的邮件就存放在一个以该用户名命名的文本文件中,例如:/var/mail/zyr。如果我们要读取或查找该邮件信息,只要打开相应的文件即可。但该程式的运行者须有读取该用户邮件的权限,可在系统中用命令chmod进行设置。下面以一个perl程序为例:

----#该程序用于读取邮件,如果成功就把每一行数据打印出来


#!/bin/perl
#如果该路径已加入PATH中,上句可省
$mail_path="/var/mail/zyr";
#邮件路径
if(!open(vmail,"< $mail_path")){
print"can'topen$mail_path";
exit;
}
else{
while($temp=< vmail >){
#取出每一行数据放在$temp中
print$temp;
}
}
close(vmail);

  ----发送邮件:可通过调用系统命令实现,如system"mailxzyr\@gznet.com< a.txt"或exec"mailxzyr\@gznet.com< a.txt"。(a.txt为要发送的邮件内容,"\"是取消@特殊字符的含义)前者系统命令运行完后,会继续执行下面的语句;而后者调用结束后,整个程序就会结束,原来的perl程序也不能继续执行。故一般后者通常放在程序最后一行执行。
----6Server与Client传递数据的方法

----很多人都知道由client传送数据到server可通过下面两种方法,

1)< formmethod="GET/POST"
action="http://10.0.0.1/Script/a.pl" >
< inputtype="hidden"name="a"value="1" >
< inputtype="hidden"name="b"value="2" >
< inputtype="submit"name="submit"value="Go" >
< /form >

2)< ahref="http://10.0.0.1/Scripts/a.pl?a=1&b=2" >
CGI< /a >


----结果也是一样的;但却很少有人会去想这两种方法传输数据时用的是哪种方式。其实,前者采用的方式在method中设置可以是GET也可以是POST,而后者采用的则是GET方式。GET与POST的区别在于,如果以GET方式传输,所带参数附加在CGI程式的URL后直接传给server,并可从server端的QUERY_STRING这个环境变量中读取;如果以POST方式传输,则参数会被打包在数据报中传送给server,并可从CONTENT_LENGTH这个环境变量中读取出来。还有一种情况是,你用的是GET方式,但传送的参数是路径,如:

----< ahref="/cgi-bin/a.pl/usr/local/bin/pine" >CGI< /a >

----这时所传递的参数"/usr/local/bin/pine"存放在PATH_INFO这个环境变量中。环境变量的读取方式为$str=$ENV{'QUERY_STRING'};

----有时候我们非常希望能记录下访问我们页面的用户所用的浏览器是什么?名字、地址又是什么?这时候我们就要借助server端的一系列环境变量了。下面列出其它一些常用的环境变量。

SERVER_NAMEserver的机器名称或IP地址
SERVER_PORTserver正在运行的端口号
REQUEST_METHOD发出request的方法(GET/POST/HEAD)
SCRIPT_NAME程式被调用的路径,如:cgi-bin/a.pl
REMOTE_HOST发出request请求的远端机器(client)的名称
REMOTE_ADDR发出request请求的远端机器(client)的IP地址
REMOTE_IDENT发出request的使用者名称(如是拨号上网,则为用户
ID),当NCSAIdentityCheck为enabled,而且client
机器支持RFC931时,该变量有效
CONTENT_TYPE数据的MIME型别,如:"text/html"
HTTP_ACCEPTclient可以接受的MIME型别列表
HTTP_USER_AGENTclient发出request的浏览器类型
HTTP_REFERER在读取CGI程式之前,client所指的文本URL

----以上环境变量并非所有webserver都支持,需视具体情况而定,建议使用之前先进行测试。

----下面有一个例子,作用是把访问本页面的客户的ip地址和所用的浏览器类型记录并显示出来。

print"HTTP/1.0200OK\n";
print"Content-Type:text/html\n\n";

print"< HTML >\n";
print"< HEAD >\n";
print"< TITLE >test< /TITLE >\n";
print"< /HEAD >\n";
print"< BODY >\n";
print"YourIPAddressis$ENV{'REMOTE_ADDR'}.\n";
print"YourBrowseis$ENV{'HTP_USER_AGENT'}.\n";
print"< /BODY >\n";
print"< /HTML >\n";

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-157597-1-1.html 上篇帖子: perl语言访问数据库(mysql) 下篇帖子: 在perl中使用 MIME::Lite来发送有附件的邮件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表