Stream Filters can only be used if the isActiveStreamFilter method returns true

Using the Reader class

$reader = Reader::createFromPath(__DIR__.'/data/prenoms.csv');
if ($reader->isActiveStreamFilter()) {
    $reader->appendStreamFilter(FilterTranscode::FILTER_NAME."iso-8859-1:utf-8");
    $reader->appendStreamFilter('string.toupper');
    $reader->appendStreamFilter('string.rot13');
}
$reader->setDelimiter(';');
$reader->setOffset(6);
$reader->setLimit(3);
$res = $reader->fetchAssoc(['Prenom', 'Occurences', 'Sexe', 'Annee']);

the data is :

  1. transcoded by the Stream Filter from ISO-8859-1 to UTF-8
  2. uppercased
  3. rot13 transformed
isActiveStreamFilter()) { $reader->appendStreamFilter(FilterTranscode::FILTER_NAME."iso-8859-1:utf-8"); $reader->appendStreamFilter('string.toupper'); $reader->appendStreamFilter('string.rot13'); } $reader->setDelimiter(';'); $reader->setOffset(6); $reader->setLimit(3); $res = $reader->fetchAssoc(['Prenom', 'Occurences', 'Sexe', 'Annee']); var_dump(iterator_to_array($res, false)); ?>

Let's remove the string.toupper stream filter

if ($reader->isActiveStreamFilter()) {
    $reader->removeStreamFilter('string.toupper');
}
$reader->setOffset(6);
$reader->setLimit(3);
$res = $reader->fetchAssoc(['Prenom', 'Occurences', 'Sexe', 'Annee']);

var_dump(iterator_to_array($res, false));
isActiveStreamFilter()) { $reader->removeStreamFilter('string.toupper'); } $reader->setOffset(6); $reader->setLimit(3); $res = $reader->fetchAssoc(['Prenom', 'Occurences', 'Sexe', 'Annee']); var_dump(iterator_to_array($res, false)); ?>

Using the Writer class

You can not add/remove/update stream filters between inserts calls

$writer = Writer::createFromPath('/tmp/test.csv', 'w');
if ($writer->isActiveStreamFilter()) {
    $writer->appendStreamFilter('string.toupper');
}
$writer->insertOne('je,suis,toto,le,héros');
isActiveStreamFilter()) { $writer->appendStreamFilter('string.toupper'); } $writer->insertOne('je,suis,toto,le,héros'); ?>

When the first insert call is done... the stream filter status is frozen and can no longer be updated !! Any added row will be uppercased only no matter what.

isActiveStreamFilter()) { $writer->appendStreamFilter('string.rot13'); $writer->removeStreamFilter('string.toupper'); } $writer->insertOne('je,suis,toto,le,héros'); ?>

To update the filters you need to:

  1. create a new Writer object don't forget to update the $open_mode
  2. apply the new stream filters
$writer = $writer->newWriter('a+');
if ($writer->isActiveStreamFilter()) {
    $writer->appendStreamFilter('string.rot13');
    $writer->prependStreamFilter('string.strip_tags');
}
$writer->insertAll([
    'je,suis,toto,le,héros',
    'je,<strong>suis</strong>,toto,le,héros'
]);
echo $writer->newReader()->toHTML();
newWriter('a+'); if ($writer->isActiveStreamFilter()) { $writer->appendStreamFilter('string.rot13'); $writer->prependStreamFilter('string.strip_tags'); } $writer->insertAll([ 'je,suis,toto,le,héros', 'je,suis,toto,le,héros', ]); echo $writer->newReader()->toHTML(), PHP_EOL; ?>