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 fread()使用技巧
Jan 22 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
Jul 15 PHP
PHP递归删除目录几个代码实例
Apr 21 PHP
PHP+javascript制作带提示的验证码源码分享
May 28 PHP
Zend Framework页面缓存实例
Jun 25 PHP
PHP curl实现抓取302跳转后页面的示例
Jul 04 PHP
php中请求url的五种方法总结
Jul 13 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
PHP创建自己的Composer包方法
Apr 09 PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 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
默默小谈PHP&MYSQL分页原理及实现
2007/01/02 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
PHP中英混合字符串截取函数代码
2011/07/17 PHP
关于初学PHP时的知识积累总结
2013/06/07 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
Js nodeType 属性全面解析
2013/11/14 Javascript
js 获取、清空input type="file"的值(示例代码)
2013/12/24 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
2018/09/13 Javascript
微信小程序实现页面下拉刷新和上拉加载功能详解
2018/12/03 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
Python实现多行注释的另类方法
2014/08/22 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
python之生产者消费者模型实现详解
2019/07/27 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
2012/12/31 HTML / CSS
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
蛋白质世界:Protein World
2017/11/23 全球购物
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
校园网站的创业计划书范文
2013/12/30 职场文书
上班早退检讨书
2014/01/09 职场文书
高中生操行评语大全
2014/04/25 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
Django使用redis配置缓存的方法
2021/06/01 Redis