php调用shell的方法

 更新时间:2014年11月05日 09:34:53   投稿:shichen2014  
这篇文章主要介绍了php调用shell的方法,包括相关的原理、注意事项及函数用法,需要的朋友可以参考下

本文实例讲述了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 使用mpdf实现指定字段配置字体样式的方法

    php 使用mpdf实现指定字段配置字体样式的方法

    前两天在做一个pdf导出功能,使用的插件是kartik-v/yii2-mpdf,此插件使用的是mpdf。接下来通过本文给大家介绍php 使用mpdf实现指定字段配置字体样式的方法,需要的朋友可以参考下
    2019-07-07
  • CakePHP框架Model关联对象用法分析

    CakePHP框架Model关联对象用法分析

    这篇文章主要介绍了CakePHP框架Model关联对象用法,结合实例形式分析了cakePHP框架Model关联对象的功能、定义及具体使用方法,需要的朋友可以参考下
    2017-08-08
  • thinkPHP微信分享接口JSSDK用法实例

    thinkPHP微信分享接口JSSDK用法实例

    这篇文章主要介绍了thinkPHP微信分享接口JSSDK用法,结合实例形式分析了thinkPHP调用微信分享接口的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • phpcms模块开发之swfupload的使用介绍

    phpcms模块开发之swfupload的使用介绍

    本篇文章介绍了,phpcms模块开发之swfupload的使用分析,需要的朋友参考下
    2013-04-04
  • 深入浅析php json 格式控制

    深入浅析php json 格式控制

    这篇文章主要介绍了深入浅析php json 格式控制的相关资料,需要的朋友可以参考下
    2015-12-12
  • laradock环境docker-compose操作详解

    laradock环境docker-compose操作详解

    在本篇文章中小编给大家整理的是关于laradock环境docker-compose操作的相关知识点内容,有需要的朋友们参考学习下。
    2019-07-07
  • PHP实现一个简单url路由功能实例

    PHP实现一个简单url路由功能实例

    这篇文章主要介绍了PHP实现一个简单url路由功能实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-11-11
  • ThinkPHP5.1表单令牌Token失效问题的解决

    ThinkPHP5.1表单令牌Token失效问题的解决

    这篇文章主要给大家介绍了关于ThinkPHP5.1表单令牌Token失效问题的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用ThinkPHP具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • Laravel 4 初级教程之安装及入门

    Laravel 4 初级教程之安装及入门

    本文不推荐完全不懂PHP与MVC编程的人学习。本文不是 “一步一步跟我做” 教程。本文需要你付出一定的心智去解决一些或大或小的隐藏任务,以达到真正理解 Laravel 运行逻辑的目的。
    2014-10-10
  • gd库图片下载类实现下载网页所有图片的php代码

    gd库图片下载类实现下载网页所有图片的php代码

    在前期的php教程就讲了php gd库可以实现远程图片的下载,但是那只是下载了一张图片,原理是一样的,要想下载一个网页的所有图片只要使用正则表达式进行判断,找出所有的图片url就可以进行循环下载了,我特地参照网络资源编写了gd库图片下载类!
    2012-08-08

最新评论