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

文章目录

    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));
    

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

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式