找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 432|回复: 0

PHP shell_exec()与exec()的区别

[复制链接]
  • TA的每日心情
    奋斗
    2022-9-1 11:24
  • 签到天数: 50 天

    连续签到: 1 天

    [LV.5]常住居民I

    766680204
    发表于 2020-5-8 18:26:51 | 显示全部楼层 |阅读模式

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×
    我很难理解shell_exec()和exec()之间的区别
    我一直习惯使用exec()执行服务器端命令,但不知道shell_exec()什么时候使用?
    shell_exec()是否只是exec()的一个速记?参数较少似乎是一样的。
    区别:
    shell_exec将所有输出流作为字符串返回。exec默认情况下返回输出的最后一行,但可以将所有输出提供为指定为第二个参数的数组。
    shell_exec- 通过shell执行命令并将完整输出作为字符串返回
    exec - 执行外部程序。
    不同之处在于,shell_exec您将输出作为返回值。
    使用exec(),您可以传递一个可选的param变量,该变量将接收一组输出行。在某些情况下,这可能会节省时间,尤其是在命令输出已经是表格的情况下。
    比较:
    1. exec('ls', $out);
    2. var_dump($out);
    3. // Look an array

    4. $out = shell_exec('ls');
    5. var_dump($out);
    6. // Look -- a string with newlines in it
    复制代码

    相反,如果命令的输出是xml或json,那么将每一行作为数组的一部分并不是你想要的,因为你需要将输入后处理成其他形式,所以在这种情况下使用shell_exec 。
    值得指出的是,shell_exec是fortic运算符的别名,对于那些用于* nix的运算符。
    1. $out = `ls`;
    2. var_dump($out);
    3. exec还支持一个附加参数,该参数将提供执行命令的返回码:

    4. exec('ls', $out, $status);
    5. if (0 === $status) {
    6.     var_dump($out);
    7. } else {
    8.     echo "Command failed with status: $status";
    9. }
    复制代码

    如shell_exec手册页中所述,当您实际需要从正在执行的命令返回代码时,您别无选择,只能使用exec。
                   
    回复

    使用道具 举报

    网站地图|页面地图|文字地图|Archiver|手机版|小黑屋|找资源 |网站地图

    GMT+8, 2024-11-27 08:35

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表