@ob_end_clean();
$handle = $this->fopen($path, 'rb');
if ($handle) {
- if (fseek($handle, $from) === 0) {
- $chunkSize = 8192; // 8 kB chunks
+ $chunkSize = 8192; // 8 kB chunks
+ $startReading = true;
+
+ if ($from !== 0 && $from !== '0' && fseek($handle, $from) !== 0) {
+ // forward file handle via chunked fread because fseek seem to have failed
+
+ $end = $from + 1;
+ while (!feof($handle) && ftell($handle) < $end) {
+ $len = $from - ftell($handle);
+ if ($len > $chunkSize) {
+ $len = $chunkSize;
+ }
+ $result = fread($handle, $len);
+
+ if ($result === false) {
+ $startReading = false;
+ break;
+ }
+ }
+ }
+
+ if ($startReading) {
$end = $to + 1;
while (!feof($handle) && ftell($handle) < $end) {
$len = $end - ftell($handle);