- 
                Notifications
    You must be signed in to change notification settings 
- Fork 8
Description
I have found this problem in the wild on a 20i web host.
On the 20i CDN, it seems that for paths that end in "streamable" extensions (e.g.  \.mp3$, \.wav$) which are handled by PHP (e.g. rewritten in .htaccess), HTTP requests will always be split up behind the scenes into ranges of whole megabyte-sized blocks (e.g. bytes=0-1048575, bytes=1048576-2097151).
The smartReadFile function uses these values as given for $begin and $end, and the Content-Length will be based on these.
But for the final block, if it's not a whole megabyte, then the fread loop will go past the end of the file, less data will be returned than expected from the Content-Length, and 20i will return nothing for this block.
The effective result is that the amount of data received will be rounded down to the nearest whole megabyte.
I think this can be fixed simply by ensuring the $end value is only updated if the new value is lower than the original ($size - 1).
I can submit a pull request for this if that would be helpful, but PHP is not my most fluent language.