php调用shell的方法


Posted in PHP onNovember 05, 2014

本文实例讲述了php调用shell的方法,分享给大家供大家参考。具体方法如下:

一、配置

查看php.ini中配置是否打开安全模式,主要是以下三个地方
safe_mode =  (这个如果为off下面两个就不用管了)
disable_functions =
safe_mode_exec_dir=

二、使用

由于PHP基本是用于WEB程序开发的,所以安全性成了人们考虑的一个重要方面。于是PHP的设计者们给PHP加了一个门:安全模式。如果运行在安全模式下,那么PHP脚本中将受到如下四个方面的限制:
 
① 执行外部命令
② 在打开文件时有些限制
③ 连接MySQL数据库
④ 基于HTTP的认证

在安全模式下,只有在特定目录中的外部程序才可以被执行,对其它程序的调用将被拒绝。这个目录可以在php.ini文件中用 safe_mode_exec_dir指令,或在编译PHP是加上--with-exec-dir选项来指定,默认是/usr/local/php /bin。
 
如果你调用一个应该可以输出结果的外部命令(意思是PHP脚本没有错误),得到的却是一片空白,那么很可能你的网管已经把PHP运行在安全模式下了。
 
三、如何做?
 
在PHP中调用外部命令,可以用如下三种方法来实现:
 
1) 用PHP提供的专门函数
 
PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()。
 
system()
 
原型:string system (string command [, int return_var])
 
system()函数很其它语言中的差不多,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。
 
例子:
 

system("/usr/local/bin/webalizer/webalizer");

 
exec()
 
原型:string exec (string command [, string array [, int return_var]])
 
exec() 函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二个参数时,才可以用第三个参数,用来取得命令执行的状态码。
 
例子:
 

exec("/bin/ls -l");

exec("/bin/ls -l", $res);

#$res是一个数据,每个元素代表结果的一行

exec("/bin/ls -l", $res, $rc);

#$rc的值是命令/bin/ls -l的状态码。成功的情况下通常是0

 
passthru()
 
原型:void passthru (string command [, int return_var])
 
passthru() 只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来调用象pbmplus(Unix 下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。
 
例子:
 
header("Content-type: image/gif");

passthru("./ppmtogif hunte.ppm");

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP开发入门教程之面向对象
Dec 05 PHP
PHP如何利用P3P实现跨域
Aug 24 PHP
php不写闭合标签的好处
Mar 04 PHP
ThinkPHP CURD方法之limit方法详解
Jun 18 PHP
php获取json数据所有的节点路径
May 17 PHP
PHP中Closure类的使用方法及详解
Oct 09 PHP
10款实用的PHP开源工具
Oct 23 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
php代码架构的八点注意事项
Jan 25 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
Yii框架页面渲染操作实例详解
Jul 19 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
Nov 05 #PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
Nov 05 #PHP
phpnow php探针环境检测代码
Nov 04 #PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
Nov 04 #PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
Nov 04 #PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
Nov 04 #PHP
PHP自动重命名文件实现方法
Nov 04 #PHP
You might like
session 的生命周期是多长
2006/10/09 PHP
PHP个人网站架设连环讲(二)
2006/10/09 PHP
php+mysqli实现批量替换数据库表前缀的方法
2014/12/29 PHP
PHP设计模式之适配器模式代码实例
2015/05/11 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
Backbone.js中的集合详解
2015/01/14 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
js生成随机数方法和实例
2017/01/17 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
详解react-native-fs插件的使用以及遇到的坑
2017/09/12 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
Angular CLI 使用教程指南参考小结
2019/04/10 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
Python实时获取cmd的输出
2015/12/13 Python
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
python 正确保留多位小数的实例
2018/07/16 Python
Python制作exe文件简单流程
2019/01/24 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
2019/07/08 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
物业管理毕业生个人的求职信
2013/11/30 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
2014年党员个人剖析材料
2014/10/08 职场文书
公司庆典欢迎词
2015/01/26 职场文书
大学体育课感想
2015/08/10 职场文书
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python