PHP 调用系统命令行,system() / exec()

更新日期: 2018-10-05 阅读次数: 1961 分类: PHP

system 与 exec 的区别

exec,可以指定 output 变量,且返回的结果是 array 结构。

>>> exec('ls', $output, $ret)
=> "some_file.txt"
>>> $ret
=> 0
>>> $output
=> [
"app",
"artisan",
"bootstrap",
"composer.json",
"composer.lock",
]

system,直接返回 output,返回结果是字符串。

>>> system('ls', $ret)
app
artisan
bootstrap
composer.json
composer.lock
=> "some_file.txt"
>>> $ret
=> 0

但是,需要注意的是,system 返回的是 output 的最后一行,所以如果想获得全部的输出,需要使用 exec。

如何防止用户执行指定命令之外的命令?

即做非法输入参数的过滤。例如,在参数中加入分号,并在其之后输入非法的命令。

http://www.php.net/escapeshellarg

system('ls '.escapeshellarg($dir));

其原理是,在输入参数两侧加上引号,以使其变成单个参数。

爱评论不评论

近期节日

2019年06月20日 世界难民日
2019年06月21日 夏至
2019年06月22日 中国儿童慈善活动日
2019年06月23日 国际奥林匹克日
2019年06月25日 全国土地日
2019年06月26日 国际禁毒日
2019年06月30日 世界青年联欢节
2019年07月01日 中国共产党诞生日
2019年07月01日 香港回归日
2019年07月02日 国际体育记者日
2019年07月06日 国际接吻日
2019年07月07日 抗日战争纪念日
查看更多节日