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 相关文章推荐
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
Jul 18 PHP
解决ajax+php中文乱码的方法详解
Jun 09 PHP
php计算程序运行时间的简单例子分享
May 10 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
Sep 22 PHP
彻底搞懂PHP 变量结构体
Oct 11 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
微信公众号开发之获取位置信息php代码
Jun 13 PHP
PHP PDOStatement::errorCode讲解
Jan 31 PHP
Yii框架引入coreseek分页功能示例
Feb 08 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
Jan 23 PHP
php7 list()、session及其他模块的修改实例分析
May 25 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
php5 mysql分页实例代码
2008/04/10 PHP
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
php处理带有中文URL的方法
2016/07/11 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
取选中的radio的值
2010/01/11 Javascript
Javascript this 的一些学习总结
2012/08/31 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
JavaScript如何实现组合列表框中元素移动效果
2016/03/01 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
2017/09/22 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
vue a标签点击实现赋值方式
2020/09/07 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
Vue项目中使用mock.js的完整步骤
2021/01/12 Vue.js
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
Python中的defaultdict模块和namedtuple模块的简单入门指南
2015/04/01 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
利用python爬取斗鱼app中照片方法实例
2017/12/03 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
python多维数组切片方法
2018/04/13 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
Django应用程序入口WSGIHandler源码解析
2019/08/05 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
python利用appium实现手机APP自动化的示例
2021/01/26 Python
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
次世代生活态度:Hypebeast
2018/07/05 全球购物
.NET面试10题
2014/02/24 面试题
怎么写自荐书范文
2014/02/12 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python