PHP | popen 函數
怎樣打開進程文件指針
最近更新時間 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);