private function advanceChunks() { if ($this->chunkOffset >= $this->numChunks) { $this->iteratorEmpty = true; return false; } if ($this->firstCheck) { $this->chunksIterator->rewind(); $this->firstCheck = false; } else { $this->chunksIterator->next(); } if (!$this->chunksIterator->valid()) { throw CorruptFileException::missingChunk($this->chunkOffset); } if ($this->chunksIterator->current()->n != $this->chunkOffset) { throw CorruptFileException::unexpectedIndex($this->chunksIterator->current()->n, $this->chunkOffset); } $actualChunkSize = strlen($this->chunksIterator->current()->data->getData()); $expectedChunkSize = $this->chunkOffset == $this->numChunks - 1 ? $this->file->length - $this->bytesSeen : $this->file->chunkSize; if ($actualChunkSize != $expectedChunkSize) { throw CorruptFileException::unexpectedSize($actualChunkSize, $expectedChunkSize); } $this->bytesSeen += $actualChunkSize; $this->chunkOffset++; return true; }