PHP | popen 函数
Lasted 2021-01-19 16:37:24
popen 函数打开进程文件指针。
打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。
函数定义
popen ( string $command , string $mode ) : resource
// 源文件位于:ext/standard/file.c
# 函数定义
PHP_FUNCTION(popen)
{
...
posix_mode = estrndup(mode, mode_len);
#ifndef PHP_WIN32
{
char *z = memchr(posix_mode, 'b', mode_len);
if (z) {
memmove(z, z + 1, mode_len - (z - posix_mode));
mode_len--;
}
}
#endif
/* Musl only partially validates the mode. Manually check it to ensure consistent behavior. */
if (mode_len > 2 ||
(mode_len == 1 && (*posix_mode != 'r' && *posix_mode != 'w')) ||
(mode_len == 2 && (memcmp(posix_mode, "rb", 2) && memcmp(posix_mode, "wb", 2)))
) {
zend_argument_value_error(2, "must be one of \"r\", \"rb\", \"w\", or \"wb\"");
efree(posix_mode);
RETURN_THROWS();
}
fp = VCWD_POPEN(command, posix_mode);
if (!fp) {
php_error_docref2(NULL, command, posix_mode, E_WARNING, "%s", strerror(errno));
efree(posix_mode);
RETURN_FALSE;
}
stream = php_stream_fopen_from_pipe(fp, mode);
if (stream == NULL) {
php_error_docref2(NULL, command, mode, E_WARNING, "%s", strerror(errno));
RETVAL_FALSE;
} else {
php_stream_to_zval(stream, return_value);
}
efree(posix_mode);
}
参数
- checkcommand - 命令。
- checkmode - 模式。
返回值
- checkint - 返回一个和 fopen() 所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用 pclose() 来关闭。发生错误时会返回 false。
示例1: - 使用 popen() 函数打开进程文件指针。
<?php
/**
* PHP popen() 函数打开进程文件指针。
*
* @since Version 1.0.0
* @filesource
*/
// 创建进程
$handle = popen('/bin/ls', 'r');
// 关闭进程指针
pclose($handle);