# 程序执行

* [escapeshellarg - 把字符串转码为可以在 Shell 命令里使用的参数](#escapeshellarg)
* [escapeshellcmd - Shell 元字符转义](#escapeshellcmd)
* [exec - 执行一个外部程序](#exec)
* [passthru - 执行外部程序并且显示原始输出](#passthru)
* [proc_close - 关闭由 proc_open 打开的进程并且返回进程退出码](#procclose)
* [proc_get_status - 获取由 proc_open 函数打开的进程的信息](#procgetstatus)
* [proc_nice - 修改当前进程的优先级](#procnice)
* [proc_open - 执行一个命令，并且打开用来输入 / 输出的文件指针](#procopen)
* [proc_terminate - 终止由 proc_open 打开的进程](#procterminate)
* [shell_exec - 通过 Shell 环境执行命令，并且将完整的输出以字符串的方式返回](#shellexec)
* [system - 执行外部程序，并且显示输出](#system)

## escapeshellarg

```php
<?php

var_dump(escapeshellarg('foo')); // string(5) ""foo""

```

## escapeshellcmd

```php
<?php

var_dump(escapeshellarg('&#;`|*?~<>^()[]{}$\%!')); // string(23) ""&#;`|*?~<>^()[]{}$\  ""

```

## exec

```php
<?php

var_dump(exec('dir'));
var_dump(exec('dir', $foo));
var_dump($foo);
var_dump(exec('dir', $foo, $bar));
var_dump($foo, $bar);

```

## passthru

```php
<?php

passthru('dir');
passthru('dir', $foo);
var_dump($foo);

```

## proc_close

```php
<?php

$descriptorspec = [
    0 => ['pipe', 'r'],
    1 => ['pipe', 'w'],
    2 => ['file', __DIR__ . '/error.log', 'a']
];
$process = proc_open('php', $descriptorspec, $pipes, __DIR__);
var_dump(proc_close($process));

```

## proc_get_status

```php
<?php

$descriptorspec = [
    0 => ['pipe', 'r'],
    1 => ['pipe', 'w'],
    2 => ['file', __DIR__ . '/error.log', 'a']
];
$process = proc_open('php', $descriptorspec, $pipes, __DIR__);
var_dump(proc_get_status($process));

```

## proc_nice

```php
<?php

var_dump(proc_nice(-20));
var_dump(proc_nice(20));

```

## proc_open

```php
<?php

$descriptorspec = [
    0 => ['pipe', 'r'],
    1 => ['pipe', 'w'],
    2 => ['file', __DIR__ . '/error.log', 'a']
];
$process = proc_open('php', $descriptorspec, $pipes, __DIR__);
var_dump($process);

if (is_resource($process)) {
    fwrite($pipes[0], '<?php echo 2 + 3; ?>');
    fclose($pipes[0]);
    var_dump(stream_get_contents($pipes[1])); // string(1) "5"
    fclose($pipes[1]);
    var_dump(proc_close($process));
}

```

## proc_terminate

```php
<?php

$descriptorspec = [
    0 => ['pipe', 'r'],
    1 => ['pipe', 'w'],
    2 => ['file', __DIR__ . '/error.log', 'a']
];
$process = proc_open('php', $descriptorspec, $pipes, __DIR__);
var_dump(proc_terminate($process));

```

## shell_exec

```php
<?php

var_dump(shell_exec('dir'));

```

## system

```php
<?php

var_dump(system('dir'));
var_dump(system('dir', $foo));
var_dump($foo);

```

