I am trying to calculate data written to a file using ftell
while applying zlib.deflate
stream filter. But ftell
based size differs from actual size of data written to file.
Following is my code
$handler_read = fopen('image.jpg', 'rb');
$handler_write = fopen('image.jpg.z', 'wb');
$stream_filter = stream_filter_append($handler_write, 'zlib.deflate', STREAM_FILTER_WRITE);
printf("Cursor at: %s%s", ftell($handler_write), PHP_EOL);
$start = ftell($handler_write);
while(!feof($handler_read)) {
$chunk = fread($handler_read, 1024*512);
fwrite($handler_write, $chunk);
printf("Cursor at: %s%s", ftell($handler_write), PHP_EOL);
}
$end = ftell($handler_write);
fclose($handler_read);
fclose($handler_write);
printf("Actual size: %s%s", filesize('image.jpg.z'), PHP_EOL );
printf("Curser based size: %s%s", $end - $start, PHP_EOL);
And following are the results
Cursor at: 0
Cursor at: 463944
Cursor at: 989108
Cursor at: 1055270
Actual size: 1148880
Curser based size: 1055270