read.phpt   [plain text]


--TEST--
stream filter - reading
--FILE--
<?php
echo "-TEST\n";
class filter extends php_user_filter {
    function filter($in, $out, &$consumed, $closing)
    {
        $output = 0;
        while ($bucket = stream_bucket_make_writeable($in)) {
            $bucket->data = strtoupper($bucket->data);
            $consumed += $bucket->datalen;
            stream_bucket_append($out, $bucket);
            $output = 1;
        }
        if ($closing) {
            $bucket = stream_bucket_new($this->stream, "\n===close===\n");
            stream_bucket_append($out, $bucket);
            $output = 1;
        }
        return $output ? PSFS_PASS_ON : PSFS_FEED_ME;
    }
}
stream_filter_register("strtoupper", "filter")
   or die("Failed to register filter");

if ($f = fopen(__FILE__, "rb")) {
    stream_filter_append($f, "strtoupper");
    while (!feof($f)) {
        echo fread($f, 8192);
    }
    fclose($f);
}
echo "Done\n";
?>
--EXPECTF--
%sTEST
<?PHP
ECHO "-TEST\N";
CLASS FILTER EXTENDS PHP_USER_FILTER {
    FUNCTION FILTER($IN, $OUT, &$CONSUMED, $CLOSING)
    {
        $OUTPUT = 0;
        WHILE ($BUCKET = STREAM_BUCKET_MAKE_WRITEABLE($IN)) {
            $BUCKET->DATA = STRTOUPPER($BUCKET->DATA);
            $CONSUMED += $BUCKET->DATALEN;
            STREAM_BUCKET_APPEND($OUT, $BUCKET);
            $OUTPUT = 1;
        }
        IF ($CLOSING) {
            $BUCKET = STREAM_BUCKET_NEW($THIS->STREAM, "\N===CLOSE===\N");
            STREAM_BUCKET_APPEND($OUT, $BUCKET);
            $OUTPUT = 1;
        }
        RETURN $OUTPUT ? PSFS_PASS_ON : PSFS_FEED_ME;
    }
}
STREAM_FILTER_REGISTER("STRTOUPPER", "FILTER")
   OR DIE("FAILED TO REGISTER FILTER");

IF ($F = FOPEN(__FILE__, "RB")) {
    STREAM_FILTER_APPEND($F, "STRTOUPPER");
    WHILE (!FEOF($F)) {
        ECHO FREAD($F, 8192);
    }
    FCLOSE($F);
}
ECHO "DONE\N";
?>

===close===
Done