(PHP 4, PHP 5, PHP 7)
popen – 打开进程文件指针
说明
popen
( string $command
, string $mode
) : resource
打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。
参数
command
命令。
mode
模式。
返回值
返回一个和 [fopen()](php7/function.fopen)
所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用
[pclose()](php7/function.pclose) 来关闭。此指针可以用于
[fgets()](php7/function.fgets),[fgetss()](php7/function.fgetss) 和
[fwrite()](php7/function.fwrite)。
当模式为 'r',返回的文件指针等于命令的 STDOUT,当模式为 'w',返回的文件指针等于命令的 STDIN。
如果出错返回 FALSE。
范例
Example #1 popen() 例子
$handle = popen("/bin/ls", "r");
?>
如果未找到要执行的命令,会返回一个合法的资源。这看上去很怪,但有道理。它允许访问
shell 返回的任何错误信息:
Example #2 popen() 例子
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()](php7/function.proc-open)。
Note: [安全模式](php7/features.safe-mode) 启用时,可仅可用
[safe_mode_exec_dir](php7/ini.sect.safe-mode) 执行文件。实际上,现在不允许在到可执行的路径中存在 .. 组件。
Warning
[安全模式](php7/features.safe-mode) 启用时,命令字符串会被
[escapeshellcmd()](php7/function.escapeshellcmd) 转换。因此,echo y | echo x 会变成
echo y | echo x。
参见
[pclose()](php7/function.pclose) – 关闭进程文件指针
[fopen()](php7/function.fopen) – 打开文件或者 URL
[proc_open()](php7/function.proc-open) – 执行一个命令,并且打开用来输入/输出的文件指针。