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 相关文章推荐
在线增减.htpasswd内的用户
Oct 09 PHP
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 PHP
PHP 身份证号验证函数
May 07 PHP
php利用cookie实现访问次数统计代码
May 19 PHP
教你如何用php实现LOL数据远程获取
Jun 10 PHP
搭建基于Docker的PHP开发环境的详细教程
Jul 01 PHP
PHP+JS实现大规模数据提交的方法
Jul 02 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
Joomla简单判断用户是否登录的方法
May 04 PHP
PHP 搜索查询功能实现
Nov 29 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
PHP中实现中文字串截取无乱码的解决方法
May 29 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
用文本作数据处理
2006/10/09 PHP
PHP速成大法
2015/01/30 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
Javascript验证方法大全
2015/09/21 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
Vue shopCart 组件开发详解
2018/01/26 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
2019/05/03 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
Python AES加密模块用法分析
2017/05/22 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
python机器学习理论与实战(二)决策树
2018/01/19 Python
python实现闹钟定时播放音乐功能
2018/01/25 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
Pandas的Apply函数具体使用
2020/07/21 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
城市创卫标语
2014/06/17 职场文书
共青团员自我评价范文
2014/09/14 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书