# exec

(PHP 4, PHP 5, PHP 7)

exec — 执行一个外部程序

### 说明

exec ( string `$command` [, array `&$output` [, int `&$return_var` ]] ) : string

exec() 执行 `command` 参数所指定的命令。

### 参数

`command`

  要执行的命令。

`output`

  如果提供了 `output` 参数， 那么会用命令执行的输出填充此数组， 每行输出填充数组中的一个元素。 数组中的数据不包含行尾的空白字符，例如 \n 字符。 请注意，如果数组中已经包含了部分元素，exec() 函数会在数组末尾追加内容。如果你不想在数组末尾进行追加， 请在传入 exec() 函数之前 对数组使用 unset() 函数进行重置。

`return_var`

  如果同时提供 `output` 和 `return_var` 参数， 命令执行后的返回状态会被写入到此变量。

### 返回值

命令执行结果的最后一行内容。 如果你需要获取未经处理的全部输出数据， 请使用 passthru() 函数。

如果想要获取命令的输出内容， 请确保使用 `output` 参数。

### 范例

Example #1 exec() 例程

    <?php
    // 输出运行中的 php/httpd 进程的创建者用户名
    // （在可以执行 "whoami" 命令的系统上）
    echo exec('whoami');
    ?>

### 注释

Warning

当用户提供的数据传入此函数，使用 escapeshellarg() 或 escapeshellcmd() 来确保用户欺骗系统从而执行任意命令。

> Note:

> 如何程序使用此函数启动，为了能保持在后台运行，此程序必须将输出重定向到文件或其它输出流。否则会导致 PHP 挂起，直至程序执行结束。

> Note:

> On Windows exec() will first start cmd.exe to launch the command. If you want to start an external program without starting cmd.exe use proc_open() with the `bypass_shell` option set.

> Note: 安全模式 启用时，可仅可用 safe_mode_exec_dir 执行文件。实际上，现在不允许在到可执行的路径中存在 .. 组件。

Warning

安全模式 启用时，命令字符串会被 escapeshellcmd() 转换。因此，echo y | echo x 会变成 echo y \| echo x。

### 参见

- system() - 执行外部程序，并且显示输出
- passthru() - 执行外部程序并且显示原始输出
- escapeshellcmd() - shell 元字符转义
- pcntl_exec() - 在当前进程空间执行指定程序
- 执行运算符