# popen

(PHP 4, PHP 5, PHP 7)

popen — 打开进程文件指针

### 说明

popen ( string `$command` , string `$mode` ) : resource

打开一个指向进程的管道，该进程由派生给定的 command 命令执行而产生。

### 参数

`command`

  命令。

`mode`

  模式。

### 返回值

返回一个和 fopen() 所返回的相同的文件指针，只不过它是单向的（只能用于读或写）并且必须用 pclose() 来关闭。此指针可以用于 fgets()，fgetss() 和 fwrite()。 当模式为 'r'，返回的文件指针等于命令的 STDOUT，当模式为 'w'，返回的文件指针等于命令的 STDIN。

如果出错返回 `FALSE`。

### 范例

Example #1 popen() 例子

    <?php
    $handle = popen("/bin/ls", "r");
    ?>

如果未找到要执行的命令，会返回一个合法的资源。这看上去很怪，但有道理。它允许访问 shell 返回的任何错误信息：

Example #2 popen() 例子

    <?php
    error_reporting(E_ALL);

    /* 加入重定向以得到标准错误输出 stderr。 */
    $handle = popen('/path/to/executable 2>&1', 'r');
    echo "'$handle'; " . gettype($handle) . "\n";
    $read = fread($handle, 2096);
    echo $read;
    pclose($handle);
    ?>

### 注释

> Note:

> 如果需要双向支持，使用 proc_open()。

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

Warning

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

### 参见

- pclose() - 关闭进程文件指针
- fopen() - 打开文件或者 URL
- proc_open() - 执行一个命令，并且打开用来输入/输出的文件指针。