update
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
"name": "clue/stream-filter",
|
||||
"description": "A simple and modern approach to stream filtering in PHP",
|
||||
"keywords": ["stream", "callback", "filter", "php_user_filter", "stream_filter_append", "stream_filter_register", "bucket brigade"],
|
||||
"homepage": "https://github.com/clue/php-stream-filter",
|
||||
"homepage": "https://github.com/clue/stream-filter",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
@@ -14,13 +14,19 @@
|
||||
"php": ">=5.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36"
|
||||
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": { "Clue\\StreamFilter\\": "src/" },
|
||||
"files": [ "src/functions_include.php" ]
|
||||
"psr-4": {
|
||||
"Clue\\StreamFilter\\": "src/"
|
||||
},
|
||||
"files": [
|
||||
"src/functions_include.php"
|
||||
]
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": { "Clue\\Tests\\StreamFilter\\": "tests/" }
|
||||
"psr-4": {
|
||||
"Clue\\Tests\\StreamFilter\\": "tests/"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,13 +104,27 @@ namespace Clue\StreamFilter;
|
||||
*/
|
||||
function append($stream, $callback, $read_write = STREAM_FILTER_ALL)
|
||||
{
|
||||
$ret = @\stream_filter_append($stream, register(), $read_write, $callback);
|
||||
$errstr = '';
|
||||
\set_error_handler(function ($_, $error) use (&$errstr) {
|
||||
// Match errstr from PHP's warning message.
|
||||
// stream_filter_append() expects parameter 1 to be resource,...
|
||||
$errstr = $error; // @codeCoverageIgnore
|
||||
});
|
||||
|
||||
try {
|
||||
$ret = \stream_filter_append($stream, register(), $read_write, $callback);
|
||||
} catch (\TypeError $e) { // @codeCoverageIgnoreStart
|
||||
// Throws TypeError on PHP 8.0+
|
||||
\restore_error_handler();
|
||||
throw $e;
|
||||
} // @codeCoverageIgnoreEnd
|
||||
|
||||
\restore_error_handler();
|
||||
|
||||
// PHP 8 throws above on type errors, older PHP and memory issues can throw here
|
||||
// @codeCoverageIgnoreStart
|
||||
if ($ret === false) {
|
||||
$error = \error_get_last() + array('message' => '');
|
||||
throw new \RuntimeException('Unable to append filter: ' . $error['message']);
|
||||
throw new \RuntimeException('Unable to append filter: ' . $errstr);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
@@ -147,13 +161,27 @@ function append($stream, $callback, $read_write = STREAM_FILTER_ALL)
|
||||
*/
|
||||
function prepend($stream, $callback, $read_write = STREAM_FILTER_ALL)
|
||||
{
|
||||
$ret = @\stream_filter_prepend($stream, register(), $read_write, $callback);
|
||||
$errstr = '';
|
||||
\set_error_handler(function ($_, $error) use (&$errstr) {
|
||||
// Match errstr from PHP's warning message.
|
||||
// stream_filter_prepend() expects parameter 1 to be resource,...
|
||||
$errstr = $error; // @codeCoverageIgnore
|
||||
});
|
||||
|
||||
try {
|
||||
$ret = \stream_filter_prepend($stream, register(), $read_write, $callback);
|
||||
} catch (\TypeError $e) { // @codeCoverageIgnoreStart
|
||||
// Throws TypeError on PHP 8.0+
|
||||
\restore_error_handler();
|
||||
throw $e;
|
||||
} // @codeCoverageIgnoreEnd
|
||||
|
||||
\restore_error_handler();
|
||||
|
||||
// PHP 8 throws above on type errors, older PHP and memory issues can throw here
|
||||
// @codeCoverageIgnoreStart
|
||||
if ($ret === false) {
|
||||
$error = \error_get_last() + array('message' => '');
|
||||
throw new \RuntimeException('Unable to prepend filter: ' . $error['message']);
|
||||
throw new \RuntimeException('Unable to prepend filter: ' . $errstr);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
@@ -242,16 +270,25 @@ function prepend($stream, $callback, $read_write = STREAM_FILTER_ALL)
|
||||
function fun($filter, $parameters = null)
|
||||
{
|
||||
$fp = \fopen('php://memory', 'w');
|
||||
|
||||
$errstr = '';
|
||||
\set_error_handler(function ($_, $error) use (&$errstr) {
|
||||
// Match errstr from PHP's warning message.
|
||||
// stream_filter_append() expects parameter 1 to be resource,...
|
||||
$errstr = $error;
|
||||
});
|
||||
|
||||
if (\func_num_args() === 1) {
|
||||
$filter = @\stream_filter_append($fp, $filter, \STREAM_FILTER_WRITE);
|
||||
$filter = \stream_filter_append($fp, $filter, \STREAM_FILTER_WRITE);
|
||||
} else {
|
||||
$filter = @\stream_filter_append($fp, $filter, \STREAM_FILTER_WRITE, $parameters);
|
||||
$filter = \stream_filter_append($fp, $filter, \STREAM_FILTER_WRITE, $parameters);
|
||||
}
|
||||
|
||||
\restore_error_handler();
|
||||
|
||||
if ($filter === false) {
|
||||
\fclose($fp);
|
||||
$error = \error_get_last() + array('message' => '');
|
||||
throw new \RuntimeException('Unable to access built-in filter: ' . $error['message']);
|
||||
throw new \RuntimeException('Unable to access built-in filter: ' . $errstr);
|
||||
}
|
||||
|
||||
// append filter function which buffers internally
|
||||
@@ -301,10 +338,26 @@ function fun($filter, $parameters = null)
|
||||
*/
|
||||
function remove($filter)
|
||||
{
|
||||
if (@\stream_filter_remove($filter) === false) {
|
||||
$errstr = '';
|
||||
\set_error_handler(function ($_, $error) use (&$errstr) {
|
||||
// Match errstr from PHP's warning message.
|
||||
// stream_filter_remove() expects parameter 1 to be resource,...
|
||||
$errstr = $error;
|
||||
});
|
||||
|
||||
try {
|
||||
$ret = \stream_filter_remove($filter);
|
||||
} catch (\TypeError $e) { // @codeCoverageIgnoreStart
|
||||
// Throws TypeError on PHP 8.0+
|
||||
\restore_error_handler();
|
||||
throw $e;
|
||||
} // @codeCoverageIgnoreEnd
|
||||
|
||||
\restore_error_handler();
|
||||
|
||||
if ($ret === false) {
|
||||
// PHP 8 throws above on type errors, older PHP and memory issues can throw here
|
||||
$error = \error_get_last();
|
||||
throw new \RuntimeException('Unable to remove filter: ' . $error['message']);
|
||||
throw new \RuntimeException('Unable to remove filter: ' . $errstr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace Clue\StreamFilter;
|
||||
|
||||
// @codeCoverageIgnoreStart
|
||||
if (!\function_exists('Clue\\StreamFilter\\append')) {
|
||||
if (!\function_exists(__NAMESPACE__ . '\\append')) {
|
||||
require __DIR__ . '/functions.php';
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
Reference in New Issue
Block a user