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 相关文章推荐
fleaphp rolesNameField bug解决方法
Apr 23 PHP
PHP中的cookie不用刷新就生效的方法
Feb 04 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
May 06 PHP
PHP数据过滤的方法
Oct 30 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
php实现过滤字符串中的中文和数字实例
Jul 29 PHP
smarty简单应用实例
Nov 03 PHP
分享50个提高PHP执行效率的技巧
Dec 26 PHP
php注册和登录界面的实现案例(推荐)
Oct 24 PHP
thinkPHP显示不出验证码的原因与解决方法分析
May 20 PHP
PHP Trait代码复用类与多继承实现方法详解
Jun 17 PHP
PHP使用phpunit进行单元测试示例
Sep 23 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初学者头痛的十四个问题
2006/07/12 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
IE 当eval遇上function的处理
2011/08/09 Javascript
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
2016/01/05 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
2017/04/22 Javascript
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
Bootstrap实现的表格合并单元格示例
2018/02/06 Javascript
微信小程序使用form表单获取输入框数据的实例代码
2018/05/17 Javascript
js序列化和反序列化的使用讲解
2019/01/19 Javascript
angular4中引入echarts的方法示例
2019/01/29 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
理论讲解python多进程并发编程
2018/02/09 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
详解HTML5中download属性的应用
2015/08/06 HTML / CSS
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
实习推荐信
2014/05/10 职场文书
服务承诺书范文
2014/05/19 职场文书
学历证明范文
2015/06/16 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
Java完整实现记事本代码
2022/06/16 Java/Android