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 相关文章推荐
APMServ使用说明
Oct 23 PHP
PHP开发需要注意的安全问题
Sep 01 PHP
MySQL连接数超过限制的解决方法
Jul 17 PHP
php将mysql数据库整库导出生成sql文件的具体实现
Jan 08 PHP
一个PHP的ZIP压缩类分享
May 04 PHP
PHP读取RSS(Feed)简单实例
Jun 12 PHP
PHP中curl_setopt函数用法实例分析
Apr 16 PHP
thinkphp autoload 命名空间自定义 namespace
Jul 17 PHP
php生成静态html页面的方法(2种方法)
Sep 14 PHP
PHP实现原生态图片上传封装类方法
Nov 08 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
php解压缩zip和rar压缩包文件的方法
Jul 10 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
php实现随机显示图片方法汇总
2015/05/21 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
[原创]php实现子字符串位置相互对调互换的方法
2016/06/02 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
JavaScript实现自动消除按钮功能的方法
2015/08/05 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
python 写的一个爬虫程序源码
2016/02/28 Python
python操作字典类型的常用方法(推荐)
2016/05/16 Python
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
Python2和Python3.6环境解决共存问题
2018/11/09 Python
python如何将两个txt文件内容合并
2019/10/18 Python
Python ORM编程基础示例
2020/02/02 Python
HTML5的表单(绝对特别强大的功能)使用示例
2013/06/20 HTML / CSS
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
招股说明书范本
2014/05/06 职场文书
民政局办理协议离婚(范本)
2014/10/25 职场文书
老公保证书怎么写
2015/02/26 职场文书
关于应聘教师的自荐信
2016/01/28 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang