PHP系统命令执行函数汇总
过滤参数
escapeshellarg
过滤一个字符串参数,原理是给字符串添加单引号,而shell不会解释单引号中的特殊字符。如果字符串中已经有单引号了,那么该函数会分段处理这个字符串,对字符串中的单引号做转义,并以之分段,也就是这种形式’…’\”…’。也可以说,单引号是就近匹配的。这个函数应该用来过滤单个的shell函数的参数。
escapeshellcmd
该函数应该被用来过滤整个命令字符串(而不是单个参数),转义shell元字符。
执行系统命令
反引号运算符
PHP支持一个执行运算符:反引号``
。PHP将尝试将反引号中的内容作为外壳命令执行,并将其输出信息作为返回值返回(即可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符的效果与函数shell_exec()
相同。
反引号运算符在激活了安全模式或者关闭了shell_exec()
时是无效的。
exec
string exec ( string $command [, array &$output [, int &$return_var ]] )
如果output
参数出现的话,该函数会将命令执行的结果一行一行的存入output
指定的数组,一行对应数组的一个元素,结尾的空白字符会被省略。注意,如果output
已经包含有内容的话,该函数会在这些内容后面追加内容,如果你不想这样,你必须在调用该函数之前,在output
上调用unset()
。 return_var
保存命令的执行状态。
该函数返回命令输出的最后一行。
system
输出执行结果,返回最后一行。
如果PHP运行在服务器模块中,system()
函数还会尝试在每行输出完毕之后,自动刷新web服务器的输出缓存。
passthru
执行外部程序并且显示原始输出。同exec()
函数类似,passthru()
函数也是用来执行外部命令的。当所执行的Unix命令输出二进制数据,并且需要直接传送到浏览器的时候,需要用此函数来替代exec()
或system()
函数。常用来执行诸如pbmplus
之类的可以直接输出图像流的命令。
shell_exec
通过shell环境执行命令,并且将完整的输出以字符串的方式返回。该函数会在错误出现或者程序执行没有输出两种情况下返回NULL,也就是说,没有办法通过该函数检测程序执行失败(可以改用exec)。