- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何利用内置PHP灵活性执行外部程序.doc
如何利用内置PHP灵活性执行外部程序
在你的电脑上运行下列代码看看出现什么情况?
?php$now1 = `date`;echo Now date is: $now1;?
没 有人会怀疑,即使是最苛刻的批评家也 不会怀疑PHP是多功能的:在最近的一次统计中,该语言有1,500多个内置函数和超过150个新增的扩展插件。但是,聪慧的PHP的创作者知道这些还不 足以满足每一个人的要求,所以他们有额外添加了一定的灵活度——允许开发者从PHP内部启动他们自己的外部程序,并将所得到的输出再插入PHP应用程序中 ——所有的一切都不费吹灰之力!
?
本文将向你介绍一些允许你启动外部程序的PHP函数,向你说明怎样获得输出或在你的PHP脚本中使用结果代码,并提醒你注意过程中潜在的弱点。
?
反引号运算符
?
如果你已经在*NIX中用过Bash shell,那么你一定已经比较熟悉反引号运算符(`),它可以用来在Bash脚本内部运行一个外部程序。PHP也正是采用了相同的技术:在PHP脚本 中,简单地将外部程序的命令行放入反引号中,PHP将会在到达该行代码时启动这个外部程序。列表A向你显示了该怎么做。
?
列表A
?
`ls -l`;
?
?
?
当然,就其本身而言,是没有什么作用 的;多数情况下,你会想要将外部程序的输出引入到你的PHP脚本中进行进一步的处理。幸运的是,这也很简单——你要做的就是将反引号中所引的代码当做一个 规则的PHP变量,然后用函数echo()或print()将其显示出来。(列表B)
?
列表B
?
echo Current date and time is: . `date`;
?
?
?
在本文里,PHP将获得系统命令的输出,然后用echo()将它内插入字符串中。输出如下:
?
Current date and time is: Wed Jun 21 04:27:01 CDT 2006
?
如果你愿意的话,你也可以获得并储存一个外部命令的输出,只需简单地将反引号中所引的命令赋值于一个变量就行了。(列表C)
?
列表C
?
$date = `date`;
?
echo Current date and time is: $date;
?
?
?
以下是输入:
?
Current date and time is: Wed Jun 21 04:27:01 CDT 2006
?
函数exec()和passthru()
?
当PHP 的安全模式被激活时,反引号运算符就不可用了,这样如果在一个对PHP配置提供有限控制的共享主机上运行你的应用程序的话,就会出现问题。在这种情况下, 你没有其它选择,只能采用两个PHP的内置函数exec()和passthru()了,它们能够提供相似的功能。
?
函数exec()接受单个的包含了要执行命令的必要参数,运行它,然后会返回输出的最后一行。(列表D)
?
列表D
?
echo exec(‘ls -l’);
?
?
?
输出是:
?
drwxr-xr-x 5 user cust 512 Jan 27 2005 vhost
?
大多数情况下,只检索命令的最后一行是不够的,这也是为什么exec()同时提供了两个备选的参数。第一个是一个数组,其中填充着命令得到的输出的每一行;第二个是一个保存命令返回的状态代码的变量。
?
列表E向你展示了一个例子。
?
列表E
?
$data = array(); // define array
?
exec(‘ls -l’, $data, $ret); // execute command, output is array
echo
;
if ($ret == 0) { // check status code. if successful
foreach ($data as $line) { // process array line by line
echo $line ;
?
}
} else {
echo Error in command; // if unsuccessful display error
}
echo
;
?
?
?
这似乎很复杂,但是实际上非常简单。 首先,定义一个空数组$data,调用exec()命令获得一个目录列表。命令返回的代码显示了它是否成功,然后将其储存在$ret中,列表的输出(如果 有的话)储存在前面定义的数组$data中。接下来,返回的代码被检验,如果为0(表示成功了)
您可能关注的文档
最近下载
- 湖南省长沙市长郡雨花外国语学校2022年人教版小升初考试数学试卷(一)(含答案解析).docx VIP
- 福建省福州一中自主招生考试数学试卷.docx VIP
- 《企业内部控制》第18章 内部信息传递.pptx VIP
- 小学英语特色课程.doc VIP
- 肱骨骨折的护理查房.pptx VIP
- 浙江省台州市椒江区2023-2024学年八年级下学期期末数学试题(含答案).docx VIP
- 2025中考初中英语1600单词速记完整版(复习必背).docx
- 2025年哈尔滨供水集团有限责任公司人员招聘笔试备考试题及答案解析.docx VIP
- (正式版)S-H∕T3507-2024 石油化工钢结构工程施工及验收规范.docx VIP
- JT∕T 1094-2016 营运客车安全技术条件.pdf VIP
文档评论(0)