准备工做php
出于安全性考虑,在一般状况下虚拟主机、XAMPP、DedeAMPZ等PHP运行环境都是禁止调用系统外部命令的。因此当你须要使用PHP执行命令的函数调用系统外部命令时,你须要确保PHP运行环境支持PHP执行命令的函数。shell
若是你使用的是XAMPP、DedeAMPZ,通常默认是禁止运行PHP执行命令的函数的,你能够在php.ini配置文件中disable_functions一项中去除你想要使用的函数,而后重启apache便可。我使用的是DedeAMPZ,因此我去除了exec()、passthru()、system()、shell_exec()这四个函数。PHP运行环境如何配置?apache
若是你的PHP运行环境是自行配置的,默认php.ini配置文件中是不由止你调用执行外部命令的函数的,固然出于安全考虑,你仍是应该禁止调用一部分执行系统外部命令的函数,找到disable_functions,配置以下:数组
disable_functions = exec,system,passthru,shell_exec安全
方法一:使用exec函数执行系统外部命令函数
原型:function exec(string $command,array[optional] $output,int[optional] $return_value)spa
<?php exec("dir",$output); print_r($output); ?>
知识点:exec执行系统外部命令时不会输出结果,而是返回结果的最后一行,若是你想获得结果你可使用第二个参数,让其输出到指定的数组,此数组一个记录表明输出的一行,即若是输出结果有20行,则这个数组就有20条记录,因此若是你须要反复输出调用不一样系统外部命令的结果,你最好在输出每一条系统外部命令结果时清空这个数组,以防混乱。第三个参数用来取得命令执行的状态码,一般执行成功都是返回0。code
方法二:使用system函数执行系统外部命令orm
原型:function system(string $command,int[optional] $return_value)get
<?php system("dir"); ?>
知识点:system和exec的区别在于system在执行系统外部命令时,直接将结果输出到游览器,若是执行命令成功则返回true,不然返回false。第二个参数与exec第三个参数含义同样。
方法三:使用函数passthru执行系统外部命令
原型:function passthru(string $command,int[optional] $return_value)
<?php passthru("dir"); ?>
知识点:passthru与system的区别,passthru直接将结果输出到游览器,不返回任何值,且其能够输出二进制,好比图像数据。
方法四:反撇号`(和~在同一个键)执行系统外部命令
安全性说明
当你使用这些函数执行命令时,若是是根据用户提交数据做为执行命令的话,你须要考虑系统安全性,可使用escapeshellcmd()和escapeshellarg()函数阻止用户恶意在系统上执行命令,escapeshellcmd()针对的是执行的系统命令,而escapeshellarg()针对的是执行系统命令的参数。这两个参数有点相似addslashes()的功能。
其余说明
当执行命令的返回结果很是庞大时,能够须要考虑将返回结果输出至其余文件,再另行读取文件,这样能够显著提升程序执行的效率。即
<?php system("dir > leapsoulcn.txt"); ?>
说明:这里system执行命令时并不将结果直接输出至游览器而是输出至指定目录下的文件中,显著提升了程序执行的效率。