I have trying to make some “replacement-wrapper” over stream described in this : [article][1]
But when I tested it with not so big file (about 120M) it showed me an error:
JavaScript
x
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65011744 bytes) in C:Apache22htdocstutsphpstreamsfiltersHiddenNameFilter.php on line 28
Here is my wrapper:
JavaScript
class HiddenNameFilter extends PHP_User_Filter
{
private $data;
private $limiter;
function onCreate()
{
$this->data = '';
$this->limiter = 2;
return true;
}
function filter($in, $out, &$consumed, $closing)
{
while($bucket = stream_bucket_make_writeable($in))
{
$this->data .= $bucket->data;
$this->bucket = $bucket;
$consumed = 0;
}
if($closing)
{
$consumed += strlen($this->data);
$pattern = "/Andrii/m";
$str = preg_replace($pattern, '0_+', $this->data);
$this->bucket->data = $str;
$this->bucket->datalen = strlen($this->data);
if(!empty($this->bucket->data))
{
stream_bucket_append($out, $this->bucket);
}
return PSFS_PASS_ON;
}
return PSFS_FEED_ME;
}
}
Here is my сlient code:
JavaScript
$handle = fopen(__DIR__ . '/big_file.txt', 'r');
stream_filter_register('myFilter', 'HiddenNameFilter');
stream_filter_append($handle, "myFilter");
$i = 0;
while($i != 30)
{
$email = fgets($handle);
if(!$email) break;
$i++;
$contents .= $email;
}
fclose($handle);
echo $contents;
Also I have found some PHP bug [here][2] but I dont know how to solve my problem.
I have PHP 7.3.7 (cli) (built: Jul 3 2019 14:34:10) ( ZTS MSVC15 (Visual C++ 2017) x64 ) On windows 10/ Please help) [1]: https://stackify.com/a-guide-to-streams-in-php-in-depth-tutorial-with-examples/ [2]: https://www.hashbangcode.com/article/php-custom-stream-filters
Advertisement
Answer
add your php code header
JavaScript
ini_set('memory_limit', '-1');