使用PHP执行系统外部命令的四种方法

  在PHP文件函数关于如何删除文件实例教程中,我提到有两种方法,一种使用unlink函数删除文件,还有一种是通过system函数调用系统命令来执行删除文件命令,其实除了system函数,PHP执行命令的方法还有很多种,下面介绍在PHP网站开发中最常用的四种执行命令的方法。

准备工作

  出于安全性考虑,在通常情况下虚拟主机、XAMPP、DedeAMPZ等PHP运行环境都是禁止调用系统外部命令的。所以当你需要使用PHP执行命令的函数调用系统外部命令时,你需要确保PHP运行环境支持PHP执行命令的函数。

  如果你使用的是XAMPP、DedeAMPZ,一般默认是禁止运行PHP执行命令的函数的,你可以在php.ini配置文件中disable_functions一项中去除你想要使用的函数,然后重启apache即可。我使用的是DedeAMPZ,所以我去除了exec()、passthru()、system()、shell_exec()这四个函数。PHP运行环境如何配置?

  如果你的PHP运行环境是自行配置的,默认php.ini配置文件中是不禁止你调用执行外部命令的函数的,当然出于安全考虑,你还是应该禁止调用一部分执行系统外部命令的函数,找到disable_functions,配置如下:

disable_functions = exec,system,passthru,shell_exec

即禁止执行这三个函数,每个函数之间以逗号分隔。PHP.INI如何配置?

  如果你使用的是虚拟主机,你需要询问主机提供方PHP环境是否支持使用PHP执行命令的函数。

其他说明

  由于我使用的是Windows系统,所以实例教程中以调用windows系统外部命令为主,如你熟悉linux操作,你不妨在linux系统下尝试执行linux命令。

PHP执行命令的四种方法

方法一:使用exec函数执行系统外部命令

原型:function exec(string $command,array[optional] $output,int[optional] $return_value)

1
2
3
4
<?
    exec("dir",$outPut);
    print_r($outPut);
?>

说明:列出和PHP执行文件同级目录下的所有目录及文件信息。

知识点:exec执行系统外部命令时不会输出结果,而是返回结果的最后一行,如果你想得到结果你可以使用第二个参数,让其输出到指定的数组,此数组一个记录代表输出的一行,即如果输出结果有20行,则这个数组就有20条记录,所以如果你需要反复输出调用不同系统外部命令的结果,你最好在输出每一条系统外部命令结果时清空这个数组,以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0。

方法二:使用system函数执行系统外部命令

原型:function system(string $command,int[optional] $return_value)

1
2
3
<?
    system("dir");
?>

知识点:system和exec的区别在于system在执行系统外部命令时,直接将结果输出到游览器,如果执行命令成功则返回true,否则返回false。第二个参数与exec第三个参数含义一样。

方法三:使用函数passthru执行系统外部命令

原型:function passthru(string $command,int[optional] $return_value)

知识点:passthru与system的区别,passthru直接将结果输出到游览器,不返回任何值,且其可以输出二进制,比如图像数据。

方法四:反撇号`(和~在同一个键)执行系统外部命令

1
2
3
<?
    echo `dir`;
?>

知识点:在使用这种方法执行系统外部命令时,你要确保shell_exec函数可用,否则是无法使用这种反撇号执行系统外部命令的。

安全性说明

  当你使用这些函数执行命令时,如果是根据用户提交数据作为执行命令的话,你需要考虑系统安全性,可以使用escapeshellcmd()和escapeshellarg()函数阻止用户恶意在系统上执行命令,escapeshellcmd()针对的是执行的系统命令,而escapeshellarg()针对的是执行系统命令的参数。这两个参数有点类似addslashes()的功能。

其他说明

  当执行命令的返回结果非常庞大时,可以需要考虑将返回结果输出至其他文件,再另行读取文件,这样可以显著提高程序执行的效率。即

1
2
3
<?
    system("dir > leapsoulcn.txt");
?>

说明:这里system执行命令时并不将结果直接输出至游览器而是输出至指定目录下的文件中,显著提高了程序执行的效率。

  至此PHP执行命令最常用的四种方法exec()、passthru()、system()、shell_exec()及它们之间的区别就介绍完了,在PHP网站开发中根据情况合理利用这些函数执行系统外部命令是非常有用的。

  :PHP网站开发教程-leapsoul.cn版权所有,转载时请以链接形式注明原始出处及本声明,谢谢。

时间: 2024-10-02 19:38:36

使用PHP执行系统外部命令的四种方法的相关文章

自学Linux命令的四种方法

  如果你想成为Linux高手,那么掌握一些Linux命令是必不可少的.下面是自学Linux命令的四种方法. 每日提示 学习Linux命令的一种渐进式方法是:在每次打开终端时,让它显示"每日提示".这会向你介绍一些有用的命令及其高级使用技巧. 在.bashrc中(/home/.bashrc)增加如下一行: echo "Did you know that:"; whatis $(ls /bin | shuf -n 1) 你只需要增加这行就够了!如果你想让它更娱乐化一些

吐血分享快速做好外部链接的四种方法

自认为我是一个比较喜欢新鲜喜欢创新的人,之前看了很多关于怎么做外链的帖子,无非都是老生常谈,论坛签名,博客,分类信息,问答等等!语言倒也组织得比较流畅,怎么做签名,怎么发博客都写得清清楚楚,不过看多了以后就会发现讲的都是一样的,相当于把一篇文章用伪原创工具变动了N次,发了又改,改了又发,越看越觉得刺伤了我的眼睛,不过说实在的,我不得不佩服这些人"垃圾循环利用"的精神和勇气,一篇又一篇,一遍又一遍地将那些老掉牙的外链做法发在了各大论坛的显眼位置,我不得不感叹,seo行业的确需要一点新的东

PHP 中执行系统外部命令_php基础

PHP 中执行系统外部命令 PHP作为一种服务器端的脚本语言,象编写简单,或者是复杂的动态网页这样的任务,它完全能够胜任.但事情不总是如此,有时为了实现某个功能,必须借助于操作系统的外部程序(或者称之为命令),这样可以做到事半功倍. 那么,是否可以在PHP脚本中调用外部命令呢?如果能,如何去做呢?有些什么方面的顾虑呢?相信你看了本文后,肯定能够回答这些问题了. 是否可以? 答案是肯定的.PHP和其它的程序设计语言一样,完全可以在程序内调用外部命令,并且是很简单的:只要用一个或几个函数即可. 前提

Excel 2000访问远程数据的四种方法

excel|访问|数据      Excel 2000作为一个电子表格软件,它不仅有强大的数据处理能力,而且它的报表功能也是十分强大.因而常常用Excel 2000去调用Access.SQL Server.Oracle.DB2等数据库软件建立的大型数据库的内容.用户可以在工作表中对这些数据进行筛选.排序.查询.编辑和打印报表,十分方便,这也是大多数人都熟悉的.但如何去调用这数据呢?本人在这里提供4种方法.    下面四种方法必须要先创建一个数据源,我们以SQL Server7.0内的样本数据库p

实现动画SWF文件全屏效果的四种方法

如何让SWF文件全屏的效果? 第一种方法:不显示浏览器菜单栏.工具栏的全屏.这种全屏稍稍复杂,也与FLASH的设置无关,但要借 助JavaScript来完成.方法是:在HTML文件中<head></head>间加入以下代码: <script language="JavaScript">  <!--  window.open("nfd.swf","","fullscreen=1,menubar=n

如何对硬盘进行病毒检测的四种方法

要进行传染,必然会留下痕迹.生物医学病毒如此,电脑病毒也是一样.检测电脑病毒,就要到病毒寄生场所去检查,发现异常情况,并进而验明"正身",确认电脑病毒的存在.电脑病毒静态时存储于硬盘中,被激活时驻留在内存中,因此对电脑病毒的检测可以分为对硬盘的检测和对内存的检测. 一般对硬盘进行病毒检测时,要求内存中不带病毒,因为某些电脑病毒会向检测者报告假情况.例如"4096"病毒在内存中时,查看被它感染的文件,不会发现该文件的长度已发生变化,而当在内存中没有病毒时,才会发现文件

Linux操作系统下设置基本网络参数四种方法

  一.引言 在Red Hat Linux 6.0系统中,自带有Netscape浏览器,让Linux通过以太网卡访问Internet时,必须对Linux系统进行相应的配置,诸如主机.域名.网关.路由器等.在实际配置时,可以采用四种方法: 其一,基于控制面板法; 其二,基于X的linuxconf法; 三,基于Web浏览器的linuxconf法; 其四,手工使用命令法. 二.基于控制面板法 Linux的控制面板中的Network Configuration提供了易于掌握的集成化配置环境.首先检查在安

[AS3]Flash与后台数据交换四种方法整理【转】

随着Flash Player 9的普及,AS3编程也越来越多了,所以这次重新整理AS3下几种与后台数据交换方法. 1.URLLoader(URLStream) 2.FlashRemoting 3.XMLSocket(Socket)  4.FMS/FCS 一.URLLoader(URLStream)篇 URLStream和URLLoader中URLLoaderDataFormat.BINARY类似,它提供对下载 URL 的低级访问方式,我在此不再重复了,有兴趣的,可以看Flash帮助中URLStr

java环境变量配置四种方法

原文:java环境变量配置四种方法        Java编程首要工作就是安装JDK(Java Development Kit).一通"NEXT"点完安装后就是最重要的环境变量设置了.也许有人会问为什么要设置环境变量,要理解这点,首先要明白环境变量的作用.环境变量可以简单的理解为路径导向.例如:Windows里面的临时文件夹存放的路径导向.当要访问此类文件时可根据此环境变量找到它的存放目录.像下面讲的CLASSPATH变量是为了在我们输入Java命令如javac等的时候不用敲入它的路径