Встроенные фильтры в php

PHPCod3r

Знаток
Регистрация
7 Июн 2010
Сообщения
257
Реакции
25
Преветствую всех, наверно все знают что в пхп есть фильтры, получить полный список, фильтров можно командой
PHP:
print_r(stream_get_filters());
При этом на одном сервере, список фильтров может сильно отличаться от списка на другом
Далее идем на офф сайт пхп и читаем
Для просмотра ссылки Войди или Зарегистрируйся
List of Available Filters
Table of Contents

String Filters
Conversion Filters
Compression Filters
Encryption Filters

The following is a list of a few built-in stream filters for use with stream_filter_append(). Your version of PHP may have more filters (or fewer) than those listed here.

Но я замечал такие фильтры
consumed
dechunk
convert.iconv.*

В офф документации про них похоже не слова или может я не там искал, помогите разобраться что это за фильтры
Или хотя бы где в сорцах пхп они определяются, укажите, может там еще что интересное определяется?)
 
хз что это. возможно какой то системный фильтр. Всё что нагуглил- что он добавился в 2006 году.

Для просмотра ссылки Войди или Зарегистрируйся
Т.е как я понял убирает разбиение от сервера Transfer-Encoding chunked

Для просмотра ссылки Войди или Зарегистрируйся
+ смотри что делает функция iconv
 
Для просмотра ссылки Войди или Зарегистрируйся Для просмотра ссылки Войди или Зарегистрируйся
Эт что? первая ссылка это понятно- там написано о уязвимости этого фильтра и написано как он работает в исходнике. Ну более менее подходит под ТЗ а вторая ссылка ?
 
convert.iconv.* это зарегистрированный фильтр потока
вот ссылка с более подробной информацией Для просмотра ссылки Войди или Зарегистрируйся
 
хз что это. возможно какой то системный фильтр. Всё что нагуглил- что он добавился в 2006 году.


Для просмотра ссылки Войди или Зарегистрируйся
Т.е как я понял убирает разбиение от сервера Transfer-Encoding chunked


Для просмотра ссылки Войди или Зарегистрируйся
+ смотри что делает функция iconv

Ок большое спасибо за ответ, мальца сам тоже погуглил и нашел что фильтр consumed
определеяется в ext\standard\filters.c
вот так
Код:
/* {{{ consumed filter implementation */
typedef struct _php_consumed_filter_data {
	int persistent;
	size_t consumed;
	off_t offset;
} php_consumed_filter_data;

static php_stream_filter_status_t consumed_filter_filter(
	php_stream *stream,
	php_stream_filter *thisfilter,
	php_stream_bucket_brigade *buckets_in,
	php_stream_bucket_brigade *buckets_out,
	size_t *bytes_consumed,
	int flags
	TSRMLS_DC)
{
	php_consumed_filter_data *data = (php_consumed_filter_data *)(thisfilter->abstract);
	php_stream_bucket *bucket;
	size_t consumed = 0;

	if (data->offset == ~0) {
		data->offset = php_stream_tell(stream);
	}
	while ((bucket = buckets_in->head) != NULL) {
		php_stream_bucket_unlink(bucket TSRMLS_CC);
		consumed += bucket->buflen;
		php_stream_bucket_append(buckets_out, bucket TSRMLS_CC);
	}
	if (bytes_consumed) {
		*bytes_consumed = consumed;
	}
	if (flags & PSFS_FLAG_FLUSH_CLOSE) {
		php_stream_seek(stream, data->offset + data->consumed, SEEK_SET);
	}
	data->consumed += consumed;
	
	return PSFS_PASS_ON;
}

static void consumed_filter_dtor(php_stream_filter *thisfilter TSRMLS_DC)
{
	if (thisfilter && thisfilter->abstract) {
		php_consumed_filter_data *data = (php_consumed_filter_data*)thisfilter->abstract;
		pefree(data, data->persistent);
	}
}

static php_stream_filter_ops consumed_filter_ops = {
	consumed_filter_filter,
	consumed_filter_dtor,
	"consumed"
};

static php_stream_filter *consumed_filter_create(const char *filtername, zval *filterparams, int persistent TSRMLS_DC)
{
	php_stream_filter_ops *fops = NULL;
	php_consumed_filter_data *data;

	if (strcasecmp(filtername, "consumed")) {
		return NULL;
	}

	/* Create this filter */
	data = pecalloc(1, sizeof(php_consumed_filter_data), persistent);
	if (!data) {
		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed allocating %zd bytes", sizeof(php_consumed_filter_data));
		return NULL;
	}
	data->persistent = persistent;
	data->consumed = 0;
	data->offset = ~0;
	fops = &consumed_filter_ops;

	return php_stream_filter_alloc(fops, data, persistent);
}

php_stream_filter_factory consumed_filter_factory = {
	consumed_filter_create
};

/* }}} */

Осталось только понять что же он такое страшное делает, и как его применять?
может у кого есть идеи?

convert.iconv.* это зарегистрированный фильтр потока
вот ссылка с более подробной информацией Для просмотра ссылки Войди или Зарегистрируйся

За сыль спасибо конечно но юзерские фильтры это не много нето. интересуеют имено встроенные фильтры
Про iconv вот тут расписано
Для просмотра ссылки Войди или Зарегистрируйся
а на офф сайте не шиша, за исключением кучи баг с этим фильтром ((
 
Назад
Сверху